码迷,mamicode.com
首页 > 其他好文 > 详细

STM32F407 CAN发送注意事项

时间:2019-08-28 10:59:13      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:现象   mailbox   应用   因此   stm32f4   box   函数   逻辑   过程   

STM32使用的baseCAN,使用过程中发现一些注意的事项,特此记录。

现象:

  CAN发送程序,在1ms以上间隔调用时,一切正常。

  当连续调用CAN发送程序4次或更多时,表现为丢数据,仅能发送一条或2条CAN数据。

分析原因:

  1、STM32提供3个用于发送的mailbox。

  2、当间隔1ms或连续发送3条以内时,我的应用程序会按调用标准库函数,自动装载mailbox,表现为发送正常。

  3、当连续发送超过4条时,因为3个mailbox还没有发送完成,处于满的状态,因此应用程序会收到无空闲的应答同时清除未发送的mailbox,造成数据丢失。

修改程序:

  1、以3个mailbox满为标准,进行超时等待,结果发送数据不丢但顺序乱了。

  2、每装载一个mailbox都等待发送完成后,再装载下一个;等待最大时间限制为2ms(for循环5000次)。

 

小结:

  装载到mailbox的三个数据,不是按装载顺序发送的,而是按固定123的寄存器顺序发送的,只要mailbox1有数据,2、3就会等待发送,因此判断mailbox满的逻辑不可行。

  经测试正常情况下500kbps时,等待发送完成用时约300us(for循环800次),限时2ms足够。

STM32F407 CAN发送注意事项

标签:现象   mailbox   应用   因此   stm32f4   box   函数   逻辑   过程   

原文地址:https://www.cnblogs.com/aaron511/p/11422332.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!