STM32的CAN總線(xiàn)中繼器設計及應用
2 中繼器的軟件實(shí)現
CAN中繼器的主要任務(wù)是在兩個(gè)網(wǎng)絡(luò )中進(jìn)行數據的過(guò)濾和轉發(fā)。其軟件主要包括以下模塊:初始化模塊、數據發(fā)送模塊和接收模塊等。
2.1 初始化模塊
CAN初始化直接關(guān)系到CAN控制器能否正常工作,在很多情況下,軟件不能正常工作并不是CAN的收發(fā)程序有問(wèn)題,往往是初始化配置不正確造成的。STM32的CAN初始化主要包括CAN寄存器初始化、CAN單元初始化(包括CAN模式和波特率的設置)、CAN過(guò)濾器的初始化。由于STM32開(kāi)發(fā)商提供了大量的固件庫函數,所以只需在調用的時(shí)間作出相應的設置即可。初始化子程序如下所示:
①CAN單元初始化子程序。
在該初始化子程序中最關(guān)鍵的環(huán)節是怎么設置CAN的波特率,STM32數據手冊給出了波特率的計算公式:
其中tq為CAN時(shí)鐘周期。如上述CAN單元初始化子程序中:SJW=tq,BS1=8tq,BS2=7tq,STM32的CAN時(shí)鐘有APB1提供。假設系統時(shí)鐘為72 MHz,APB1為系統時(shí)鐘的9分頻,結合初始化子程序,CAN_Prescaler=1,帶入波特率計算公式即可求的其波特率為500 kb/s。
②CAN過(guò)濾器的初始化子程序。
CAN過(guò)濾器設置的得當與否是CAN是否能夠成功接收信息的關(guān)鍵,尤其在過(guò)濾器組位寬和模式設計上,如何將節點(diǎn)的ID號準確地映射到過(guò)濾器組位寬設置寄存器上是過(guò)濾器的核心。為了過(guò)濾出一組標識符,設置過(guò)濾器工作在屏蔽位模式下,對標識符的任何一位采用“必須匹配”或“不用關(guān)心”的原則處理。
評論