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