真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

STM32開機(jī)流程分析

一、啟動(dòng)模式,決定向量表的位置

成都創(chuàng)新互聯(lián)公司長(zhǎng)期為近千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為喀左企業(yè)提供專業(yè)的成都做網(wǎng)站、成都網(wǎng)站制作,喀左網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

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

  STM32 有下面3種啟動(dòng)方式:

STM32 開機(jī)流程分析

關(guān)于Main Flash/System Memory/SRAM 可以參見下面內(nèi)存映射:

STM32 開機(jī)流程分析

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

(1)從Main Flash 啟動(dòng):Boot Space 是Main Flash 的別名。以0x08000000 對(duì)應(yīng)的內(nèi)存為例,則該塊內(nèi)存既可以通過(guò)0x00000000 操作也可以通過(guò)0x08000000 操作,且都是操作的同一塊內(nèi)存

(2)從System Memory啟動(dòng):Boot Space 是System Memory的別名。以0x1FFFFFF0對(duì)應(yīng)的內(nèi)存為例,則該塊內(nèi)存既可以通過(guò)0x00000000 操作也可以通過(guò)0x1FFFFFF0操作,且都是操作的同一塊內(nèi)存

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

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的啟動(dòng)文件startup_stm32f10x_hd.s(大容量)主要做了以下事情:

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

(2)設(shè)置初始程序計(jì)數(shù)器(PC)為復(fù)位向量,并在執(zhí)行main函數(shù)前初始化系統(tǒng)時(shí)鐘

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

(4)復(fù)位之后處理器為線程模式,優(yōu)先級(jí)為特權(quán)級(jí),堆棧設(shè)置為MSP主堆棧

STM32 開機(jī)流程分析

三、開機(jī)實(shí)際運(yùn)行過(guò)程

通過(guò)仿真器仿真,發(fā)現(xiàn)開機(jī)后程序就直接跳轉(zhuǎn)到Reset_Handler,從.map文件看Reset_Handler的地址是0x080003a5并不是0x08000000(因?yàn)榇藭r(shí)是從Flash中啟動(dòng)的,故應(yīng)該是0x08000000)。那么STM32是如何從0x08000000過(guò)渡到0x080003a5?

查看Cortex - M3權(quán)威指南中文版本中復(fù)位序列中相應(yīng)的說(shuō)明:

STM32 開機(jī)流程分析

也就是說(shuō)上電復(fù)位的時(shí)候,剛開始CPU的主動(dòng)權(quán)還是掌握在CM3中。CM3執(zhí)行了寄存器的初始化及取復(fù)位向量表并執(zhí)行!

這個(gè)絕大多數(shù)單片機(jī)不同,傳統(tǒng)的ARM架構(gòu)總是從0地址開始執(zhí)行,并且0地址是有一條跳轉(zhuǎn)指令的。在CM3中0地址處存的是MSP的位置,這并不是執(zhí)行指令只是一個(gè)數(shù)據(jù)表。

另外還有一個(gè)問(wèn)題,如何進(jìn)入到復(fù)位序列?

 觸發(fā)STM32進(jìn)入復(fù)位序列的有以下條件:

(1)System reset

(2)Power reset

(3)Backup domain reset

剛上電時(shí)就是通過(guò)Power reset 進(jìn)入到復(fù)位序列!


新聞名稱:STM32開機(jī)流程分析
網(wǎng)頁(yè)地址:http://weahome.cn/article/jhdsgh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部