dongaohui 发表于 2015-4-22 13:22:05

c2000 CAN通信问题求教

目前使用TI开发套件仿真实验can通讯收发例程(用TI提供的例程改成正常收发模式),发现:
ECanaRegs.CANTRS.all = 0x0000FFFF;
while(ECanaRegs.CANTA.all != 0x0000FFFF )
{
}
在while发送完成等待过程中,当连接USBCAN并启动接收时例程可以正常发送,但当移除USBCAN时即会死在      while中且CANTA一直为全零。
请教诸位,是否必须要接接收设备如USBCAN才可正常运作?如果真是如此用怎样的方法才可有效避免死循环,是否有寄存器可以设置?谢谢~

steaven2000 发表于 2015-4-22 13:35:51

玩过股票没?没玩过我教你:你要买股票,那得有卖;你要卖股票,那得有人买。CAN跟这个相似,没有接收端,是发不出去的。至于怎么解决你的CAN问题,好好动动脑子。

dongaohui 发表于 2015-4-22 13:46:05

steaven2000 发表于 2015-4-22 13:35
玩过股票没?没玩过我教你:你要买股票,那得有卖;你要卖股票,那得有人买。CAN跟这个相似,没有接收端, ...

额,谢谢。如果这样的话我想通过设置can模块超时寄存器能够解决这个问题的吧

steaven2000 发表于 2015-4-22 13:55:23

dongaohui 发表于 2015-4-22 13:46
额,谢谢。如果这样的话我想通过设置can模块超时寄存器能够解决这个问题的吧 ...

这是一个行为的问题,而不是功能的问题。
怎么跟你解释呢?你看,你那个while仅仅是为了确认CAN发送出去了没对不对?为什么一定要去做这个确认,或者说换一个角度来考虑,写了寄存器我就不管了不行么?这样CPU就可以去做别的事了啊。
再给你进一步的思路:某个CAN发送邮箱,你发送完了后置忙状态,在发送中断中清忙状态,这样哪个邮箱处于什么状态,哪个邮箱可以用来发消息,这不一清二楚了吗?

dongaohui 发表于 2015-4-22 15:13:26

steaven2000 发表于 2015-4-22 13:55
这是一个行为的问题,而不是功能的问题。
怎么跟你解释呢?你看,你那个while仅仅是为了确认CAN发送出去了 ...

恩,明白了,十分感谢{:smile:}

logosz 发表于 2015-4-24 00:36:03

dongaohui 发表于 2015-4-22 13:46
额,谢谢。如果这样的话我想通过设置can模块超时寄存器能够解决这个问题的吧 ...

最简单的办法,你把TX和RX短路,你就会发现可以发送成功了

steaven2000 发表于 2015-4-24 12:33:57

logosz 发表于 2015-4-24 00:36
最简单的办法,你把TX和RX短路,你就会发现可以发送成功了

你确定? 闻所未闻,你以为这是串口啊?不懂就不要误导楼主。

logosz 发表于 2015-4-24 19:58:44

steaven2000 发表于 2015-4-24 12:33
你确定? 闻所未闻,你以为这是串口啊?不懂就不要误导楼主。

我当然确定。CAN总线仲裁的原理就是TX在发送数据的时候RX会同时监听,如果监听到数据和TX的数据不一样,说明CAN_H,CAN_L总线上面有冲突电平。所以直接将RX接到TX脚上面,TX在发送的时候RX会接收到TX的数据,C2000内部的CAN控制器就会认为是正常发送出去了。


很多新手刚接触CAN,调试代码的时候因为CAN的这种机制,会对新手调试造成困难。因为往往需要至少两台设备才能正常发送。但是新手往往一台设备还没调通,所以两台一起调就会感觉困难。难以判断到底是哪方面的问题。

其实发送方代码是正确的,只是没有接收方。看不到发送的电平,会误以为发送方问题。其实只要短路TX,RX,然后将逻辑分析仪连接到TX或RX任意一脚就可以看到波形了。



我在调试代码的时候经常就是先确定发送方到底是否真正发出了波形。然后再调试接受端。


CAN收发器都可以不用。直接短路单片机的RX和TX就可以了。

另外感觉用逻辑分析仪看CAN波形,调试,感觉比调试什么其他IIC波形都爽。

star_tale 发表于 2015-4-29 20:50:51

logosz 发表于 2015-4-24 19:58
我当然确定。CAN总线仲裁的原理就是TX在发送数据的时候RX会同时监听,如果监听到数据和TX的数据不一样, ...

高大上啊 ,逻辑分析仪随便使

logosz 发表于 2015-4-30 21:10:06

star_tale 发表于 2015-4-29 20:50
高大上啊 ,逻辑分析仪随便使

啥叫“随便使”?

star_tale 发表于 2015-5-1 22:52:30

logosz 发表于 2015-4-30 21:10
啥叫“随便使”?

曾经有个逻辑分析仪摆在面前,却没怎么用过

logosz 发表于 2015-5-1 23:33:19

star_tale 发表于 2015-5-1 22:52
曾经有个逻辑分析仪摆在面前,却没怎么用过

我发现逻辑分析仪看CAN波形是太爽了。

鼎昇科技 发表于 2015-5-3 09:22:54

玩过股票没?没玩过我教你:你要买股票,那得有卖;你要卖股票,那得有人买
有才!!{:lol:}

lingdianhao 发表于 2015-5-3 14:09:17

logosz 发表于 2015-4-24 19:58
我当然确定。CAN总线仲裁的原理就是TX在发送数据的时候RX会同时监听,如果监听到数据和TX的数据不一样, ...

哎,楼主又被误导了,CAN发不出去不是应为它发送的和接收的不一样。是应为它发送过后没有设备来应答,就是没有ACK位。所以这个在CAN的标准里面属于 应答错误 ,一般的CAN控制器里面有寄存器指示错误的,检测CAN状态和错误寄存器就可以了。不用一直死等。

dongaohui 发表于 2015-5-7 13:59:26

多谢诸位的指点
页: [1]
查看完整版本: c2000 CAN通信问题求教