中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

STM32 開機流程分析

發布時間:2020-06-13 20:07:42 來源:網絡 閱讀:4857 作者:xichubaw 欄目:編程語言

一、啟動模式,決定向量表的位置

     當CPU上電后,首先代碼區(Flash)應該從地址為0x00000000開始,而數據區(SRAM)應該從0x20000000開始,Cortex - M3 CPU總是通過代碼區獲得復位向量。STM32F10XXX微處理器中運用了特殊的機制使得STM32不僅可以通過Flash(主閃存和系統閃存)啟動,同時還可以從SRAM中啟動。


  STM32 有下面3種啟動方式:

STM32 開機流程分析

關于Main Flash/System Memory/SRAM 可以參見下面內存映射:

STM32 開機流程分析

從上圖可以看出 0x00000000 - 0x08000000 之間這128M空間是預留的,該區稱為Boot Memory Space(Aliased to Flash or systen memory depending on BOOT pins)。

(1)從Main Flash 啟動:Boot Space 是Main Flash 的別名。以0x08000000 對應的內存為例,則該塊內存既可以通過0x00000000 操作也可以通過0x08000000 操作,且都是操作的同一塊內存

(2)從System Memory啟動:Boot Space 是System Memory的別名。以0x1FFFFFF0對應的內存為例,則該塊內存既可以通過0x00000000 操作也可以通過0x1FFFFFF0操作,且都是操作的同一塊內存

(3)從SRAM 啟動:SRAM 只能通過0x20000000進行操作,與上述兩者不同 。從SRAM 啟動時,需要在應用程序初始化代碼中重新設置向量表的位置。

eg:void SystemInit (void)

{

......
#ifdef VECT_TAB_SRAM
SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */

#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH.*/
#endif

}


二、向量表解析

分析STM32的啟動文件startup_stm32f10x_hd.s(大容量)主要做了以下事情:

(1)設置初始堆棧指針(SP)

(2)設置初始程序計數器(PC)為復位向量,并在執行main函數前初始化系統時鐘

(3)設置向量表入口為異常事件的入口地址

(4)復位之后處理器為線程模式,優先級為特權級,堆棧設置為MSP主堆棧


STM32 開機流程分析


三、開機實際運行過程

通過仿真器仿真,發現開機后程序就直接跳轉到Reset_Handler,從.map文件看Reset_Handler的地址是0x080003a5并不是0x08000000(因為此時是從Flash中啟動的,故應該是0x08000000)。那么STM32是如何從0x08000000過渡到0x080003a5?

查看Cortex - M3權威指南中文版本中復位序列中相應的說明:

STM32 開機流程分析

也就是說上電復位的時候,剛開始CPU的主動權還是掌握在CM3中。CM3執行了寄存器的初始化及取復位向量表并執行!

這個絕大多數單片機不同,傳統的ARM架構總是從0地址開始執行,并且0地址是有一條跳轉指令的。在CM3中0地址處存的是MSP的位置,這并不是執行指令只是一個數據表。

另外還有一個問題,如何進入到復位序列?

 觸發STM32進入復位序列的有以下條件:

(1)System reset

(2)Power reset

(3)Backup domain reset

剛上電時就是通過Power reset 進入到復位序列!


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平乐县| 天等县| 睢宁县| 莱阳市| 厦门市| 汽车| 贵定县| 德昌县| 鄂托克旗| 沅江市| 肃北| 黄浦区| 眉山市| 邯郸县| 阳山县| 江川县| 家居| 清水河县| 永顺县| 伊川县| 肥城市| 商河县| 吉水县| 安徽省| 崇礼县| 西昌市| 佳木斯市| 正定县| 靖西县| 金乡县| 兖州市| 盘锦市| 拉萨市| 延寿县| 萨迦县| 塔河县| 墨竹工卡县| 宜宾市| 千阳县| 鸡泽县| 固镇县|