stm32 復位到內部bootloader

2021-10-06 08:29:41 字數 1199 閱讀 9987

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工程的時候在工程中新...