STM32F103 CAN通訊波特率的計算方法

2021-10-11 13:01:56 字數 1388 閱讀 4175

如果主機與從機,波特率不一致,很難正常的通訊。

/*

* 函式名:can_mode_config

* 描述 :can的模式 配置

* 輸入 :無

* 輸出 : 無

* 呼叫 :內部呼叫

*/static void can_mode_config(void)

else

#endif

can_init(can1, &can_initstructure);

}

這裡的500kbps,是怎麼計算出來的?

can_initstructure.can_sjw=can_sjw_1tq;      //btr-sjw 重新同步跳躍寬度 1個時間單元

can_initstructure.can_bs1=can_bs1_2tq; //btr-ts1 時間段1 占用了2個時間單元

can_initstructure.can_bs2=can_bs2_1tq; //btr-ts1 時間段2 占用了1個時間單元

can_initstructure.can_prescaler =18; //btr-brp 波特率分頻器 定義了時間單元的時間長度 36/(1+2+1)/18=0.5mbps

通過檢視stm32f103 的參考手冊,找到了答案

注意stm32 can 屬於apb1匯流排,apb1匯流排,預設配置最大主頻(36mhz),而不是72mhz。

波特率 = 1 / 位時間

位時間 = (1*tq + tbs1 + tbs2),注意,這裡與 can_sjw_1tq 無關!!

如果:tbs1 = 2 , tbs2 = 1,則: 位時間 =  (1+2+1)tq = 4 tq。

注意:這裡,還有個分頻, 分頻分的不是主頻(71mhz),是can匯流排的apb1 頻率,手冊上寫著,36mhz,也就是 主頻的2分頻。

系統預設初始化後,apb1匯流排頻率,設定為 36mhz。

這裡can控制器,可以把apb1 繼續分頻,如 18,那麼,can控制器頻率:36mhz / 18 = 2 mhz。

波特率: =  1 /  4 * (1/2mhz) = 0.5mhz = 500 kbps

can通訊,是比較好用的序列匯流排,不僅用於汽車上,一些工業匯流排場合短距離的通訊,也可以說使用。

can通訊,波特率、濾波器設定,都需要清楚,才能真正用好。

stm32f103can匯流排過濾器配置

can過濾器的配置 f103 hal1.8 系列 can的過濾器的配置是對can接收到的報文進行過濾的配置,在stm32晶元中,可以對can的報文進行過濾,從而省略cpu的處理過程。can的過濾模式 f103中為應用程式提供了14個位寬可變 可配置的過濾器組,每個過濾器組由2個32位暫存器,can ...

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

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

STM32F103的CAN 通訊之通訊協議

can匯流排的通訊模式 can是一種有效支援分布式控制 3 或實時控制的序列通訊網路,可實現全分布式多機系統 可以用點對點,一點對多點以及全域性廣播幾種方式傳送和接受資料 can匯流排直接通訊距離最遠可達10km 此時傳輸速率可能達到5kb s 通訊速率最高可達1mb s 此時傳輸距離可能達到40m...