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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32向量表详细分析

發(fā)布時(shí)間:2025/4/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32向量表详细分析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

預(yù)備知識:

DCD指令:用于分配一片連續(xù)的字存儲單元(32bit),并將表達(dá)式的值初始化給該字存儲單元,類似于C中定義數(shù)組并初始化。比如: DCD 0 的意思是:分配一個(gè)字存儲單元,并將該單元初始化為0。

分析:

在STM32的啟動文件中可以看到有如下代碼:

????EXPORT __Vectors

__Vectors

????DCD __initial_sp ; Top of Stack

????DCD Reset_Handler

????DCD NMIException

????DCD HardFaultException

????DCD MemManageException

????DCD BusFaultException

????DCD UsageFaultException

????DCD 0 ; Reserved

????DCD 0 ; Reserved

????DCD 0 ; Reserved

????DCD 0 ; Reserved

????DCD SVCHandler

????DCD DebugMonitor

????DCD 0 ; Reserved

????DCD OSPendSV

……

這一段是分配STM32的中斷向量表。從DCD后面表達(dá)式的名稱可以看出第一個(gè)字存儲單元分配給了棧頂,其值為__initial_sp。第二個(gè)字分配給了復(fù)位地址,其值為Reset_Handler,后面接著分配給其他異常或中斷。

這里的Reset_Handler,NMIException等,其實(shí)是一個(gè)地址值,也就是中斷處理函數(shù)的入口地址。在函數(shù)實(shí)現(xiàn)時(shí),由編譯器分配一個(gè)地址值。

那么這里就有兩個(gè)問題。

第一個(gè)是為什么是這樣的分配順序?

第二個(gè)是DCD后面表達(dá)式的值,即各個(gè)中斷函數(shù)的地址值如Reset_Handler,NMIException是如何分配的?

第一個(gè)問題的答案好找,我們參考《STM32參考手冊》:

可以看到,啟動文件中的向量表的分配的順序是按照固定的規(guī)則來的。

第二個(gè)問題。隨意打開一份編譯過的工程,工程配置如下:

我們可以看到.map文件有這樣一段:

同時(shí)使用J-Link打開.hex文件可以看到

?

從hex檔,我們可以看到Flash的起始區(qū)域0x8000000的內(nèi)容為

0x20000660

0x0800027D

0x08000281

0x08000283

……

剛好可以和map文件對應(yīng),也剛好可以和啟動文件的向量表對應(yīng)。

按照Cortex-M3權(quán)威指南,在復(fù)位后,有如下動作:


?

?

? ? 我這里是選擇從flash啟動,根據(jù)寄存器映射,Address從0x00000000映射到0x08000000。所以hex檔的內(nèi)容剛好滿足復(fù)位序列的設(shè)定。

由此從啟動文件到.map文件再到.hex文檔,再到CM3復(fù)位啟動的脈絡(luò)就理清了。

總結(jié)

以上是生活随笔為你收集整理的STM32向量表详细分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。