STM32F407 CAN傳送注意事項

2022-06-01 01:12:12 字數 601 閱讀 8625

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 串列埠資料傳送

1.常用的串列埠相關暫存器 2.串列埠操作相關庫函式 省略入口引數 void usart init 串列埠初始化 波特率,資料字長,奇偶校驗,硬體流控以及收發使能 void usart cmd 使能串列埠 void usart itconfig 使能相關中斷 void usart senddata ...

基於stm32f407建立stm32F427工程

分為三個部分 1.啟動檔案 2.fwilib 包含兩個資料夾inc和src。src裡面是stm32資源的c檔案,inc則是32資源的h檔案 3.user這也是我不太理解的部分 ddbugconfig只包含了用於debug的初始化,則是f4的系統檔案。我是在f407的基礎上改的 總的來說 1.改了晶元...

STM32F103 CAN中斷傳送功能的再次討論

我在之前的一篇部落格日誌中,寫過關於can傳送功能如何使用,但是當時由於時間匆忙,趕專案,按照對usart中斷傳送的理解,在資料成功傳送出去的情況下,寫了那篇誤人子弟的日誌,在這裡向大家道歉,實在不好意思,現在我重新闡述下can中斷傳送原理。1 usart傳送中斷與can傳送中斷的區別 usart傳...