STM32微控制器的基礎知識

首先,在學習Cortex-M3時,我們必須要知道必要的縮略語。

整理如下:

AMBA:先進微控制器匯流排架構 ADK:AMBA設計套件

AHB:先進高效能匯流排 AHB-AP:AHB訪問埠

APB:先進外設匯流排 ARM ARM:ARM架構參考手冊

ASIC:行業領域專用積體電路 ATB :先進跟蹤匯流排

BE8:位元組不變式大端模式 CPI:每條指令的週期數

DAP:除錯訪問埠 DSP:數字訊號處理(器)

DWT:資料觀察點及跟蹤 ETM:嵌入式跟蹤宏單元

FPB:快閃記憶體地址過載及斷點 FSR:fault狀態暫存器

HTM:Core Sight AHB跟蹤宏單元

ICE:線上模擬器 IDE:整合開發環境

IRQ:中斷請求(通常是外中斷請求)

ISA:指令系統架構 ISR:中斷服務例程

ITM:儀器化跟蹤宏單元

JTAG:連線點測試行動組(一個關於測試和除錯介面的標準)

LR:連線暫存器

LSB:最低有效位

MSB:最高有效位

LSU:載入儲存單元

MCU:微控制器單元

MPU:儲存器保護單元

MMU:儲存器管理單元

MSP:主堆疊指標

NMI:不可遮蔽中斷

NVIC:巢狀向量中斷控制器

PC:程式計數器

PPB:私有外設匯流排

同時,還要如下規定:

數值

1。 4‘’hC , 0x123 都表示16進位制數 。

2。 #3表示數字3 (e。g。, IRQ #3 就是指3號中斷) 。

3。 #immed_12表示一個12位的立即數 。

4。 暫存器位。通常是表示一個位段的數值,例如 bit[15:12] 表示位序號從15往下數到12,這一段的數值。

暫存器訪問型別

1。 R 表示只讀

2。 W表示只寫

3。 RW 表示可讀可寫(前3條好像地球人都知道)

4。 R/Wc 表示可讀,但是寫訪問將使之清 0

Cortex-M3晶片簡介

1、晶片的基本結構如下圖:

STM32微控制器的基礎知識

2、關於ARMv7的知識--瞭解

在這個版本中,核心架構首次從單一款式變成3種款式:

款式A:設計用於高效能的“開放應用平臺”——越來越接近電腦了

款式R:用於高階的嵌入式系統,尤其是那些帶有實時要求的——又要快又要實時。

款式M:用於深度嵌入的,微控制器風格的系統中

介紹A:用於高效能的“開放應用平臺”,應用在那些需要運行復雜應用程式的處理器。支援大型嵌入式作業系統

R:用於高階的嵌入式系統,要求實時性的

M:用於深度嵌入的、微控制器風格的系統中

3、Cortex-M3處理器的舞臺

高效能+高程式碼密度+小矽片面積,使得CM3大面積地成為理想的處理平臺,主要應用在以下領域:

(1)低成本微控制器

(2)汽車電子

(3)資料通訊

(4)工業控制

(5)消費類電子產品

4、Cortex-M3概覽

(1)簡介

Cortex-M3是一個 32位處理器核心。內部的資料路徑是 32位的,暫存器是 32位的,儲存器介面也是 32 位的。CM3 採用了哈佛結構,擁有獨立的指令匯流排和資料匯流排,可以讓取指與資料訪問並行不悖。這樣一來資料訪問不再佔用指令匯流排,從而提升了效能。為實現這個特性, CM3內部含有好幾條匯流排介面,每條都為自己的應用場合最佳化過,並且它們可以並行工作。但是另一方面,指令匯流排和資料匯流排共享同一個儲存器空間(一個統一的儲存器系統)。

比較複雜的應用可能需要更多的儲存系統功能,為此CM3提供一個可選的MPU,而且在需要的情況下也可以使用外部的 cache。另外在CM3中,Both小端模式和大端模式都是支援的。

(2)Cortex-M3的簡化

(3)暫存器組

處理器擁有R0-R15的暫存器組,其中R13最為堆疊指標SP,SP有兩個,但是同一時刻只能有一個可以看到,這就是所謂的“banked”暫存器。

STM32微控制器的基礎知識

a、R0-R12都是 32位通用暫存器,用於資料操作。但是注意:絕大多數 16位Thumb指令只能訪問R0-R7,而 32位 Thumb-2指令可以訪問所有暫存器。

b、Cortex-M3擁有兩個堆疊指標,然而它們是 banked,因此任一時刻只能使用其中的一個。

主堆疊指標(MSP):復位後預設使用的堆疊指標,用於作業系統核心以及異常處理例程(包括中斷服務例程)

程序堆疊指標(PSP):由使用者的應用程式程式碼使用。

堆疊指標的最低兩位永遠是0,這意味著堆疊總是4位元組對齊的。

c、R14:連線暫存器——當呼叫一個子程式時,由R14儲存返回地址

d、R15:程式計數暫存器——指向當前的程式地址,如果修改它的值,就能改變程式的執行流(這裡有很多高階技巧)

e、Cortex-M3還在核心水平上搭載了若干特殊功能暫存器,包括

程式狀態字暫存器組(PSRs)

中斷遮蔽暫存器組(PRIMASK, FAULTMASK, BASEPRI)

控制暫存器(CONTROL)

STM32微控制器的基礎知識

Cortex-M3處理器支援兩種處理器的操作模式,還支援兩級特權操作。

兩種操作模式分別為:處理者模式和執行緒模式(thread mode)。引入兩個模式的本意,是用於區別普通應用程式的程式碼和異常服務例程的程式碼——包括中斷服務例程的程式碼。

Cortex-M3 的另一個側面則是特權的分級——特權級和使用者級。這可以提供一種儲存器訪問的保護機制,使得普通的使用者程式程式碼不能意外地,甚至是惡意地執行涉及到要害的操作。處理器支援兩種特權級,這也是一個基本的安全模型。

STM32微控制器的基礎知識

在 CM3 執行主應用程式時(執行緒模式),既可以使用特權級,也可以使用使用者級;但是異常服務例程必須在特權級下執行。復位後,處理器預設進入執行緒模式,特權極訪問。在特權級下,程式可以訪問所有範圍的儲存器(如果有 MPU,還要 在MPU規定的禁地之外),並且可以執行所有指令。

在特權級下的程式可以為所欲為,但也可能會把自己給玩進去——切換到使用者級。一旦進入使用者級,再想回來就得走“法律程式”了——使用者級的程式不能簡簡單單地試圖改寫 CONTROL暫存器就回到特權級,它必須先“申訴”:執行一條系統呼叫指令(SVC)。這會觸發SVC異常,然後由異常服務例程(通常是作業系統的一部分)接管,如果批准了進入,則異常服務例程修改 CONTROL暫存器,才能在使用者級的執行緒模式下重新進入特權級。

事實上,從使用者級到特權級的唯一途徑就是異常:如果在程式執行過程中觸發了一個異常,處理器總是先切換入特權級,並且在異常服務例程執行完畢退出時,返回先前的狀態。

透過引入特權級和使用者級,就能夠在硬體水平上限制某些不受信任的或者還沒有除錯好的程式,不讓它們隨便地配置涉及要害的暫存器,因而系統的可靠性得到了提高。進一步地,如果配了 MPU,它還可以作為特權機制的補充——保護關鍵的儲存區域不被破壞,這些區域通常是作業系統的區域。

(4)內建的巢狀向量中斷控制器

Cortex-M3 在核心水平上搭載了一顆中斷控制器——巢狀向量中斷控制器 NVIC(Nested Vectored Interrupt Controller)。它與核心有很深的“親密接觸”——與核心是緊耦合的。

NVIC提供如下的功能:

可巢狀中斷支援

向量中斷支援

動態優先順序調整支援

中斷延遲大大縮短

中斷可遮蔽

可巢狀中斷支援: 可巢狀中斷支援的作用範圍很廣,覆蓋了所有的外部中斷和絕大多數系統異常。外在表現是,這些異常都可以被賦予不同的優先順序。當前優先順序被儲存在 xPSR 的專用欄位中。當一個異常發生時,硬體會自動比較該異常的優先順序是否比當前的異常優先順序更高。如果發現來了更高優先順序的異常,處理器就會中斷當前的中斷服務例程(或者是普通程式),而服務新來的異常——即立即搶佔。

向量中斷支援: 當開始響應一箇中斷後,CM3會自動定位一張向量表,並且根據中斷號從表中找出 ISR的入口地址,然後跳轉過去執行。不需要像以前的 ARM那樣,由軟體來分辨到底是哪個中斷髮生了,也無需半導體廠商提供私有的中斷控制器來完成這種工作。這麼一來,中斷延遲時間大為縮短。

(5)儲存器對映

Cortex-M3支援4G儲存空間,具體分配如下圖:

STM32微控制器的基礎知識

(6)匯流排介面

Cortex-M3內部有若干個匯流排介面,以使 CM3能同時取址和訪內(訪問記憶體),它們是:

指令儲存區匯流排(兩條)

系統匯流排

私有外設匯流排

有兩條程式碼儲存區匯流排負責對程式碼儲存區的訪問,分別是 I-Code 匯流排和 D-Code 匯流排。前者用於取指,後者用於查表等操作,它們按最佳執行速度進行最佳化。

系統匯流排用於訪問記憶體和外設,覆蓋的區域包括 SRAM,片上外設,片外 RAM,片外擴充套件裝置,以及系統級儲存區的部分空間。

私有外設匯流排負責一部分私有外設的訪問,主要就是訪問除錯元件。它們也在系統級儲存區。

(7)儲存器保護單元(MPU)

Cortex-M3有一個可選的儲存器保護單元。配上它之後,就可以對特權級訪問和使用者級訪問分別施加不同的訪問限制。當檢測到犯規(violated)時,MPU 就會產生一個 fault 異常,可以由fault異常的服務例程來分析該錯誤,並且在可能時改正它。

MPU 有很多玩法。最常見的就是由作業系統使用 MPU,以使特權級程式碼的資料,包括作業系統本身的資料不被其它使用者程式弄壞。MPU在保護記憶體時是按區管理的。它可以把某些記憶體 region設定成只讀,從而避免了那裡的內容意外被更改;還可以在多工系統中把不同任務之間的資料區隔離。一句話,它會使嵌入式系統變得更加健壯,更加可靠(很多行業標準,尤其是航空的,就規定了必須使用 MPU來行使保護職能——譯註) 。

(8)Cortex-M3的簡評

高效能

許多指令都是單週期的——包括乘法相關指令。並且從整體效能上,Cortex-M3比得過絕大多數其它的架構。

指令匯流排和資料匯流排被分開,取值和訪內可以並行不悖 。

Thumb-2的到來告別了狀態切換的舊世代,再也不需要花時間來切換於 32位 ARM狀態和16位Thumb狀態之間了。這簡化了軟體開發和程式碼維護,使產品面市更快。

Thumb-2指令集為程式設計帶來了更多的靈活性。許多資料操作現在能用更短的程式碼搞定,這意味著 Cortex-M3的程式碼密度更高,也就對儲存器的需求更少。

取指都按 32位處理。同一週期最多可以取出兩條指令,留下了更多的頻寬給資料傳輸。

Cortex-M3的設計允許微控制器高頻執行(現代半導體制造技術能保證 100MHz以上的速度)即使在相同的速度下執行,CM3的每指令週期數(CPI)也更低,於是同樣的 MHz下可以做更多的工作;另一方面,也使同一個應用在 CM3上需要更低的主頻。

先進的中斷處理功能

內建的巢狀向量中斷控制器支援240條外部中斷輸入。向量化的中斷功能大大減少了中斷延遲,因為不在需要軟體去判斷中斷源。中斷的巢狀也是在硬體水平上實現的,不需要軟體程式碼來實現。

Cortex-M3在進入異常服務例程時,自動壓棧了 R0-R3, R12, LR, PSR 和PC,並且在返回時自動彈出它們,這多清爽!既加速了中斷的響應,也再不需要組合語言程式碼了。

NVIC支援對每一路中斷設定不同的優先順序,使得中斷管理極富彈性。最粗線條的實現也至少要支援 8級優先順序,而且還能動態地被修改。

最佳化中斷響應還有兩招,它們分別是“咬尾中斷機制”和“晚到中斷機制”。

有些需要較多週期才能執行完的指令,是可以被中斷-繼續的——就好比它們是一串指令一樣。這些指令包括載入多個暫存器(LDM),儲存多個暫存器(STM),多個暫存器參與的PUSH,以及多個暫存器參與的 POP。

除非系統被徹底地鎖定,NMI(不可遮蔽中斷)會在收到請求的第一時間予以響應。對很多安全-關鍵(safety-critical)的應用,NMI都是必不可少的(如化學反應即將失控時的緊急停機)。

透過上面我們可以很容易理解STM32的一些基本知識和結構,為學習STM32打好了基礎。