-
CAN收發器
c板與一塊具備CAN收發功能的開發板的連接類似下圖
這樣就形成了一個CAN總線的閉環通信網絡
-
使用CubeMX生成工程
時鍾
如果選擇使用外部高速時鍾(HSE),則需要在System Core中配置RCC;
如果使用默認內部時鍾(HSI),這一步可以略過;
調試選項配置
選項SYS中
默認沒有配置下載引腳,燒錄之后下載器將無法再檢測到;
使用ST-Link,配置為SW選項:
配置串口
串口開啟與芯片模塊有關,參照說明更改
注意要手動更改引腳
配置can外設
1.CubeMX配置沒有CAN模塊配置如下:
CAN波特率計算:
1、can分頻,4分頻:32Mhz / 4 = 8Mhz;
2、公式:SYNC_SEG+BS1+BS2 = T;
2、波特率計算,目標波特率是500khz:
根據:8Mhz/ T = 8000khz/T = 500khz
計算出:T=16
2.CubeMX配置有Can外設
(1)選中CAN1(主)
配置CAN控制只需配置波特率,一般為500KHz,最高1MHz,其它保持默認即可。
CAN總線的波特率比較特別,串口協議的波特率只支持一個確定值,而CAN總線的波特率支持一個較寬的范圍,這也使得CAN總線的抗噪聲性能大大增強。
CAN總線的波特率計算方式如下:
① 確定CAN外設連接的外設總線時鍾PCLK1
此處CAN1連接到APB1外設總線上,在配置HCLK=168Mhz的基礎上,PCLK=42Mhz。
② 確定分頻系數
此處將PCLK1進行7分頻,為 42Mhz / 7 = 6Mhz,所以設置CAN1外設的分頻系數為7:
③ 配置位段時序
CAN協議的每一個數據位都分為許多時間段,如圖:
同步段(SYNC_SEG):位變化應該在此時間段內發生,只有一個時間片的固定長度(1 x tq);
位段1(BS1):定義采樣點的位置,其持續長度可以在 1 到 16 個Tq之間調整;
位段2(BS2):定義發送點的位置,其持續長度可以在 1 到 8 個Tq之間調整;
同步跳轉寬度(SJW):定義位段加長或縮短的上限,它可以在 1 到 4 個Tq之間調整;
目標波特率是500khz,設:
B S 1 + B S 2 + S J W = T BS1+BS2+SJW = T
BS1+BS2+SJW=T
根據:
6 M h z / T = 6000 k h z / T = 500 k h z 6Mhz/T = 6000khz / T = 500khz
6Mhz/T=6000khz/T=500khz
計算出:
T = 12 T = 12
T=12
最后在BS1、BS2、SJW的每個范圍內,調整出和為12即可:
使能CAN1控制器接收中斷
(2)配置時鍾樹
STM32F407ZGT6的最高主頻到168M,使HCLK = 168Mhz即可
3.生成工程
————————————————
參考資料原文鏈接:
https://mculover666.blog.csdn.net/article/details/110148532?depth_1-
https://blog.csdn.net/qq_39758638/article/details/113363763