打印

CAN总线溢出问题,大侠请赐教呀!!!!

[复制链接]
3012|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dongjiajia|  楼主 | 2012-7-17 21:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用STM32F107做CAN实验。
当我每隔1ms发送一次数据时,接收中断就会有数据溢出,总线上的数据改成4ms时就不会有数据溢出。这说明溢出是因为发送数据太快造成的!有什么方法可以解决总线数据过快引起的数据溢出问题!或者是其他原因造成的数据溢出???希望指点!
沙发
figo20042005| | 2012-7-17 22:01 | 只看该作者
是不是你还有别的数据放到数据缓冲区了,那你把时间稍微加长,缓冲区也加大

使用特权

评论回复
板凳
airwill| | 2012-7-18 06:05 | 只看该作者
1. CAN 接收部分, 使用接收中断, 而不是溢出中断.
2. 将其他的高或同级优先的中断的耗时尽量地降下来.
3. 提升 CAN 的 波特率.
4. 以上办法没有没有完全解决, 那: 每隔1ms发送一次数据时溢出, 就适当增加这个时间间隔吧.

使用特权

评论回复
地板
dongjiajia|  楼主 | 2012-7-18 08:56 | 只看该作者
我是采用的接收中断,只是溢出中断也开启了,所以也会有溢出的现象!CAN的波特率我已经设成1M了!我现在的想法是可不可以将FIFO0和FIFO1两个缓冲区都利用起来,当FIFO0满的时候就将数据放入FIFO1中,看这样能不能解决问题!

使用特权

评论回复
5
dongjiajia|  楼主 | 2012-7-18 08:59 | 只看该作者
上面这种方法软件怎么实现啦?STM32的CAN控制器会在FIFO0满的时候将数据放入到FIFO1中吗,这种想法可以实现吗?

使用特权

评论回复
6
figo20042005| | 2012-7-18 09:03 | 只看该作者
那你看FIFO0的空间有多大,计数到了它满的时候再放进FIFO1

使用特权

评论回复
7
sjnh| | 2012-7-18 09:11 | 只看该作者
溢出不是因为你发送快了,是因为你接收处理慢了;
如果处理速度慢了,你就是能有再多的FIFO也有满的时候;
发送速度1ms有可能是必须这么快,如果实际能改成4ms,那一定用4ms;(如果你确定用1ms,要改的话可能重新考虑通信方案,除非你确定错误);

你检查你的接收处理程序:
1、是否不是自己的消息也接收了(ID过滤器没起到响应的作用,没配置好);
2、处理速度确实没这么快,那只能降低发送速度了,重新考虑你的通信方案;
3、消息是否都有效,是否发送了写没用的消息(可以合并、减少);

使用特权

评论回复
8
dongjiajia|  楼主 | 2012-7-18 11:51 | 只看该作者
我想用它的两FIFO都用不了?有没有知道的?我主要是做一个USB-CAN工具,现在是测试它的接收时间戳的精度,我配置的滤波器可以接收全部的数据。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

66

帖子

0

粉丝