應(yīng)用原理;
STM32F103系列單片機(jī)在使用串口進(jìn)行編程的時(shí)候利用的是芯片自身的自舉程序?qū)崿F(xiàn)的。
當(dāng)Boot0 = 1,Boot1 = 0的時(shí)候開(kāi)始執(zhí)行自舉程序,當(dāng)開(kāi)始執(zhí)行自舉程序的時(shí)候單片機(jī)的外設(shè)將按照如下圖進(jìn)行操作。此時(shí)USART的通信速率是自適應(yīng)的(此處建議波特率<=115200)。同時(shí)開(kāi)啟看門狗,可以使用串口一進(jìn)行數(shù)據(jù)交互。
如下圖所示,為自舉程序運(yùn)行后的流程圖,通過(guò)檢測(cè)開(kāi)始幀0x7f判斷是否開(kāi)始數(shù)據(jù)傳輸,當(dāng)開(kāi)始的時(shí)候通過(guò)關(guān)斷所有的中斷源,之后配置串口,之后開(kāi)始進(jìn)入循環(huán)接收代碼。
在某些單片機(jī)的上具有雙內(nèi)存區(qū)的情況,這種情況是可以在運(yùn)行的軟件中直接設(shè)置BFB2的標(biāo)志位進(jìn)行運(yùn)行代碼的切換的。但是這次使用的STM32F103RCT6并不具備這些功能。
下表展示了在115200波特率下使用自動(dòng)波特率的情況下的波特率誤差的范圍,若程序出現(xiàn)不能正常下載的情況下,可以通過(guò)降低波特率來(lái)解決該問(wèn)題。
在知道芯片的引導(dǎo)程序進(jìn)入模式后,通過(guò)串口芯片自動(dòng)配置BOOT0引腳和復(fù)位單片機(jī)即可實(shí)現(xiàn)自動(dòng)化的程序升級(jí)。
在升級(jí)上使用CH340G芯片將USB轉(zhuǎn)換為串口,同時(shí)通過(guò)RTS引腳和DTR引腳控制NRST/BOOT0引腳實(shí)現(xiàn)程序升級(jí)。使用FlyMCU軟件對(duì)程序進(jìn)行升級(jí)。在CH340芯片上RTS引腳默認(rèn)為高電平,DTR引腳默認(rèn)不輸出為高阻狀態(tài)。
其中一種方式如下圖所示,芯片使用5V供電,通過(guò)三極管進(jìn)行電平轉(zhuǎn)換實(shí)現(xiàn)自動(dòng)程序升級(jí)。
另一種是如下圖所示,使用3,3v供電,將RTS\DTR引腳直接連接到單片機(jī)的NRST/BOOT0引腳上。
如下圖所示,在FlyMcu軟件上通過(guò)選擇RTS低電平復(fù)位、DTR高電平進(jìn)BootLoader進(jìn)行程序編寫即可。