最近在看LM3s 的CAN接口,从shilaike《本人学习CAN的所有的资料文档和心得》这篇帖子中下载了不少有用的资料,通过学习,对一些基本的函数的使用掌握的查不多了。不过随着学习的深入,也出现了一些新的困惑。 据我所知,CAN是一种工业总线,是可以挂100多个节点的,节点也有自己在网络中的唯一地址,所以节点之间可以自由通信。而我看到坛子的帖子中大部分帖子,(也许是板子不够),普遍都是利用ti提供的CAN通信例程,从一个板发信息,另一个板接受信息,貌似成了一个主从似的一对一结构。对组成CAN网络这块谈及很少,我在学习的时候,感觉到如果LM3S的CAN仅仅是这样一对一的应用,实在是太可惜了。希望有过CAN组网这方面经验的大侠,能交流一下。
while (1) { //GpReFrameBuf->ucSize > 0表示已经接收到数据 if (GpReFrameBuf->ucSize > 0) { //读数据缓冲区 while (canReadByteBuf(GpReFrameBuf, &tCanFrame) != EMPTY) { //缓冲区不为空,继续发送 GbCANTI = false; canFrameSend(GpCanNodeInfo, &tCanFrame);
//延时等待发送成功 while (GbCANTI != true) { delay(10 * (GulSysClock / 3000)); } } //重配置节点接收验收过滤,配置"接收报文对象",用于接收 //第一个参数:一个空节点空指针 //第二个参数:接收帧ID //第三个参数:接收帧屏蔽码(屏蔽) //第四个参数:为接收过滤验收方式,使用的是扩展帧 //第五个参数:接收远程帧报文对象,将配置pNodeInfo->ulTxMsgObjNr canMsgObjSet(GpCanNodeInfo, 0x123, MASK, EXT_ID_FILTER, MSG_OBJ_TYPE_RX_REMOTE); } else { delay(20 * (GulSysClock / 3000)); } } }
GbCANTI 这个CAN发送成功中断标志,我没有看到在什么地方置位,进 canFrameSend(GpCanNodeInfo, &tCanFrame)函数看了也没有发现给他置位,如果没有置位的,岂不是一直在延时等待?
以上是我一些学习的困惑,希望和大家沟通,也许是我学的太浅薄,或者程序看的不仔细,还请大家直言批评
|