[原创]做CAN发送时,过一段时间出现缓冲区满,发送数据出错,请问?!
- UID
- 111199
- 性别
- 男
|
[原创]做CAN发送时,过一段时间出现缓冲区满,发送数据出错,请问?!
1。为什么出现这种情况?
2。怎么解决,应该怎样做?
具体情况是,中断采集AD数据,然后通过CAN发送到总线,但总是出现缓冲区满错误。
|
CANBUS 电液控制汽车电子,希望和大家交朋友!
http://www.51mcu.cn |
|
|
|
|
|
- UID
- 111199
- 性别
- 男
|
CANBUS 电液控制汽车电子,希望和大家交朋友!
http://www.51mcu.cn |
|
|
|
|
|
- UID
- 115377
- 性别
- 男
|
由于CAN总线发送数据需要总线仲裁,也就是将数据放入CAN发送缓冲区,需要总线仲裁要有一定的延时。如果该数据没有发送出去,你在用该缓冲区发送数据肯定出错了。解决方法在用该缓冲区发送数据时,先检查缓冲区是否满,如果满了,用另一个。MSCAN08有三个发送缓冲区,如果三个都满了,程序中设置一个标志,发送该AD数据错误。然后重新发送。 |
|
|
|
|
|
- UID
- 111199
- 性别
- 男
|
我使用的是自动判别缓冲区,那个空使用那个并且,我单独做了个试验只调CAN发送函数发送数据为零,还是出现缓冲区满的错误. |
CANBUS 电液控制汽车电子,希望和大家交朋友!
http://www.51mcu.cn |
|
|
|
|
|
- UID
- 111199
- 性别
- 男
|
CANBUS 电液控制汽车电子,希望和大家交朋友!
http://www.51mcu.cn |
|
|
|
|
|
- UID
- 104673
- 性别
- 男
|
|
|
|
|
|
- UID
- 138309
- 性别
- 男
|
cxj16888,你好!我刚才给你发了个消息,请你查看 |
|
|
|
|
|
- UID
- 123796
- 性别
- 男
|
我同意是总线仲裁的问题,或者是你的这个节点的发送周期大于AD采样周期吧 |
|
|
|
|
|
- UID
- 111199
- 性别
- 男
|
刚刚测试过,缓冲区0和1,送任何数都没有问题发送正常数据长度2,但数据长度是8的时候缓冲区中必须是大于零的数否则发送缓冲区满错误;只有一个CAN发送函数中断没有打开。
我使用的是处理器专家生成的函数。请教!! |
CANBUS 电液控制汽车电子,希望和大家交朋友!
http://www.51mcu.cn |
|
|
|
|
|
- UID
- 132749
- 性别
- 男
|
我觉得是数据根本没有发送出去,发送标志位没有清除. |
|
|
|
|
|
- UID
- 111199
- 性别
- 男
|
但用工具观察,数据一直在发送,如果发送没有成功接收端不应接收到信息,只要发送成功标志位应该是自动清除。 |
CANBUS 电液控制汽车电子,希望和大家交朋友!
http://www.51mcu.cn |
|
|
|
|
|
- UID
- 121202
- 性别
- 男
|
|
|
|
|
|
- UID
- 104673
- 性别
- 男
|
已经解决了,是波特率设置的问题。波特率如果有误差的话,就会出现这种结果 |
|
|
|
|
|
- UID
- 111199
- 性别
- 男
|
这个错误是比较奇怪,当建立一个新的工程时,使用助理工程师选用CAN模块在模特率选项中键入250K确定后面会出现246K;当时没有注意,就是这个地方出的问题。由于波特率近似所以发送不是0的数据时很长时间都正常后出现错误,而发送0时由于全部位显性电平无法同步造成发送失败,发送缓冲区溢出;请大家注意! |
CANBUS 电液控制汽车电子,希望和大家交朋友!
http://www.51mcu.cn |
|
|
|
|
|
- UID
- 811207
|
我也遇到这个问题,在250KHz下能够很好的发送,但是在125KHz下发送几时条,发送缓冲区就满了~!请问该怎么解决啊 |
|
|
|
|
|