F407芯片CAN总线收发耗时的测量

2019-07-20 18:01发布

STM32F407单片机通过CAN总线收发数据,一帧数据16字节,波特率1Mbps,8字节数据全部填充,标准ID。

我的理解是:1Mbps的速率,发送一位需要1us(理论上),16字节总共128bit,所有至少需要128us。而我测量的时间,发送一帧需要260us,时间相差一倍!

我测量的方式是:在数据写入寄存器TTR、TDLR、TDHR后申请发送请求的时候开始测量,在中断标志位检测到RQCP、TXOK被置位(即检测到发送成功标志)的时候结束测量。这一段时间我理解为CAN控制器完成了一帧数据的发送。

现在不确定是否我的理解有问题,还有相差一倍的时间有点离谱。求各种指点!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
xuande
1楼-- · 2019-07-20 19:45
本帖最后由 xuande 于 2016-12-15 19:44 编辑


你的理解和测试方法应当没问题。

除了前面“天空淡云”说的原因,
还有个通信机制问题:
CAN是多主机的方式,它能自动侦测总线是否空闲,避开忙状态,
如果总线被占用,自然会延后。
你要确保总线是空闲的。

4wards
2楼-- · 2019-07-20 22:46
难道是我提问的方式不对吗?好像没有人看啊?!
天空淡云
3楼-- · 2019-07-21 02:45
 精彩回答 2  元偷偷看……
4wards
4楼-- · 2019-07-21 08:40
天空淡云 发表于 2016-12-15 18:41
我最近也在看STM32F4的CAN,一帧数据不是包含7个段吗,你的8字节只是数据段,其他段的时间呢

谢谢。我没有表述清楚,我说的16字节指的是一帧数据的长度,按照定义的结构体把数据段加上其他的rtr、ide、id等等(实际应该不到16字节)。8字节数据位是64bits,加上其他的数据位,我按照128bits的宽度来计算的。
4wards
5楼-- · 2019-07-21 08:45
 精彩回答 2  元偷偷看……
正点原子
6楼-- · 2019-07-21 09:03
4wards 发表于 2016-12-16 18:20
Thank you。

1、我测量的时候是某个节点只发一次,然后测量的耗时,所以应该不会是忙状态。

试下点对点(不要有其他节点),大量数据发送,然后求平均时间。

一周热门 更多>