STM32串口IAP
一、STM32編程方式
① 在線編程(ICP,In-Circuit Programming):
通過JTAG/SWD協(xié)議或者系統(tǒng)加載程序(Bootloader)下載用戶應(yīng)用程序到微控制器中。
② 在程序中編程(IAP,In Application Programming):
通過任何一種通信接口(如IO端口,USB,CAN,UART,I2C,SPI等)下載程序或者應(yīng)用數(shù)據(jù)到存儲(chǔ)器中。也就是說,STM32允許用戶在應(yīng)用程序中重新燒寫閃存存儲(chǔ)器中的內(nèi)容。然而,IAP需要至少有一部分程序已經(jīng)使用ICP方式燒到閃存存儲(chǔ)器中(Bootloader)。在不需要操作硬件平臺(tái)的情況下實(shí)現(xiàn)升級(jí)(遠(yuǎn)程)。
每種STM32芯片(M0,M3,M4),它們的主存儲(chǔ)器結(jié)構(gòu)可能不一樣,但是他們都有一個(gè)叫“系統(tǒng)存儲(chǔ)器”的區(qū)域,此區(qū)域是留給ST自己用來存放芯片的bootloader程序,此程序在芯片出廠的時(shí)候已經(jīng)固化在芯片內(nèi)部。系統(tǒng)存儲(chǔ)器的Bootloader程序會(huì)通過串口1接受應(yīng)用程序。
系統(tǒng)存儲(chǔ)器:只留給ST用來寫啟動(dòng)程序代碼代碼。啟動(dòng)程序代碼通過串口1接口實(shí)現(xiàn)對(duì)閃存存儲(chǔ)器的編程。
STM32啟動(dòng)模式選擇
注意:使用系統(tǒng)存儲(chǔ)器需要將BOOT1和BOOT0引腳置為0、1。
二、ICP下載流程
JTAG/SWD下載,直接下載到FLASH指定區(qū)域。通過Keil或者IAR下載都是這種方式。
一般的程序執(zhí)行流程
STM32的內(nèi)部閃存(FLASH)地址起始于0x08000000,一般情況下,程序文件就從此地址開始寫入。0x08000004開始存放中斷向量表。當(dāng)中斷來臨,STM32的內(nèi)部硬件機(jī)制亦會(huì)自動(dòng)將PC指針定位到“中斷向量表”處,并根據(jù)中斷源取出對(duì)應(yīng)的中斷向量執(zhí)行中斷服務(wù)程序。
①、STM32復(fù)位后,0X08000004地址取出復(fù)位中斷向量的地址,并跳轉(zhuǎn)到復(fù)位中斷服務(wù)程序。
②、在復(fù)位中斷服務(wù)程序執(zhí)行完之后,會(huì)跳轉(zhuǎn)到我們的main函數(shù)。
③、main函數(shù)執(zhí)行過程中,如果收到中斷請(qǐng)求(發(fā)生重中斷),此時(shí)STM32強(qiáng)制將PC指針指回中斷向量表處。
④、根據(jù)中斷源進(jìn)入相應(yīng)的中斷服務(wù)程序。
⑤、在執(zhí)行完中斷服務(wù)程序以后,程序再次返回main函數(shù)執(zhí)行。
三、IAP下載流程
通過Bootloader里面的UART、CAN、IIC等通信方式將應(yīng)用程序(bin格式)燒到IAP應(yīng)用程序存儲(chǔ)區(qū)域中。
IAP程序執(zhí)行流程
①、STM32復(fù)位后,還是從0X08000004地址取出復(fù)位中斷向量的地址,并跳轉(zhuǎn)到復(fù)位中斷服務(wù)程序,在運(yùn)行完復(fù)位中斷服務(wù)程序之后跳轉(zhuǎn)到IAP的main函數(shù)。
②、在執(zhí)行完IAP以后(即將新的APP代碼寫入STM32的FLASH,灰底部分。新程序的復(fù)位中斷向量起始地址為0X08000004+N+M),跳轉(zhuǎn)至新寫入程序的復(fù)位向量表,取出新程序的復(fù)位中斷向量的地址,并跳轉(zhuǎn)執(zhí)行新程序的復(fù)位中斷服務(wù)程序,隨后跳轉(zhuǎn)至新程序的main函數(shù),如圖標(biāo)號(hào)②和③所示。
④、在main函數(shù)執(zhí)行過程中,如果CPU得到一個(gè)中斷請(qǐng)求,PC指針仍強(qiáng)制跳轉(zhuǎn)到地址0X08000004中斷向量表處,而不是新程序的中斷向量表
⑤、程序再根據(jù)我們?cè)O(shè)置的中斷向量表偏移量,跳轉(zhuǎn)到對(duì)應(yīng)中斷源新的中斷服務(wù)程序中。
⑥、在執(zhí)行完中斷服務(wù)程序后,程序返回main函數(shù)繼續(xù)運(yùn)行。
四、IAP升級(jí)應(yīng)用程序過程
1)檢查是否需要對(duì)應(yīng)用代碼(實(shí)際的應(yīng)用程序代碼)進(jìn)行更新
2)如果不需要更新則轉(zhuǎn)到④)
3)執(zhí)行更新操作
4)跳轉(zhuǎn)到應(yīng)用代碼執(zhí)行
注意:
①、新程序(APP)必須在IAP程序(bootloader)之后的某個(gè)偏移量為x的地址開始;
②、必須將新程序(APP)的中斷向量表相應(yīng)的移動(dòng),移動(dòng)的偏移量為x。
IAP就講到這里啦!!!
總結(jié)
以上是生活随笔為你收集整理的STM32串口IAP的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022考研:数学考研备考规划
- 下一篇: 如何更改文件夹图标和颜色