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