sm32的bootloader一般是通過開機時設定boot0=1來實現的。下面是通過程式來實現:
原來的startup檔案是直接把flash的資料載入到ram裡面然後跑main函式迴圈
bootloader的程式在0x1fff d800
那只要在進入main函式之前先判斷是否要進入bootloader,如果要進入bootloader,就載入0x1fff d800這個位址就好了。否則就繼續未修改之前的操作。
void systemreset(void)
void systemresettobootloader(void)
修改startup 的reset_handler
原來的:
reset_handler:
/* copy the data segment initializers from flash to sram */
movs r1, #0
b loopcopydatainit
修改後的:
reset_handler:
ldr r0, =0x20009ffc
ldr r1, =0xdeadbeef
ldr r2, [r0, #0]
str r0, [r0, #0]
cmp r2, r1
beq reboot_loader
/* copy the data segment initializers from flash to sram */
movs r1, #0
b loopcopydatainit
reboot_loader:
// reboot to rom
ldr r0, =0x1fffd800
ldr sp,[r0, #0]
ldr r0,[r0, #4]
bx r0
STM32復位函式
軟體復位 void g mcureset void 其實hal nvic systemreset是 void hal nvic systemreset void 其實nvic systemreset是 static inline void nvic systemreset void 系統復位 那麼核...
關於STM32 軟體復位
對於stm32 來說軟體復位有兩種方式 1 採用官方自帶的軟體庫 在官方軟體庫的stm32f10x nvic.c 檔案裡直接提供了系統復位的函式 void nvic generatesystemreset void 但是不是直接呼叫這個函式就ok 了?在cortex m3 權威指南中有這麼一句話 這...
stm32如何執行軟復位 STM32啟動檔案
我們日常使用的嵌入式應用程式開發中都是編寫c c 語言,我們平時編輯乙個工程的話,只用從main函式開始編輯,微控制器程式也是從這個函式開始進行執行的。但是微控制器上電後是如何尋找到並執行main函式的呢?我們其實都會在心裡有乙個答案 啟動檔案 還記得我們當初配置第乙個stm32工程的時候在工程中新...