日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stm32 复位到内部bootloader

發布時間:2023/12/19 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。