stm32 复位到内部bootloader
生活随笔
收集整理的這篇文章主要介紹了
stm32 复位到内部bootloader
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
sm32的bootloader一般是通過開機時設置boot0=1來實現的。下面是通過程序來實現:
原來的startup文件是直接把flash的數據加載到ram里面然后跑main函數循環
bootloader的程序在0x1FFF D800
那只要在進入main函數之前先判斷是否要進入bootloader,如果要進入bootloader,就載入0x1fff d800這個地址就好了。否則就繼續未修改之前的操作。
void systemReset(void) {// Generate system resetSCB->AIRCR = AIRCR_VECTKEY_MASK | (uint32_t)0x04; }void systemResetToBootloader(void) {/*修改在RAM里面的標志位*/*((uint32_t *)0x20009FFC) = 0xDEADBEEF; // 40KB SRAM STM32F30X, 0x20009FFC=0x20000000+40*1024-4(ram的最后一個字)/*產生復位信號*/systemReset(); }?
修改startup?的Reset_Handler
原來的:
**********************************************************************
Reset_Handler:/* Copy the data segment initializers from flash to SRAM */movs ?r1, #0b ?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, #0b ?LoopCopyDataInitReboot_Loader:? ? ? ? ? ? ? ??// Reboot to ROM? ? ? ? ? ??ldr ? ? r0, =0x1FFFD800? ? ?ldr ? ? sp,[r0, #0]? ? ? ??ldr ? ? r0,[r0, #4]? ? ? ??bx ? ? ?r0? ? ? ? ? ? ? ???
總結
以上是生活随笔為你收集整理的stm32 复位到内部bootloader的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 角色扮演类电脑单机游戏有哪些(为什么角色
- 下一篇: 2022 开源鸿蒙 OpenHarmon