STM32中CAN的效率问题

[复制链接]
3370|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上封装一层队列来缓冲
yytdragon 发表于 2010-3-30 17:08 | 显示全部楼层
CAN通信的速率和距离成反比的,LZ可以试试,当他的速率达到1M的时候,一般的情况下连20m的距离都到不了=。=
yytdragon 发表于 2010-3-30 17:09 | 显示全部楼层
和振荡器容差,传输材质,方式等等都有关系的=。=
yybj 发表于 2010-3-30 20:34 | 显示全部楼层
是这样吗,没试过,不过感觉距离应该没这么短吧,一般CAN都是用在分布式控制上的,距离比较远,不过通信速率也没必要这么高
yytdragon 发表于 2010-3-31 08:21 | 显示全部楼层
如果速率降到5K ,那距离可达到万米以上=。=
 楼主| jiqimao2010 发表于 2010-3-31 10:24 | 显示全部楼层
4楼, 我的理解是FIFO是STM32中接受数据的第一站,怎么做到在第一站前面缓冲?我是新手,还望详细解答,谢谢~
lllttt7777 发表于 2010-3-31 16:04 | 显示全部楼层
楼主,我的意思是你在FIFO后加一个缓冲队列,就是说你的第二站。
发送消息的顺序是:应用层->发送缓冲队列->FIFO->CAN发送,
接收消息的顺序是:CAN接收->FIFO->接收缓冲队列->应用层。
接收和发送缓冲是两个队列。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

10

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部