STM32bootloader原理解釋

STM32bootloader原理解釋

一、STM32的常規啓動流程

​ STM32的內部flash地址起始於0x8000000,一般情況下,程序文件就從此地址開始寫入。此外STM32是基於Cortex-M3內核的微控制器,其內部通過一張“中斷向量表”來響應中斷,程序啓動後,將首先從“中斷向量表”取出復位中斷向量執行復位中斷程序完成啓動。而這張“中斷向量表”的起始地址是0x8000004,當中斷來臨,STM32的內部硬件機制也會自動將PC指針定位到“中斷向量表”處,並根據中斷源取出對應的中斷向量執行中斷服務程序。
​ 在STM32微控制器上實現IAP方案,除了常規的串口接收數據以及閃存數據寫入等常規操作外,還需注意STM32的啓動過程和中斷響應方式。

​ 下圖爲STM32的啓動過程:

在這裏插入圖片描述

  1. STM32復位時會從0x8000004(復位中斷向量)中取出復位中斷服務程序的入口地址來執行復位操作,即使PC指針指向main函數的入口

  2. 開始執行main函數這個死循環函數

  3. 在main函數運行過程中,如果發生了中斷請求,那麼PC指針就會指向中斷向量表中的相應中斷向量

  4. PC在相應中斷向量中取出中斷服務程序的入口地址,PC指針跳轉過去

  5. 執行中斷服務程序

  6. 結束後繼續返回main函數

二、加上bootloader後的啓動流程

在這裏插入圖片描述

  1. STM32復位時會從0x8000004(復位中斷向量)中取出復位中斷服務程序的入口地址來執行復位操作,即使PC指針指向bootloader main函數的入口

  2. 開始執行bootloader main函數這個死循環函數

  3. bootloader main函數將新的用戶程序燒寫到flash地址爲0x8000004+N+M的區域

  4. 通過IAP過程將PC指針指向用戶程序的復位中斷向量,開始運行用戶main函數

  5. 在用戶main函數運行過程中,如果發生了中斷請求,那麼PC指針就會指向中斷向量表中的相應中斷向量,而此時中斷向量表依舊爲bootloader程序的中斷向量表

  6. 因此需要對中斷向量表進行重定向

  7. 重定向後就可以正常運行用戶程序的中斷服務程序

  8. 執行完中斷服務程序後,繼續返回用戶main函數

三、bootloader流程總結

  1. flash解鎖
  2. 若flash有寫保護需要關閉寫保護
  3. 串口配置
  4. 擦除flash
  5. 燒寫flash
  6. 重定向pc指針到用戶程序的復位中斷向量處
  7. 開始運行用戶程序

四、用戶程序注意

由於用戶程序的中斷向量表不是默認的中斷向量表,因此需要在最開始對中斷向量表進行重定向

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章