打印

STM32中CAN的效率问题

[复制链接]
2586|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiqimao2010|  楼主 | 2010-3-30 09:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
都说STM32中CAN的速率高,传输距离远,可是我在调试的过程中发现,由于接受FIFO三个数据帧的容量,每次发送如果超过三个帧就有丢包的情况,解决的办法就是每一帧或三帧发送延时,可是这样不就使得效率不就很低了么,那CAN的优越性又体现在哪呢?
沙发
lllttt7777| | 2010-3-30 10:51 | 只看该作者
如果你发包比较快,就在FIFO上层再做一个缓冲队列,当FIFO有空闲的时候就从队列里取一个消息放入FIFO。

使用特权

评论回复
板凳
jiqimao2010|  楼主 | 2010-3-30 14:30 | 只看该作者
可是CAN的接收本身就是FIFO开始的,不知道楼上说的缓冲队列放在哪?

使用特权

评论回复
地板
lllttt7777| | 2010-3-30 17:03 | 只看该作者
自己程序里做一个队列缓冲。
你的问题是发送消息比较快,导致CAN本身的FIFO不够用。所以就自己在FIFO上封装一层队列来缓冲

使用特权

评论回复
5
yytdragon| | 2010-3-30 17:08 | 只看该作者
CAN通信的速率和距离成反比的,LZ可以试试,当他的速率达到1M的时候,一般的情况下连20m的距离都到不了=。=

使用特权

评论回复
6
yytdragon| | 2010-3-30 17:09 | 只看该作者
和振荡器容差,传输材质,方式等等都有关系的=。=

使用特权

评论回复
7
yybj| | 2010-3-30 20:34 | 只看该作者
是这样吗,没试过,不过感觉距离应该没这么短吧,一般CAN都是用在分布式控制上的,距离比较远,不过通信速率也没必要这么高

使用特权

评论回复
8
yytdragon| | 2010-3-31 08:21 | 只看该作者
如果速率降到5K ,那距离可达到万米以上=。=

使用特权

评论回复
9
jiqimao2010|  楼主 | 2010-3-31 10:24 | 只看该作者
4楼, 我的理解是FIFO是STM32中接受数据的第一站,怎么做到在第一站前面缓冲?我是新手,还望详细解答,谢谢~

使用特权

评论回复
10
lllttt7777| | 2010-3-31 16:04 | 只看该作者
楼主,我的意思是你在FIFO后加一个缓冲队列,就是说你的第二站。
发送消息的顺序是:应用层->发送缓冲队列->FIFO->CAN发送,
接收消息的顺序是:CAN接收->FIFO->接收缓冲队列->应用层。
接收和发送缓冲是两个队列。

使用特权

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

本版积分规则

0

主题

10

帖子

1

粉丝