STM32F407 CAN發送注意事項


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足夠。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM