(深圳技師學(xué)院 電子信息技術(shù)系,深圳 518052)
傳統(tǒng)的8/16位單片機因其有限的性能和簡單的內(nèi)部外設(shè)模塊,使得其在設(shè)計一些功能稍顯復(fù)雜的電子產(chǎn)品時顯得捉襟見肘。而大多數(shù)32位處理器又因為其高功耗、高成本、復(fù)雜的開發(fā)應(yīng)用環(huán)境限制了它在低端電子產(chǎn)品中的使用。因此基于ARM Cortex-M內(nèi)核的32位嵌入式處理器應(yīng)運而生,Cortex-M內(nèi)核是ARM公司針對一些對成本比較敏感的低端嵌入式應(yīng)用而專門開發(fā)的ARM處理器內(nèi)核。
行業(yè)中基于Cortex-M內(nèi)核的ARM處理器多如牛毛,這其中又以ST公司開發(fā)的基于Cortex-M3內(nèi)核的STM32F10x系列處理器為其中的翹楚。STM32F10x系列處理器因其高性能(主頻達到72 MHz,同類產(chǎn)品性能最高)、低功耗、完善的器件軟件庫和開發(fā)工具鏈以及簡單的硬件應(yīng)用環(huán)境(如芯片無BGA封裝等)使得其作為32得到廣泛應(yīng)用。
STM32F10x系列處理器通常情況下有兩種方式來下載程序到芯片內(nèi)部的主閃存存儲器中:一種是外接專用的ARM仿真器(如J-LINK仿真器等)通過芯片的JTAG接口將用戶編寫的應(yīng)用程序下載到芯片內(nèi)部的主閃存存儲器,另一種是通過芯片的ISP接口將用戶編寫的應(yīng)用程序下載到芯片內(nèi)部的主閃存存儲器,不需要外接專用的ARM仿真器。
可以看出,采用ISP方式來下載程序時,成本遠低于采用仿真器的方式下載程序。但是由于采用ISP方式下載程序需要用到芯片出廠時固化在芯片內(nèi)部的Bootloader程序,下載完用戶的應(yīng)用程序后又需要芯片重新上電且需立即切換到去執(zhí)行用戶的應(yīng)用程序,因此芯片通常需要通過跳線的方式在這兩者之間進行轉(zhuǎn)換,這給用戶的應(yīng)用帶來了極大的不便。
鑒于此,本文設(shè)計了一種實用的STM32F10x系列處理器一鍵串口下載電路,運行調(diào)試PC機上的MCU-ISP軟件將用戶的應(yīng)用程序下載到芯片內(nèi)部的主閃存存儲器后,馬上就能運行用戶的應(yīng)用程序,從而極大地減少采用此芯片時的開發(fā)時間成本和生產(chǎn)成本。
STM32F10x系列處理器在使用上極其方便。除了性能和內(nèi)部功能模塊都較傳統(tǒng)的單片機有很大的提升和擴展外,STM32F10x系列處理器在片內(nèi)程序的加載和調(diào)試上都提供了豐富的手段。STM32F10x系列處理器除了可以通過JTAG(聯(lián)合測試行動組)協(xié)議接口在線下載程序和仿真程序外,還提供多種串行接口(UART、USB、CAN等)下載程序到芯片內(nèi)部的閃存中。STM32F10x系列處理器通過JTAG接口下載程序時必須采用專門的仿真器(如JLINK仿真器等)來下載程序,因此提高了產(chǎn)品的開發(fā)成本和生產(chǎn)成本。在很多場合基于STM32F10x系列處理器的嵌入式電子系統(tǒng)通常采用串行ISP(in-system programming 在線系統(tǒng)編程)方式來加載程序。
圖1是STM32F10x處理器,采用UART(異步串行通信接口,俗稱232接口)下載程序的硬件接口連接圖。STM32F10x處理器的UART接口外接232轉(zhuǎn)換芯片,232轉(zhuǎn)換芯片再連接到單板的232串行接口插座。PC主機的232串行接口插座和單板的232串行接口插座再通過線纜連接。
圖1 STM32F10x處理器 ISP(UART接口)方式下載程序硬件接口連接圖
PC主機上運行ISP軟件,STM32F10x處理器上電后自動運行芯片出廠前燒寫到芯片內(nèi)部系統(tǒng)存儲器中的Bootloader程序。芯片內(nèi)部的Bootloader程序和PC機上的MCU-ISP程序通過專門的串口通信協(xié)議將用戶編寫的應(yīng)用程序下載到芯片內(nèi)部的閃存中。
通常STM32F10x系列處理器是通過專用硬件配置引腳(BOOT1和BOOT0)的設(shè)置來確定處理器內(nèi)部程序的啟動方式。
表1為STM32F10x系列處理器啟動硬件配置表。
表1 STM32F10x系列處理器啟動硬件配置表
當(dāng)BOOT1=x、BOOT0=0時,系統(tǒng)上電后,處理器從主閃存存儲器啟動運行程序,這是正常的工作模式;當(dāng)BOOT1=0、BOOT0=1時,系統(tǒng)上電后,處理器從系統(tǒng)存儲器啟動運行程序,系統(tǒng)存儲器中的程序一般都是芯片出廠前由廠家寫入的Bootloader程序;當(dāng)BOOT1=1、BOOT0=1時,系統(tǒng)上電后,處理器從從內(nèi)置SRAM啟動,這種模式主要用于調(diào)試程序。
從這里可以看出,當(dāng)系統(tǒng)要通過串口來下載程序時,必須首先將BOOT1設(shè)置為0(低電平)、BOOT0設(shè)置為1(高電平),這樣芯片上電后首先運行芯片出廠前由廠家寫入的Bootloader程序。芯片內(nèi)部的Bootloader程序和PC機上正在運行的MCU-ISP程序之間通過專門的串口通信接口連接好后,就可將用戶編寫的應(yīng)用程序下載到芯片內(nèi)部的主閃存存儲器中。下載應(yīng)用程序到芯片內(nèi)部的主閃存存儲器后,如果要測試下載的應(yīng)用程序的運行結(jié)果,就必須要重新將BOOT0設(shè)置為0(高電平),然后系統(tǒng)再重新上電運行。系統(tǒng)再重新上電運行后就能執(zhí)行主閃存存儲器中的應(yīng)用程序了。在系統(tǒng)軟件調(diào)試過程中,為了下載應(yīng)用程序和觀察應(yīng)用程序的執(zhí)行效果,就需要不斷地將BOOT0在高低電平之間進行切換,這給應(yīng)用程序的調(diào)試和開發(fā)帶來了很大的不便。
圖2為一種實用的一鍵串行下載電路的原理圖。除此電路外,系統(tǒng)還需要將STM32F10x芯片的BOOT1引腳固定拉低,即將BOOT1信號永遠設(shè)置為低電平。
該電路是通過CH340來實現(xiàn)下載功能。CH340是一款USB總線轉(zhuǎn)換芯片,它完成USB和UART之間協(xié)議轉(zhuǎn)換的功能。采用該芯片的原因主要有兩個:一是在目前主流的PC主機中基本不再提供RS232異步串行通信接口,要實現(xiàn)STM32F10x芯片程序的下載必須通過USB接口才能連接,因此必須在單板上直接提供這種USB和UART協(xié)議之間的轉(zhuǎn)換電路;另外也可以通過MCU-ISP軟件操作芯片的RTS(數(shù)據(jù)發(fā)送請求)和DTR(數(shù)據(jù)接收請求)兩個引腳,方便地實現(xiàn)一鍵下載程序的功能。
圖2 一鍵串行下載電路原理圖
CH340的第16腳和第1腳分別是芯片的電源信號引腳和地信號引腳,分別接單片機的電源信號和地信號。第7腳和第8腳是芯片的12 MHz晶振輸入和輸出引腳。第5腳和第6腳是USB差分信號引腳,直接連接到單片機的USB插座上。第4腳為電源濾波引腳,當(dāng)芯片5 V電源供電時,該引腳需外接0.01 μF的退耦電容;當(dāng)芯片由3.3 V電源供電時,該引腳需外接電源信號,因此在電路設(shè)計時需做兼容設(shè)計。芯片的第14腳為RTS(數(shù)據(jù)發(fā)送請求)信號,通過外接一個三極管組成的控制電路來控制STM32F10x芯片的BOOT0信號,當(dāng)RTS信號輸出為高時,BOOT0為低電平,當(dāng)RTS信號輸出為低時,BOOT0為高電平。芯片的第13腳為DTR(數(shù)據(jù)接收請求)信號,通過外接一個三極管組成的控制電路來控制STM32F10x芯片的復(fù)位信號(NRST),當(dāng)DTR信號輸出為高時,NRST為低電平,當(dāng)DTR信號輸出為低時,NRST為高電平。
其中BOOT0信號連接到STM32F10x芯片的啟動配置引腳(第138腳),NRST復(fù)位信號直接連接到STM32F10x芯片的復(fù)位引腳(第25腳)。CH340的第2腳和第3腳分別為串行數(shù)據(jù)輸出和輸入腳,分別連接到STM32F10x芯片的第一路串行數(shù)據(jù)輸入(102)和輸出(101)腳。RTS信號和DTR信號的高低變化是受PC機上的MCU-ISP軟件來控制的。
圖3為一鍵串行下載電路關(guān)鍵信號波形圖。
如圖3所示,DTR#信號和RST#信號為一對相反信號,RTS#信號和BOOT0信號為一對相反信號。當(dāng)DTR#信號和RTS#信號為高電平時,RST#和BOOT0為低電平信號;反之,當(dāng)DTR#信號和RTS#信號為低電平時,RST#和BOOT0為高電平信號。
圖3 一鍵串行下載電路關(guān)鍵信號波形圖
當(dāng)需要下載程序到STM32F10x芯片的時候,首先通過MCU-ISP軟件控制DTR#輸出高電平,通過三極管控制TP2使得STM32F10x芯片的復(fù)位信號RST#為低??刂茝?fù)位時間大約為100 ms。100 ms后,RST#信號恢復(fù)正常,STM32F10x芯片進入正常啟動狀態(tài)。同時,由于此時RTS#為低,控制TP1使得BOOT0信號為高,另外系統(tǒng)電路已將BOOT1信號固定設(shè)置為低,這樣STM32F10x芯片在正常啟動狀態(tài)下就同時采樣到BOOT1為低電平,BOOT0為高電平,STM32F10x芯片將從系統(tǒng)存儲器啟動。由于STM32F10x芯片在出廠前已將Bootloader程序燒寫到系統(tǒng)存儲器中,此時STM32F10x芯片將開始運行Bootloader程序,進入加載程序的模式下。STM32F10x芯片通過串行通信接口準備開始加載應(yīng)用程序,由于串行通信接口的發(fā)送腳TXD和接收腳RXD接到CH340上,經(jīng)過CH340完成串行通信接口和USB接口協(xié)議的轉(zhuǎn)換后,再通過電腦上的MCU-ISP軟件設(shè)置后,就可以將電腦上需要下載的應(yīng)用程序下載到STM32F10x芯片主閃存存儲器中。
程序下載完成后,MCU-ISP軟件再次控制DTR#輸出高電平,通過三極管控制TP2使得STM32F10x芯片的復(fù)位信號RST#為低。同時控制RTS#輸出高電平,通過三極管控制TP1使得BOOT0信號為低。由于RST#為低,系統(tǒng)再次進入復(fù)位狀態(tài),復(fù)位時間大約為100 ms。100 ms后,RST#信號恢復(fù)正常,STM32F10x芯片進入正常啟動狀態(tài),由于此時BOOT0信號為低,BOOT1信號也為低,此時系統(tǒng)將主閃存存儲器啟動。主閃存存儲器此時已經(jīng)下載了新的應(yīng)用程序,因此系統(tǒng)實際上開始運行此應(yīng)用程序。
通過上面兩個步驟,整個電路實現(xiàn)了下載應(yīng)用程序并且下載完成后自動運行此程序的一鍵串行下載的功能。整個過程不是通過硬件跳線而是通過軟件的方式來實現(xiàn)程序的自動下載和運行,方便了STM32F10x系統(tǒng)應(yīng)用程序的調(diào)試和測試,從而大大提高了STM32F10x系統(tǒng)的開發(fā)效率。
在調(diào)試一鍵串行下載電路時,除了要保證一鍵串行電路本身沒問題之外,還需要確保STM32F10x最小系統(tǒng)硬件電路都正常。這樣再通過安裝在電腦上的MCUicd-ISP軟件才能正常地將程序下載到STM32F10x芯片。下面分別說明兩部分電路的調(diào)試步驟和方法。
同其它的嵌入式處理器系統(tǒng)一樣,要保證STM32F10x最小系統(tǒng)硬件電路正常運行,就必須從以下幾個方面來加以測試和調(diào)試:
① 電源信號。
我們以STM32F103ZET6為例來說明STM32F10x最小系統(tǒng)電源部分電路的調(diào)試步驟。STM32F103ZET6采用3.3 V供電,首先用萬用表測量電源模塊輸出的3.3 V電源信號正常,同時令示波器3.3 V電源信號的紋波不要超標(3.3V±5%)。然后測量STM32F103ZET6的電源引腳(17、52、39、62、72、84、95、108、121、131、144、31、33)上3.3 V電源信號都正常。
② 復(fù)位信號。
STM32F103ZET6的復(fù)位引腳為第25腳且低電平有效。所以在STM32F103ZET6正常工作時,一定要保證復(fù)位引腳的信號為高電平。用萬用表測量第25引腳,確保正常工作時此引腳信號為高電平。
③ 時鐘信號。
STM32F103ZET6的時鐘電路主要包括一個高速外部時鐘和振蕩電路以及一個低速外部時鐘和振蕩電路。高速外部時鐘和振蕩電路提供的時鐘信號供CPU內(nèi)部高速的系統(tǒng)時鐘來使用,低速外部時鐘和振蕩電路提供的時鐘信號供CPU內(nèi)部實時時鐘和其他定時功能提供一個低功耗且精確的時鐘源。在STM32F103ZET6未下載初始化程序之前,芯片內(nèi)部的系統(tǒng)時鐘由內(nèi)部RC振蕩電路來提供。因此此時用示波器去測量這兩對時鐘信號輸入腳(8和9、23和24)的信號,將測不到振蕩的時鐘信號,但并不代表此時芯片沒有正常工作。
④ JTAG接口電路。
STM32F10x芯片提供的JTAG接口電路除了實現(xiàn)對內(nèi)部電路的測試外,還可以實現(xiàn)對STM32F10x芯片進行程序的仿真和下載。也就是說STM32F10x芯片可以采用接口來進行程序的下載,一種是本文所述的ISP方式,一種是JTAG方式。JTAG接口主要包括TCK、TDO、TDI、TMS、TRST等引腳。如果這些引腳設(shè)置不當(dāng)?shù)脑?,將會使STM32F10x芯片處于不正常的工作狀態(tài),從而影響STM32F10x芯片的ISP功能的實現(xiàn)。因此在進行STM32F10x芯片在線下載調(diào)試前,必須用萬用表測量這幾個引腳是否處于正常的電平信號。要保證TDO、TDI、TMS、TRST等引腳處于高電平,TCK處于低電平的狀態(tài)。
上述4部分電路的信號都正常,才能保證STM32F10x最小系統(tǒng)硬件電路處于正常工作狀態(tài)。
一鍵串行下載電路的參考電路如圖2所示。首先保證CH340的電源引腳16是否有5 V信號,再確保CH340的輔助電源引腳V3是否正確連接了容量為0.01 μF的退耦電容(注意V3在CH340外接3.3 V電源信號時也需連接到3.3 V的電源信號,與5 V供電時不同)。然后用示波器測量時鐘輸入引腳7、8是否是時鐘振蕩信號。
信號測量正常后再用USB接口線將單板上的USB接口連接到電腦的USB接口上。打開電腦的“設(shè)備管理器”的“端口(COM和LPT)”中將搜索到CH340串口接口,此時表示CH340已經(jīng)正常工作。
用基于CH340芯片制作的USB接口轉(zhuǎn)串口的連接線(市面上有銷售)連接PC機和待調(diào)試單板。然后再在PC機上運行MCU-ISP軟件,選擇芯片類型為“STM32F10x series”,選擇串口號為電腦“設(shè)備管理器”所識別到的串口號,選中要下載的程序文件,點擊“程序下載”,此時程序就可以順利地下載到單板的芯片上了。
本文描述了一種基于CH340芯片實現(xiàn)的STM32F10x系列處理器的一鍵串行下載電路。此電路可應(yīng)用于采用STM32F10x系列處理器實現(xiàn)的嵌入式系統(tǒng)中。采用了此電路后,STM32F10x系列處理器不需要外接專門的價格昂貴的仿真器來進行程序的下載和調(diào)試,同時在下載和調(diào)試用戶應(yīng)用程序的過程中,不需要手動設(shè)置STM32F10x系列處理器的硬件來啟動配置引腳的電平值。這極大地降低了STM32F10x系列處理器的應(yīng)用成本,同時也大大地提高了該系列處理器實現(xiàn)的嵌入式系統(tǒng)的開發(fā)效率。
參考文獻
[1] ST. STM32F103ZET6datasheet.pdf,2009.
[2] ST.Application note AN2606:STM32 microcontroller system memory boot mode,2017.
[3] 江蘇沁恒股份有限公司.CH340中文手冊(一),2010.