發表文章

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

為什麼要安裝 Cmder?

Source : https://annkuoq.github.io/blog/2019-12-10-install-cmder-and-git/ 為什麼要安裝 Cmder? 因為要在 Windows 使用 Linux 的指令 安裝步驟 前往 Cmder 官網  下載 點擊  Download Full ,下載 Full 版本 (包含 Git 指令) 解壓縮  cmder.zip 將 Cmder 資料夾放到 C 槽底下  C:\cmder 開啟檔案總管 對  本機  按右鍵 >  內容  >  進階系統設定  >  進階  >  環境變數  > 點擊 系統變數 的  Path  >  編輯  >  新增  >  C:\cmder  >  確定 開啟 CMD,輸入  set PATH=C: ,讓環境變數立即生效,不用重開機 關閉 CMD 再重啟,輸入  echo %PATH% ,查看是否有增加  C:\cmder 開啟 Cmder,出現警告視窗 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Warning! ConEmu binaries were marked as 'Down loaded from internet': C:\cmder\vendor\conemu-maximus5\ConEmu.exe C:\cmder\vendor\conemu-maximus5\ConEmu64.exe C:\cmder\vendor\conemu-maximus5\ConEmu\ConEmuC.exe C:\cmder\vendor\conemu-maximus5\ConEmu\ConEmuC64.exe C:\cmder\vendor\conemu-maximus5\ConEmu\ConEmuCD.dll C:\cmder\vendor\conemu-maximus5\ConEmu\ConEmuCD64.dll C:\cmder\vendor\conemu-maximus5\ConEmu\ConEmuHIcdll C:\cmder\vendor\conemu-maximus5\ConEmu\ConEmuHk64.dll This