前言
STM32 NUCLEO開發平臺是ST最新發布的易用性好、可擴展性佳的低成本平臺。開發平臺具有mbed功能支持Arduino接口,同時還提供ST Morpho擴展排針,可連接微控制器的所有周邊外設,可以利用Arduino巨大生態系統優勢,便于快速實現STM32學習和評估!這兒我們評估它的CAN外設功能。
一、環境搭建
1、軟件:
STM32Cube\Repository\STM32Cube_FW_F1_V1.3.0\Projects\STM3210E_EVAL\Examples\CAN\CAN_Networking\EWARM
2、硬件:
NUCLEO-F103RB(STM32F103RBT6)
3、原理圖如下:
上面原理圖是針對 SN65HVD230 的,因為 PB8 是 CAN_TX,是 MCU端的發送,需要到 CAN transfer 的輸入引腳,即引腳 D(Driver input); 因為 PB9 是 CAN_RX,是 MCU 端的接收,是 CANtransfer 的輸出引腳,即引腳 R(Recv output);
二、Porting
由于參考的是STM3210E_EVAL的示例程序,在用到STM32F103RBT6的Nucleo板子上的時候,需要做一些porting的工作。
1、系統時鐘
在10E的EVAL板子上,使用的是HSE,而Nucelo上默認的是沒有焊接HSE,所以使用到的是HIS;利用CubeMX生成代碼:系統時鐘為36MHz;
供給CAN外設的時鐘:是APB1的時鐘18MHz;
2、CAN的接收/發送引腳
仍然可以都為PB8 (TX) 和PB9(RX),不需要改變;
3、CAN的波特率
(自己想設置的是500K)
所以,理論上,根據計算公式,
NominalBitTime = 1 × tq + tBS1 + tBS2 = (TS1[3:0] + 1+ TS2[2:0] + 1 + 1)* (BRP[9:0] + 1) x tPCLK;
所以,NominalBitTime = 9* 4* tPCLK; =Freq(APB1)/36 = 18/36 = 0.5MHz = 500K;
4 、 User部分
程序中設計到:
在 10E-EVAL 板子上,用到的是 PG.08,而在 nucleo 上使用到的是 PC.13
至此,移植好了;
三、全速運行
1、按下 USERButton,會發出 CAN 報文,CAN 的 PC 端軟件能夠收到。
2、CAN 的 PC 端軟件發送報文,軟件中的中斷函數也會進入中斷。
說明,CAN 的發送和接收這一基本的操作已經完成了。對于 CAN 的復雜的運用特點,可以在該基礎上進一步衍生。
附錄:
1、針對現有的 CAN 的總線協議:在數據區域只有固定的 8Byte;也就是說一個 CAN 報文發送的數據只有 8 個,我們的單片機的寄存器也只提供了 8 個寄存器,符合當前的 CAN 的協議;如果客戶想發送多個>8 的數據,需要在其上層協議中,用軟件去多次發送。也許在下一代的 CAN 總線中,會對這一特點進行改變。
2、CanHandle.Init.NART= ENABLE 的說明; 在基于"STM32Cube_FW_F4_V1.10.0\Projects\STM324x9I_EVAL\Examples\CAN\CAN_Networking", 如果只用一塊STM32F429-EVAL 調用HAL_CAN_Transmit()的發送函數,會發現 CAN Controller 會不斷的發送數據, 這是因為在我們提供的示例中,是需要兩塊板子互聯的,在 CAN 協議中,如果消息沒有被正確的接收,它將會 be retransmitted infinitely by the transmitter until it will be acknowledgedby the receiver ,而正我們的環境中,只有一塊板子,而沒有 receiver。
歡迎光臨 電子工程網 (http://m.qingdxww.cn/) | Powered by Discuz! X3.4 |