如果主機與從機,波特率不一致,很難正常的通訊。
/*
* 函式名: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...