單線(xiàn)CAN總線(xiàn)隔離中繼器的設計
3 軟件設計
3.1 初始化子程序
STM32的CAN控制器初始化直接關(guān)系到CAN控制器能否正常工作。STM32的CAN控制器初始化主要包括CAN基本單元和過(guò)濾器的初始化。因為ST公司推出了一套針對于STM32的固件庫,所以只需在程序開(kāi)始時(shí)做出相應的設置即可。在該初始化子程序中關(guān)鍵的環(huán)節是設置CAN的波特率,STM32數據手冊中的波特率的計算公式如下:

其中tq=(BRP[9:0]+1)xtPCLK。如上述CAN單元初始化子程序中:tBS1=tq×(TS1[3:0]+1),tBS2=tqx(TS2[2:0]+1),BRP[9:0]、TS1[3:0]和TS2[2:0]均在CAN_BTR寄存器中設置,STM32的CAN時(shí)鐘有APB1提供。假設系統時(shí)鐘為72 MHz,APB1為系統時(shí)鐘的9分頻,結合初始化子程序,BRP[9:0]=0、TS1[3:0]=7、TS2[2:0]=6,代入波特率計算公式即可求的其波特率為500Kb/s。在該中繼器中,CAN控制器的過(guò)濾器設置工作在屏蔽位模式下,對標識符的任何一位采用必須匹配或不用關(guān)心的原則處理。在中繼器中,由于需要轉發(fā)所有總線(xiàn)上的數據,則過(guò)濾器不必詳細設置,只需設置接收任何ID號的數據即可。
3.2 數據轉發(fā)子程序
中繼器的任務(wù)實(shí)質(zhì)上就是實(shí)現報文的轉發(fā)。STM32F105內部集成了雙bxCAN控制器,它包括3個(gè)發(fā)送郵箱和2個(gè)3級深度的FIFO。結合STM32 F105的特性,采用雙FIFO的轉發(fā)機制,其原理如圖3所示。依據圖3,當STM32F105接收到新的報文時(shí),經(jīng)過(guò)數據處理模塊處理,在數據轉發(fā)進(jìn)程的管理下,對兩路bxCAN控制器的接收FIFO緩沖區進(jìn)行監視,如某一路緩沖區非空則向另一路轉發(fā)。本文引用地址:http://dyxdggzs.com/article/175746.htm
STM32F105發(fā)送報文的流程為:應用程序選擇1個(gè)空置的發(fā)送郵箱;設置標識符、數據長(cháng)度和待發(fā)送數據;然后對CAN_TIxR寄存器的TXRQ位置1,來(lái)請求發(fā)送。TXRQ位置1后,郵箱就不再是空郵箱;一旦郵箱不再為空置,軟件對郵箱寄存器就不再有寫(xiě)的權限。TXRQ位置1后,郵箱馬上進(jìn)入掛號狀態(tài),并等待成為最高優(yōu)先級的郵箱。一旦郵箱成為最高優(yōu)先級的郵箱,其狀態(tài)就變?yōu)轭A定發(fā)送狀態(tài)。當CAN總線(xiàn)進(jìn)人空閑狀態(tài),預定發(fā)送郵箱中的報文就馬上被發(fā)送。在郵箱中的報文被成功發(fā)送后,它馬上變?yōu)榭罩绵]箱;硬件相應地對CAN_TSR寄存器的RQCP和TXOK位置1,表明一次成功發(fā)送。
為了提高中繼器數據傳輸的實(shí)時(shí)性,CAN報文的接收采用中斷方式。所以在CAN初始化過(guò)程中應使能CAN1和CAN2外設中斷,并設置其相應的中斷向量表,設定其相應的中斷等級。數據接收模塊流程如圖4所示。
另外,假設CAN總線(xiàn)上A點(diǎn)發(fā)出的數據總時(shí)間為t,則在軟中繼器另一側B點(diǎn)接收到該數據的最短時(shí)間為t。當總線(xiàn)速率不大且對各總線(xiàn)設備時(shí)序要求不高時(shí),該時(shí)間可以忽略。但在一些節點(diǎn)間交換數據頻繁的CAN總線(xiàn)系統,則須注意這個(gè)問(wèn)題,盡量使其對系統的影響降至最低。
4 結論
該CAN總線(xiàn)中繼器充分利用內部集成雙bxCAN控制器簡(jiǎn)化了硬件電路的設計,及豐富的固件庫函數縮短了開(kāi)發(fā)周期。實(shí)踐表明,該單線(xiàn)CA N總線(xiàn)隔離中繼器完成了各項設計指標,符合工程的要求,在液壓支架電液控制系統中能夠有效的完成數據的轉發(fā)和網(wǎng)絡(luò )的拓展,具有較高的實(shí)用價(jià)值。
評論