STM32微控制器bootloader掃盲
STM32微控制器bootloader掃盲 STM32微控制器BootLoader掃盲 BootLoader和APP之間的關係 APP就是平時寫的微控制器上的應用程式,而BootLoader本質上和APP一樣,也是平時寫的應用程式。BootLoader只不過是擁有從外部接收資料,更新Flash(也就是APP),跳轉至APP功能的特殊APP罷了。 以STM32F103為例,如果沒有BootLoader,flash分佈就如下圖左半部分。如果有BootLoader,就如下圖右半部分,將flash分為兩部分(這裡舉例用0x800 4000做分界線),儲存了兩個應用程式(BootLoader和APP) 如何從BootLoader跳轉到APP 從外部接收資料,更新Flash,普通的APP也會有這樣的需求。不常見的也就是從BootLoader跳轉到APP這個功能了。 STM32 微控制器啟動流程 中介紹了微控制器上電後的啟動流程,其實也就主要乾了兩件事: 將棧頂位置載入到MSP暫存器中 將復位中斷服務函數的入口地址給PC暫存器 然後微控制器執行復位中斷服務函數,在復位中斷服務函數中設定中斷向量表的偏移地址,準備C環境,最後跳轉到main()函數。同理,從Bootloader跳到APP也需要幹這兩件事情,只不過上電時是微控制器自動載入的MSP和PC,而從Bootloader跳到APP則需要我們編寫函數進行跳轉。 下面是STM32 跳轉到APP的具體函數,在BootLoader函數中呼叫即可跳轉到APP_ADDR,如果該地址存放了APP的bin檔案則會執行APP的復位中斷服務函數( 一定要記得在APP中修改中斷向量表偏移地址 ,如APP中不修改則預設使用BootLoader的中斷向量表,APP中發生中斷時就會去查BootLoader的中斷向量表,從而呼叫BootLoader的中斷服務函數),進而執行APP的main()函數。同理,APP跳轉到BootLoader,修改跳轉地址 APP_ADDR 為BootLoader地址(這裡為0x8000000)即可實現. /* 開關全域性中斷的宏 */ # define ENABLE_INT ( ) __set_PRIMASK ( 0 ) /* 使能全域性中斷 */ # define DISABLE_INT ( ) __set