这段时间工作生活都一团浆糊,博客也一直没有更新,连专栏也被下架了,呵呵。但是每天都上来看看。
最近一直在调CAN的通信,有些东西还是值得去分享下的。
因为CAN是要组成网络的,所以要调试自己的CAN板卡或设备,最好有标准的CAN设备与之通信测试。我手头正好有一个USB-CAN的装置,为了避免广告的嫌疑吧,就不提是哪家公司的了,当然,细心的朋友还是能搜到的,呵呵。
大概是这个USB-CAN的装置是主要进行CANopen通信,且主要与该公司的其他CAN设备通信用的,所以在一开始,总是通信不成功,而找不到原因。后来仔细查看了帮助文档,在文档最后有这样一段话:
据此程序做了修改,并用串口把数据打印到屏幕上来看,发现原来这17字节的数据是放在CAN的每帧8字节数据里面发送的,也就是上图中说的一个数据包,如果用“裸”的CAN协议通信,要被分成三帧发送过来。
我们想要通信的数据,实际上是在第二帧的第二个字节开始的。
所以我们的程序要做出调整。因为该项目是公司的,完整的工程不便上传,这里只发一个函数吧,就是CAN中断的。
测试的内容很简单,只发送一个0x11,只要收到LED(PB12)就取一次反,亦即收到两次0x11,LED就一次亮灭。
程序中由变量i来区分是三帧的哪一帧,然后只取出想要的0x11.
再发一个吧,是板子回复USB-CAN的。是吧收到的数据,再重新发回去。
用一个数组,Test[8],把第一帧的内容先发出去,再发第二帧。
当然,这种方法不见得适用于其他朋友,因为不见得大家都用同样的USB-CAN.
希望通过EDN认识更多志同道合的朋友,一起进步。
文章评论(0条评论)
登录后参与讨论