1. 程式人生 > 實用技巧 >STM32 CAN通訊之二:正常模式

STM32 CAN通訊之二:正常模式

昨天測試了CAN通訊的環回模式,今天邏輯分析儀到手了,藉助這一神器完成了今天的CAN通訊之正常模式資料收發。對於CAN通訊正常模式來說,沒有邏輯分析儀或者CAN盒(某寶上可以買到),分析資料,想要調通的話只能看運氣了,有了工具就可以輕鬆的看到資料的收發過程。

本次正常模式的測試是用兩塊板子進行測試,一塊板子(STM32F103RET6)用於傳送資料,另一塊板子是正點原子的戰艦開發板(STM32F103ZET6)用於接收資料(中斷方式接收)。兩塊板子的CAN_H和CAN_H相連,CAN_L和CAN_L相連。

傳送的板子STM32CubeMX配置及程式碼與前面的環回模式幾乎一樣,唯一不同的是初始化模式不同。請參考CAN通訊之一,這裡不再贅述。

對於接收的開發板,戰艦V3,其配置過程與前面環回模式也類似,只是第一步選擇的晶片不一樣。CAN外設引數配置與前面一樣。

同樣的,也需要在can.c中新增過濾器配置的程式碼以及接收中斷服務函式。

在main.c中新增以下程式碼即可,至此,接收部分配置完成,新增的程式碼量很少。

因為在本例程中沒有配置串列埠,所以在接收中斷的地方設定斷點,方便檢視接收的資料。傳送資料的板子在主函式while迴圈中間隔10ms傳送一次資料,接收的開發板中斷方式接收。

傳送的資料:

戰艦V3開發板接收的資料:

邏輯分析儀採集到的資料:

傳送資料與接收資料完全吻合。當然,用戰艦開發板傳送資料,用另一塊板子接收資料也行,值需要稍微修改一下程式碼,讀者可自行去測試。

特別注意事項:CAN通訊晶片是5V的,我剛開始除錯的時候沒有找到兩根USB線供電,其中一塊開發板使用J-LINK直接供電的,通訊一直沒有成功,後來反應過來了,兩塊開發板都用5V供電就好了。

原始碼:

連結:https://pan.baidu.com/s/1L56eFRBkvNvfMQU9XQdaUA
提取碼:14nl