STM32F407单片机通过CAN总线收发数据,一帧数据16字节,波特率1Mbps,8字节数据全部填充,标准ID。
我的理解是:1Mbps的速率,发送一位需要1us(理论上),16字节总共128bit,所有至少需要128us。而我测量的时间,发送一帧需要260us,时间相差一倍!
我测量的方式是:在数据写入寄存器TTR、TDLR、TDHR后申请发送请求的时候开始测量,在中断标志位检测到RQCP、TXOK被置位(即检测到发送成功标志)的时候结束测量。这一段时间我理解为CAN控制器完成了一帧数据的发送。
现在不确定是否我的理解有问题,还有相差一倍的时间有点离谱。求各种指点!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
你的理解和测试方法应当没问题。
除了前面“天空淡云”说的原因,
还有个通信机制问题:
CAN是多主机的方式,它能自动侦测总线是否空闲,避开忙状态,
如果总线被占用,自然会延后。
你要确保总线是空闲的。
谢谢。我没有表述清楚,我说的16字节指的是一帧数据的长度,按照定义的结构体把数据段加上其他的rtr、ide、id等等(实际应该不到16字节)。8字节数据位是64bits,加上其他的数据位,我按照128bits的宽度来计算的。
试下点对点(不要有其他节点),大量数据发送,然后求平均时间。
一周热门 更多>