陳景郁 朱洪雷
STM32系列的微控制器,由于其性能優(yōu)勢,性價比高,穩(wěn)定性好,廣泛用在嵌入式設(shè)備中;在物聯(lián)網(wǎng)、智能家居、智能汽車以及智能醫(yī)療系統(tǒng)中都有應(yīng)用[1-2]。目前市場上,STM32系列微控制器的燒錄設(shè)備比較單一,固件燒錄定制化的功能不足;或者使用定制化的燒錄設(shè)備,但成本就會比較高,對于生產(chǎn)線要求高,難以推廣。本文介紹在定制化STM32燒錄器過程中,基于Arduino快速實現(xiàn)燒錄器CAN通信需求的一種方案,以一種比較低成本的方法,最大限度滿足生產(chǎn)特殊的需求。
STM32系列微控制器可以通過ST公司提供的調(diào)試開發(fā)工具ST-Link燒錄固件。本文介紹的定制化燒錄器通過集成多路ST-Link的方法,實現(xiàn)多路的差異化燒錄STM32微控制器方法。燒錄器上集成多路ST-Link通過USB總線連接到上位機PC端。上位機PC控制固件的加載導入,可以分別加載不同的固件。定制化的燒錄器上,需要有控制器控制燒錄器的電源,指示燈機以及按鍵。另外由于燒錄器有接入CAN網(wǎng)絡(luò)總線的需求,需要增加CAN控制器模塊。
燒錄器的控制主要是I/O的控制,以及CAN網(wǎng)絡(luò)總線的傳輸。CAN傳輸?shù)臄?shù)據(jù)量并不大,不需要非常高的負載,只需要滿足500KBPS的速率即可。所以這里選擇了比較便捷靈活的Arduino開發(fā)系統(tǒng)及其套件來實現(xiàn)。
Arduino是開源的電子開發(fā)系統(tǒng),由于其便捷、靈活及開放的開發(fā)方式,深受廣大電子愛好者們的喜歡[3]。從2005年Arduino項目誕生以來,吸引了無數(shù)發(fā)開這參與到其中,衍生出許多種控制器;也為后來的開發(fā)者引入許多開發(fā)案例。在此基礎(chǔ)上可以非常靈活迅速地搭建出一個控制系統(tǒng)。在本文的案例中,我們選用了Arduino UNO主控板,CAN控制器選擇MCP2515芯片的開發(fā)套件。
Arduino UNO是最基礎(chǔ)的主控板,ATmega328P微控制器,5 V工作電壓,16MHz的工作頻率,32KB的Flash,2KB的RAM,有14個數(shù)字I/O,6個模擬I/O,I/O驅(qū)動電流可達20 mA。通過USB連接,可以通過USB供電,調(diào)試開發(fā)都非常方便。
MCP2515是MicroChip公司推出的一款CAN協(xié)議控制器芯片,支持CAN V2.0B的協(xié)議規(guī)范,通訊速率可達1Mbps[4]??梢酝ㄟ^SPI接口控制MCP2515芯片,速率可達到10 MHz。芯片能發(fā)送和接收標準和擴展數(shù)據(jù)幀以及遠程幀,自帶2個驗收屏蔽寄存器和6個驗收濾波寄存器可以忽略不關(guān)注的報文,減少控制器不必要的開銷。配合TJA1050 CAN總線收發(fā)器,就可以將節(jié)點掛接在CAN總線上了。
圖1 MCP2515 CAN控制器模塊原理圖
燒錄器上設(shè)置了多位STM32待燒錄芯片,通過ST-Link連接。PC通過USB總線連接各個ST-Link,燒錄固件通過PC加載導入。
燒錄器控制器由Arduino UNO和MCP2515 CAN控制器組成,可以控制燒錄器上的按鍵、指示燈和蜂鳴器,以及UART與PC上位機連接。通過MCP2515連接到CAN總線上,監(jiān)聽CAN總線上的報文,可以實現(xiàn)遠程CAN網(wǎng)絡(luò)對燒錄固件的選擇,完成燒錄任務(wù)后,檢測芯片燒錄情況,芯片自檢是否成功等。燒錄器設(shè)計系統(tǒng)如下圖。
Arduino軟件的開發(fā),使用Arduino IDE工具,非常方便快捷就可以搭建系統(tǒng);可以通過庫的更新,不斷擴展Arduino的能力,增加新的開發(fā)功能。大部分庫都是開源的軟件,全球有許多工程師在為此開發(fā)新的庫,設(shè)計新的模塊套件,數(shù)量還在不斷地增長。
在開發(fā)調(diào)試時候,需要注意的幾個技巧要點:
(1)Arduino調(diào)試打印端口與通信端口的獨立分開,因為Arduino IDE采用了USB serial串口與Arduino UNO開發(fā)板的通信,包括固件的下載。如果調(diào)試log也通過統(tǒng)一個串口打印,會比較混亂。Arduino提供了GPIO模擬串口的接口,選用GPIO模擬串口作為調(diào)試log輸出,可以方便調(diào)試,隔離控制數(shù)據(jù),對系統(tǒng)穩(wěn)定性也有較好的幫助。定義PB0和PB1為串口RX和TX管腳:
(3)MCP2515初始化時候,要注意時鐘頻率的設(shè)置,時鐘設(shè)置要與硬件設(shè)計保持一致。本文案例使用時鐘為8MHz,與Arduino中默認的時鐘有差別,需要特別修改。
CAN.begin(CAN_500KBPS,MCP_8MHz)
(4)MCP2515是可以設(shè)置過濾器,幀ID符合才緩存報文;這樣可以減少控制器的負載,減少不必要CAN報文的干擾。
CAN.init_Filt(0,1,0x073)
基于Arduino實現(xiàn)的帶CAN總線連接控制的燒錄器,解決了上位機PC接入CAN總線的問題,實現(xiàn)了通過CAN控制芯片的燒錄和燒錄后的測試自檢。使用Arduino開發(fā)平臺,方便快捷靈活,性價比高,穩(wěn)定性也有所保證。定制化的燒錄器設(shè)備應(yīng)用到產(chǎn)線生產(chǎn)上,能很好地解決了燒錄裝置的問題,大大提高了生產(chǎn)效率。
圖2燒錄器設(shè)計框圖