一、STM32系統(tǒng)框架
- 1.1、Cortex M內(nèi)核 & 芯片
- 1.2、F1系統(tǒng)架構(gòu)
- 1.3、F4系統(tǒng)架構(gòu)
- 1.4、F7系統(tǒng)架構(gòu)
- 1.5、H7系統(tǒng)架構(gòu)
二、STM32的尋址范圍?
三、存儲(chǔ)器映射
- 存儲(chǔ)器功能劃分(F1為例)
- STM32F1存儲(chǔ)器映射圖
四、寄存器映射
- 寄存器基礎(chǔ)知識(shí)
- STM32寄存器分類
- 寄存器映射(F1為例)
- 寄存器描述解讀
- 寄存器映射舉例
- 寄存器地址計(jì)算
- GPIOA_ODR寄存器地址計(jì)算過程:
- 使用結(jié)構(gòu)體,可以很方便的完成對(duì)寄存器的映射:
- stm32f103xe.h主要組成部分
五、總結(jié)
一、STM32系統(tǒng)框架
1.1、Cortex M內(nèi)核 & 芯片
1.2、F1系統(tǒng)架構(gòu)
ARM Cortex-M3 內(nèi)核的總線結(jié)構(gòu)以及相關(guān)概念。以下是對(duì)其中一些術(shù)語(yǔ)的簡(jiǎn)要解釋:
總線矩陣(Bus Matrix):
總線矩陣是用于連接主動(dòng)單元(主要是處理器內(nèi)核)和被動(dòng)單元(外設(shè))的關(guān)鍵組件。它負(fù)責(zé)協(xié)調(diào)和管理數(shù)據(jù)和指令的傳輸,確保有效地連接不同的單元。在 ARM Cortex-M3 內(nèi)核中,總線矩陣是連接 DCode 總線和 System 總線的關(guān)鍵組成部分。
主動(dòng)單元:
-
Cortex-M3 內(nèi)核:
Cortex-M3 內(nèi)核是主動(dòng)單元的核心。它通過 DCode 總線直接連接到 Flash 存儲(chǔ)器,以便高效地獲取指令。同時(shí),連接到 System 總線以與外設(shè)進(jìn)行通信。
被動(dòng)單元:
-
AHB 到 APB 橋:
AHB 到 APB 橋是被動(dòng)單元的一部分,它連接著所有的 APB 外設(shè)。這個(gè)橋是主動(dòng)單元和被動(dòng)單元之間的橋梁,允許數(shù)據(jù)在高性能總線(AHB)和外圍總線(APB)之間傳輸。 -
外設(shè):
外設(shè)是連接到被動(dòng)單元的各種設(shè)備,如傳感器、通信模塊等。它們通過 APB 連接到主動(dòng)單元,與 Cortex-M3 內(nèi)核進(jìn)行通信。
時(shí)鐘頻率:
各個(gè)單元的工作時(shí)鐘頻率是至關(guān)重要的。在 ARM Cortex-M3 內(nèi)核中:
- AHB 時(shí)鐘頻率: 最大為 72MHz。
- APB1 時(shí)鐘頻率: 最大為 36MHz。
- APB2 時(shí)鐘頻率: 最大為 72MHz。
這些頻率指定了各個(gè)總線的最大工作速度,影響著整個(gè)系統(tǒng)的性能。
這樣,通過總線矩陣的管理,主動(dòng)單元和被動(dòng)單元之間實(shí)現(xiàn)了高效的數(shù)據(jù)和指令傳輸,形成了 ARM Cortex-M3 內(nèi)核的總線架構(gòu)。
-
Cortex-M3 內(nèi)核:
ARM Cortex-M3 是 ARM 公司推出的低功耗、高性能的 32 位 RISC 處理器內(nèi)核。它通常用于嵌入式系統(tǒng),具有較小的體積和功耗。 -
DCode 總線(D-Bus):
DCode 總線是用于連接 Cortex-M3 內(nèi)核和 Flash 存儲(chǔ)器的總線,用于傳輸數(shù)據(jù)。 -
System 總線(S-Bus):
System 總線用于連接 Cortex-M3 內(nèi)核與外設(shè)和其他系統(tǒng)組件之間的通信。它負(fù)責(zé)處理系統(tǒng)中的數(shù)據(jù)和指令傳輸。 -
ICode 總線:
ICode 總線直接連接 Flash 存儲(chǔ)器接口,用于指令傳輸。它不需要經(jīng)過總線矩陣,以提高指令讀取的效率。 -
DMA(直接內(nèi)存訪問):
DMA 是一種數(shù)據(jù)傳輸機(jī)制,允許外設(shè)和內(nèi)存之間的直接數(shù)據(jù)傳輸,而無需 CPU 的干預(yù)。這有助于提高系統(tǒng)性能。 -
AHB(高級(jí)高性能總線):
AHB 是 Cortex-M3 內(nèi)核連接到系統(tǒng)中高性能設(shè)備的總線。它是一種高級(jí)別總線,用于連接高性能的模塊。 -
APB(高級(jí)外圍總線):
APB 是 Cortex-M3 內(nèi)核連接到外設(shè)的總線。它是一種低功耗、低速率的總線,適用于連接外圍設(shè)備。 -
總線時(shí)鐘頻率:
描述了各個(gè)總線的最大時(shí)鐘頻率。AHB 的最大時(shí)鐘頻率為 72MHz,APB1 的最大時(shí)鐘頻率為 36MHz,APB2 的最大時(shí)鐘頻率為 72MHz。這些頻率是系統(tǒng)中各個(gè)總線的最大工作頻率。
總體而言,這些概念構(gòu)成了 ARM Cortex-M3 內(nèi)核及其周邊組件的總線架構(gòu),提供了靈活而高效的數(shù)據(jù)和指令傳輸機(jī)制。
參考:STM32F10xxx參考手冊(cè)_V10(中文版).pdf 2.1小節(jié)
路徑:戰(zhàn)艦 V4\資料\8,STM32參考資料\2,芯片資料\STM32F10xxx參考手冊(cè)_V10(中文版).pdf
???戰(zhàn)艦 V4\資料\7,硬件資料\STM32F103ZET6(中文版).pdf
STM32F103xC、STM32F103xD和STM32F103xE增強(qiáng)型模塊框圖
- 工作溫度:-40°C至+85°C(尾綴為6,見表71),或-40°C至+105°C(尾綴為7,見表71),結(jié)溫分別達(dá)105°C或125°C。
- AF:可作為外設(shè)功能腳的I/O端口
1.3、F4系統(tǒng)架構(gòu)
F4 系統(tǒng)架構(gòu):
F4 系列的系統(tǒng)架構(gòu)包括主控總線和被控總線,這些總線連接了各種核心和外設(shè),為處理器提供了高效的數(shù)據(jù)和指令傳輸通道。
主控總線:
-
Cortex M4 內(nèi)核 I 總線:
連接 Cortex-M4 內(nèi)核的指令總線,負(fù)責(zé)指令的讀取。 -
Cortex M4 內(nèi)核 D 總線:
連接 Cortex-M4 內(nèi)核的數(shù)據(jù)總線,負(fù)責(zé)數(shù)據(jù)的讀寫。 -
Cortex M4 內(nèi)核 S 總線:
連接 Cortex-M4 內(nèi)核的系統(tǒng)總線,用于核心和外設(shè)之間的通信。 -
DMA1 存儲(chǔ)器總線:
連接 DMA1 控制器和存儲(chǔ)器,用于實(shí)現(xiàn) DMA 操作。 -
DMA2 存儲(chǔ)器總線:
連接 DMA2 控制器和存儲(chǔ)器,支持存儲(chǔ)器訪問的 DMA 操作。 -
DMA2 外設(shè)總線:
連接 DMA2 控制器和外設(shè),用于外設(shè)之間的數(shù)據(jù)傳輸。 -
以太網(wǎng) DMA 總線:
專門用于連接以太網(wǎng)控制器的 DMA 總線。 -
USB OTG HS DMA 總線:
專用于連接 USB OTG 控制器的 DMA 總線。
被控總線:
-
內(nèi)部 FLASH Icode 總線:
用于連接內(nèi)部 Flash 存儲(chǔ)器的指令總線。 -
內(nèi)部 FLASH Dcode 總線:
用于連接內(nèi)部 Flash 存儲(chǔ)器的數(shù)據(jù)總線。 -
主要內(nèi)部 SRAM1(112KB):
連接主要的內(nèi)部 SRAM 區(qū)域,用于存儲(chǔ)數(shù)據(jù)。 -
輔助內(nèi)部 SRAM2(16KB):
連接輔助的內(nèi)部 SRAM 區(qū)域,提供額外的存儲(chǔ)空間。 -
輔助內(nèi)部 SRAM3(64KB):
適用于某些型號(hào)(如 F42xxx 和 F43xxx),提供額外的內(nèi)部 SRAM。 -
AHB1 外設(shè)(包括 AHB-APB 總線橋和 APB 外設(shè)):
連接 AHB1 外設(shè)總線,包括連接到 AHB-APB 總線橋的外設(shè)和直接連接到 AHB1 的外設(shè)。 -
AHB2 外設(shè):
連接 AHB2 外設(shè)總線,用于連接直接連接到 AHB2 的外設(shè)。
CCM RAM:
CCM RAM 是 Core-Coupled Memory RAM,專用于存儲(chǔ)數(shù)據(jù),具有快速的訪問速度,但不支持 DMA 操作。
總線時(shí)鐘頻率:F407/F429
- AHB1/2 時(shí)鐘頻率: 最大為 168/180MHz。
- APB1 時(shí)鐘頻率: 最大為 42/45MHz。
- APB2 時(shí)鐘頻率: 最大為 84/90MHz。
這些頻率限制了各個(gè)總線和外設(shè)的工作速度,影響著系統(tǒng)的性能??傮w而言,F(xiàn)4 系列的系統(tǒng)架構(gòu)提供了高度靈活性和性能,適用于不同應(yīng)用場(chǎng)景的需求。
摘自:STM32F4xx參考手冊(cè)_V4(中文版).pdf 2.1小節(jié)
路徑:F429、F767\資料 A盤\8,STM32參考資料\STM32F4xx中文參考手冊(cè).pdf
1.4、F7系統(tǒng)架構(gòu)
摘自:STM32F7xx參考手冊(cè)_V2(中文版).pdf 2.1小節(jié)
F7 系統(tǒng)架構(gòu):
F7 系列的系統(tǒng)架構(gòu)包括主系統(tǒng)架構(gòu)和多重 AHB 總線矩陣,為 Cortex-M7 處理器提供高效的數(shù)據(jù)和指令傳輸通道。
主系統(tǒng)架構(gòu):
-
AXI 轉(zhuǎn) AHB 總線橋:
- 連接到內(nèi)嵌 Flash 的 AXI 轉(zhuǎn) 64 位 AHB 總線橋。
- 連接到 AHB 總線矩陣的 3 個(gè) AXI 轉(zhuǎn) 32 位 AHB 總線橋。
-
AHB 總線矩陣:
- 包含 12 個(gè)總線主控制器和 8 個(gè)總線從控制器。
- 連接各種核心、外設(shè)以及多重 AHB 總線矩陣。
-
多重 AHB 總線矩陣:
- 12 個(gè)總線主控制器和 8 個(gè)總線從控制器。
- 包括 3 個(gè) 32 位 AHB 總線、連接到內(nèi)嵌 Flash 的 64 位 AHB 總線、AHBP 總線、以及各種 DMA 控制器和外設(shè)。
總線主控制器:
-
3x32 位 AHB 總線:
- 連接到不同外設(shè)和 DMA 控制器的獨(dú)立 32 位 AHB 總線。
-
連接到內(nèi)嵌 Flash 的 64 位 AHB 總線:
- 用于高效連接到內(nèi)部 Flash 存儲(chǔ)器。
-
AHBP 總線:
- 與 AHBP 接口相關(guān)的總線,可能用于特定的 DMA 操作。
-
DMA1 存儲(chǔ)器總線:
- 連接 DMA1 控制器和存儲(chǔ)器,支持存儲(chǔ)器訪問的 DMA 操作。
-
DMA2 存儲(chǔ)器總線:
- 連接 DMA2 控制器和存儲(chǔ)器,用于 DMA 操作。
-
DMA2 外設(shè)總線:
- 連接 DMA2 控制器和外設(shè),用于外設(shè)之間的數(shù)據(jù)傳輸。
-
以太網(wǎng) DMA 總線:
- 專用于連接以太網(wǎng)控制器的 DMA 總線。
-
USB OTG HS DMA 總線:
- 專用于連接 USB OTG 控制器的 DMA 總線。
-
LCD 控制器 DMA 總線:
- 連接到 LCD 控制器的 DMA 總線。
-
DMA2D 存儲(chǔ)器總線:
- 連接 DMA2D 控制器和存儲(chǔ)器,支持高級(jí) 2D 圖形加速。
總線從控制器:
-
AHB 總線上的內(nèi)嵌 Flash:
- 用于連接到 Cortex-M7 處理器的內(nèi)嵌 Flash 存儲(chǔ)器。
-
Cortex M7 AHBS 從接口:
- 僅用于 DTCM RAM 的 DMA 數(shù)據(jù)傳輸。
-
主 SRAM1(240KB):
- 連接到主要的內(nèi)部 SRAM 區(qū)域,用于存儲(chǔ)數(shù)據(jù)。
-
輔助 SRAM2(16KB):
- 連接到輔助的內(nèi)部 SRAM 區(qū)域,提供額外的存儲(chǔ)空間。
-
AHB1 外設(shè)(包括 AHB-APB 總線橋和 APB 外設(shè)):
- 連接到 AHB1 外設(shè)總線,包括連接到 AHB-APB 總線橋的外設(shè)和直接連接到 AHB1 的外設(shè)。
-
AHB2 外設(shè):
- 連接到 AHB2 外設(shè)總線,用于連接直接連接到 AHB2 的外設(shè)。
-
FMC(外部存儲(chǔ)器接口):
- 連接到外部存儲(chǔ)器接口,支持連接外部存儲(chǔ)設(shè)備。
-
Quad SPI(四通道串行外圍設(shè)備接口):
- 連接到 Quad SPI 外設(shè)總線,支持四通道 SPI 通信。
DTCM RAM 和 ITCM RAM:
-
DTCM RAM:
- 可以存放數(shù)據(jù),也可以存放指令。
- 用于存儲(chǔ)數(shù)據(jù),支持 DMA 操作。
-
ITCM RAM:
- 用于存儲(chǔ)指令,支持 CPU 時(shí)鐘速度訪問,無等待周期。
總線時(shí)鐘頻率:
- AHB1/2 時(shí)鐘頻率: 最大為 216MHz。
- APB1 時(shí)鐘頻率: 最大為 54MHz。
- APB2 時(shí)鐘頻率: 最大為 108MHz。
F7 系列的系統(tǒng)架構(gòu)提供了強(qiáng)大的數(shù)據(jù)通路和豐富的外設(shè)支持,適用于高性能應(yīng)用。
1.5、H7系統(tǒng)架構(gòu)
摘自:STM32H7xx參考手冊(cè)_V3(中文版).pdf 2.1小節(jié)
H7 系統(tǒng)架構(gòu):
H7 系列的系統(tǒng)架構(gòu)包括主系統(tǒng)架構(gòu)、AXI 總線矩陣、兩個(gè) AHB 總線矩陣(D2 域和 D3 域)、總線橋以及域間總線。
主系統(tǒng)架構(gòu):
-
AXI 總線矩陣:
- 提供高性能的 AXI 總線連接,用于連接主要外設(shè)和總線主控制器。
-
AHB 總線矩陣(D2 域和 D3 域):
- 包括兩個(gè)獨(dú)立的 AHB 總線矩陣,分別是 D2 域和 D3 域,用于連接不同的外設(shè)和 DMA 控制器。
-
總線橋:
- 提供連接 AXI 總線和 AHB 總線之間的橋梁,用于實(shí)現(xiàn)不同總線之間的數(shù)據(jù)傳輸。
-
域間總線:
- 提供不同域之間的通信橋梁,用于在不同域之間傳輸數(shù)據(jù)。
總線主設(shè)備:
-
AHB 總線主設(shè)備:
- 用于連接到 AHB 總線的主設(shè)備,包括連接到 D2 和 D3 域的外設(shè)和 DMA 控制器。
-
AXI 總線主設(shè)備:
- 用于連接到 AXI 總線的主設(shè)備,包括連接到主 AXI 總線矩陣的外設(shè)和 DMA 控制器。
總線從設(shè)備:
-
AHB 總線從設(shè)備:
- 連接到 AHB 總線的從設(shè)備,包括連接到 D2 和 D3 域的外設(shè)和 DMA 控制器。
-
AXI 總線從設(shè)備:
- 連接到 AXI 總線的從設(shè)備,包括連接到主 AXI 總線矩陣的外設(shè)和 DMA 控制器。
ITCM 和 DTCM:
-
ITCM(指令 Tightly-Coupled Memory):
- 用于存放程序指令,支持 CPU 以時(shí)鐘速度訪問。
-
DTCM(數(shù)據(jù) Tightly-Coupled Memory):
- 用于存放數(shù)據(jù),支持 DMA 操作。
總線時(shí)鐘頻率:
- AHB1/2/3/4 時(shí)鐘頻率: 最大為 240MHz。
- APB1/2/3/4 時(shí)鐘頻率: 最大為 120MHz。
H7 系列的系統(tǒng)架構(gòu)提供了高性能的總線結(jié)構(gòu),支持多領(lǐng)域的并行數(shù)據(jù)傳輸,適用于處理復(fù)雜且高性能要求的應(yīng)用。
總線主設(shè)備與總線從設(shè)備互連
在嵌入式系統(tǒng)中,總線主設(shè)備與總線從設(shè)備的互連是通過總線協(xié)議來實(shí)現(xiàn)的。主要的總線協(xié)議包括 AHB(Advanced High-performance Bus)、APB(Advanced Peripheral Bus)、AXI(Advanced eXtensible Interface)等。以下是它們的簡(jiǎn)要說明:
-
AHB(Advanced High-performance Bus):
- 總線特性: 提供高性能的總線傳輸,支持并行傳輸。
- 主設(shè)備: AHB 總線上的總線主控制器和主設(shè)備。
- 從設(shè)備: 連接到 AHB 總線的外設(shè)和 DMA 控制器。
-
APB(Advanced Peripheral Bus):
- 總線特性: 用于連接外設(shè),相對(duì)于 AHB 總線速度較低。
- 主設(shè)備: AHB-APB 橋接控制器和 AHB 主設(shè)備。
- 從設(shè)備: 連接到 APB 總線的外設(shè)。
-
AXI(Advanced eXtensible Interface):
- 總線特性: 高度靈活且支持多通道、高性能的總線協(xié)議。
- 主設(shè)備: AXI 總線上的總線主控制器和主設(shè)備。
- 從設(shè)備: 連接到 AXI 總線的外設(shè)和 DMA 控制器。
總線主設(shè)備和總線從設(shè)備通過相應(yīng)的總線協(xié)議進(jìn)行通信。連接過程中,總線主控制器負(fù)責(zé)發(fā)起總線事務(wù),選擇通信的從設(shè)備,并將數(shù)據(jù)傳輸?shù)交驈膹脑O(shè)備讀取。通信的具體協(xié)議規(guī)定了數(shù)據(jù)傳輸?shù)母袷?、時(shí)序和控制信號(hào)。
在總線互連中,總線主設(shè)備通過總線協(xié)議的特定信號(hào)(例如,地址線、數(shù)據(jù)線、控制線等)與總線從設(shè)備進(jìn)行數(shù)據(jù)傳輸。這種互連方式是基于硬件設(shè)計(jì)的總線架構(gòu),確保系統(tǒng)中的各個(gè)部件可以有效地協(xié)同工作。
二、STM32的尋址范圍?
STM32的尋址范圍是從0x00000000到0xFFFFFFFF,即32位尋址范圍,對(duì)應(yīng)4GB的內(nèi)存空間。這個(gè)范圍包括了Flash存儲(chǔ)器、SRAM(靜態(tài)隨機(jī)存儲(chǔ)器)、外設(shè)寄存器等。在這個(gè)范圍內(nèi),不同的地址區(qū)域用于存放程序代碼、數(shù)據(jù)、系統(tǒng)寄存器等。
以下是一些常見的STM32地址范圍:
- Flash 存儲(chǔ)器: 存放程序代碼,通常從0x08000000開始。
- SRAM(靜態(tài)隨機(jī)存儲(chǔ)器): 存放變量和堆棧等數(shù)據(jù),其起始地址通常為0x20000000。
- 外設(shè)寄存器: 包括與外設(shè)通信的寄存器,地址范圍根據(jù)不同的外設(shè)而變化。
- System Control Block(系統(tǒng)控制塊): 包含一些系統(tǒng)級(jí)別的控制寄存器,位于地址0xE000E000區(qū)域。
這個(gè)尋址范圍是非常大的,但實(shí)際上,不同的STM32型號(hào)可能只使用其中的一部分,具體的使用范圍和映射關(guān)系需要查看芯片的數(shù)據(jù)手冊(cè)。
在通常的32位單片機(jī)中,地址線的數(shù)量通常是32根,而每根地址線上有兩種狀態(tài)(高電平或低電平),因此總共有2^32個(gè)不同的地址。
-
32位的單片機(jī)有32根地址線: 即使每根地址線有兩種狀態(tài)(0或1,低電平或高電平),總地址數(shù)量為2^32。
-
單片機(jī)內(nèi)存地址訪問的存儲(chǔ)單元按字節(jié)編址: 這是正確的,每個(gè)地址代表一個(gè)字節(jié)。即,每個(gè)地址可以存儲(chǔ)8位二進(jìn)制數(shù)據(jù)(一個(gè)字節(jié))。
-
地址線根數(shù)和地址編號(hào):
- 當(dāng)有1根地址線時(shí),有2個(gè)地址編號(hào)(0和1)。
- 當(dāng)有2根地址線時(shí),有4個(gè)地址編號(hào)(00、01、10、11)。
- 當(dāng)有3根地址線時(shí),有8個(gè)地址編號(hào)(000、001、010、011、100、101、110、111)。
- 對(duì)于n根地址線,有2^n個(gè)地址編號(hào)。
這種二進(jìn)制的地址編碼方式允許單片機(jī)訪問非常大的內(nèi)存范圍,但實(shí)際上,芯片的內(nèi)存容量通常受限于其硬件設(shè)計(jì)和制造技術(shù)。
三、存儲(chǔ)器映射
存儲(chǔ)器映射(Memory Mapping)是指將計(jì)算機(jī)中的存儲(chǔ)器(包括RAM、ROM、寄存器等)的地址空間分配給不同的硬件或軟件組件,使其能夠被訪問和操作。存儲(chǔ)器映射創(chuàng)建了一個(gè)虛擬的地址空間,通過該空間,處理器和其他外設(shè)可以有效地進(jìn)行通信。
以下是存儲(chǔ)器映射的一些關(guān)鍵概念:
-
地址空間: 存儲(chǔ)器映射創(chuàng)建了一個(gè)地址空間,其中包含了所有可尋址的存儲(chǔ)單元。這個(gè)地址空間可以被劃分成若干區(qū)域,每個(gè)區(qū)域?qū)?yīng)一個(gè)設(shè)備或組件。
-
地址映射: 地址映射將邏輯地址(程序中使用的地址)映射到物理地址(實(shí)際的硬件地址)。這樣,程序可以使用邏輯地址來訪問存儲(chǔ)器,而底層硬件負(fù)責(zé)將邏輯地址映射到實(shí)際的存儲(chǔ)器位置。
-
內(nèi)存映射 I/O: 存儲(chǔ)器映射技術(shù)允許將某些設(shè)備的寄存器或控制器映射到內(nèi)存地址空間,以便通過讀寫內(nèi)存的方式來訪問這些設(shè)備。這被稱為內(nèi)存映射 I/O。
-
外設(shè)寄存器映射: 外設(shè)(如串口、定時(shí)器、GPIO等)通常有相關(guān)的寄存器,這些寄存器被映射到存儲(chǔ)器地址空間中的特定地址。通過寫入或讀取這些地址,可以配置和控制外設(shè)的行為。
-
物理地址 vs. 邏輯地址: 物理地址是硬件實(shí)際使用的地址,而邏輯地址是程序員在編寫軟件時(shí)使用的地址。存儲(chǔ)器映射提供了一個(gè)橋梁,使得邏輯地址能夠被正確映射到物理地址上。
存儲(chǔ)器映射的靈活性使得計(jì)算機(jī)系統(tǒng)可以更方便地管理和訪問各種硬件和外設(shè),提高了系統(tǒng)的可擴(kuò)展性和可編程性。
存儲(chǔ)器映射是指將實(shí)際的存儲(chǔ)器分配到特定的地址范圍,從而方便處理器訪問和控制。
對(duì)于星憶XM8A51216芯片,有19根地址線(A0到A18)和16根數(shù)據(jù)線(D0到D15)。地址線的數(shù)量決定了總的地址空間大小,16根數(shù)據(jù)線表示每個(gè)地址單元可以傳輸16位數(shù)據(jù)。
根據(jù)地址范圍和映射描述,我們可以分析如下:
-
映射1:0 - 512K
- 地址范圍:0x00000 - 0x7FFFF
- 數(shù)據(jù)線:D0-D15
- 這是標(biāo)準(zhǔn)的0-512K的映射,從地址0開始。
-
映射2:1 – 512K + 1
- 地址范圍:0x00001 - 0x80000
- 數(shù)據(jù)線:D0-D15
- 這是將映射1中的地址整體向上偏移1。
-
映射3:100K – 612K
- 地址范圍:0x19000 - 0x96FFF
- 數(shù)據(jù)線:D0-D15
- 這是將映射1中的地址整體向上偏移100K。
-
映射4:512K – 1024K
- 地址范圍:0x80000 - 0xFFFFF
- 數(shù)據(jù)線:D0-D15
- 這是將映射1中的地址整體向上偏移512K,達(dá)到了512K到1024K的范圍。
這些映射可以根據(jù)系統(tǒng)需求和硬件設(shè)計(jì)來調(diào)整,但需要確保不同映射之間沒有重疊。
存儲(chǔ)器功能劃分(F1為例)
對(duì)于STM32F1系列,ST將4GB的地址空間劃分為8個(gè)塊,每個(gè)塊有不同的功能和地址范圍。以下是各存儲(chǔ)塊的功能和地址范圍(以STM32F1為例):
-
Block 0: Code(FLASH)
- 功能: 存儲(chǔ)主程序代碼(Flash存儲(chǔ)器)
- 地址范圍: 0x0000 0000 ~ 0x1FFF FFFF(512MB)
-
Block 1: SRAM
- 功能: 隨機(jī)存儲(chǔ)器,用于存儲(chǔ)變量和堆棧
- 地址范圍: 0x2000 0000 ~ 0x3FFF FFFF(512MB)
-
Block 2: 片上外設(shè)
- 功能: 存儲(chǔ)一些與片上外設(shè)相關(guān)的寄存器和數(shù)據(jù)
- 地址范圍: 0x4000 0000 ~ 0x5FFF FFFF(512MB)
-
Block 3: FSMC Bank1&2
- 功能: 存儲(chǔ)FSMC(外部存儲(chǔ)控制器) Bank1和Bank2的外部設(shè)備映射區(qū)域
- 地址范圍: 0x6000 0000 ~ 0x7FFF FFFF(512MB)
-
Block 4: FSMC Bank3&4
- 功能: 存儲(chǔ)FSMC Bank3和Bank4的外部設(shè)備映射區(qū)域
- 地址范圍: 0x8000 0000 ~ 0x9FFF FFFF(512MB)
-
Block 5: FSMC寄存器
- 功能: 存儲(chǔ)FSMC控制寄存器等
- 地址范圍: 0xA000 0000 ~ 0xBFFF FFFF(512MB)
-
Block 6: 沒用到
- 功能: 該區(qū)域沒有被使用
-
Block 7: Cortex M3內(nèi)部外設(shè)
- 功能: 存儲(chǔ)Cortex M3內(nèi)核的內(nèi)部外設(shè)寄存器
- 地址范圍: 0xE000 0000 ~ 0xFFFF FFFF(512MB)
這樣的劃分使得不同的存儲(chǔ)塊用于不同的目的,有效地利用了整個(gè)32位地址空間。
對(duì)于 Block 0(FLASH),這里具體的功能劃分如下:
-
FLASH或系統(tǒng)存儲(chǔ)器別名區(qū)
- 功能: FLASH存儲(chǔ)器或系統(tǒng)存儲(chǔ)器的別名區(qū)域
- 地址范圍: 0x0000 0000 ~ 0x0007 FFFF(512KB)
-
保留
- 地址范圍: 0x0008 0000 ~ 0x07FF FFFF
-
用戶FLASH,用于存儲(chǔ)用戶代碼
- 功能: 用于存儲(chǔ)用戶程序代碼
- 地址范圍: 0x0800 0000 ~ 0x0807 FFFF(512KB)
-
保留
- 地址范圍: 0x0808 0000 ~ 0x1FFF EFFF
-
系統(tǒng)存儲(chǔ)器,存儲(chǔ)出廠Bootloader
- 功能: 存儲(chǔ)出廠Bootloader等系統(tǒng)相關(guān)信息
- 地址范圍: 0x1FFF F000 ~ 0X1FFF F7FF(2KB)
-
選項(xiàng)字節(jié),配置讀保護(hù)等
- 功能: 存儲(chǔ)選項(xiàng)字節(jié),用于配置讀保護(hù)等選項(xiàng)
- 地址范圍: 0X1FFF F800 ~ 0X1FFF F80F(16B)
-
保留
- 地址范圍: 0X1FFF F810 ~ 0X1FFF FFFF
這樣的劃分充分利用了 Flash 存儲(chǔ)器的不同區(qū)域,包括用戶代碼區(qū)、系統(tǒng)存儲(chǔ)器區(qū)、選項(xiàng)字節(jié)等,以滿足不同的需求和配置。
對(duì)于 Block 1(SRAM),功能劃分如下:
-
SRAM
- 功能: 靜態(tài)隨機(jī)存儲(chǔ)器,用于存儲(chǔ)變量、數(shù)據(jù)等
- 地址范圍: 0X2000 0000 ~ 0x2000 FFFF(64KB)
-
保留
- 地址范圍: 0X2001 0000 ~ 0x3FFF FFFF
這樣的劃分使得 Block 1 主要用于存儲(chǔ)數(shù)據(jù),例如變量、緩沖區(qū)等,提供了一定的存儲(chǔ)空間供程序運(yùn)行使用。
對(duì)于 Block 2(外設(shè)),功能劃分如下:
-
APB1總線外設(shè)
- 功能: 連接到 APB1 總線的外設(shè)
- 地址范圍: 0X4000 0000 ~ 0x4000 77FF
-
保留
- 地址范圍: 0X4000 7800 ~ 0x4000 FFFF
-
APB2總線外設(shè)
- 功能: 連接到 APB2 總線的外設(shè)
- 地址范圍: 0X4001 0000 ~ 0x4000 3FFF
-
保留
- 地址范圍: 0X4001 4000 ~ 0x4001 7FFF
-
AHB總線外設(shè)
- 功能: 連接到 AHB 總線的外設(shè)
- 地址范圍: 0X4001 8000 ~ 0x4002 33FF
-
保留
- 地址范圍: 0X4002 3400 ~ 0x5FFF FFFF
這樣的劃分使得 Block 2 主要用于存儲(chǔ)外設(shè)寄存器的地址,可以通過這些地址訪問外設(shè)的寄存器來進(jìn)行配置和控制。
STM32F1存儲(chǔ)器映射圖
參考資料:STM32F103ZET6.pdf(英文版數(shù)據(jù)手冊(cè))
數(shù)據(jù)手冊(cè):4 Memory mapping \ Figure 9. Memory map
路徑:戰(zhàn)艦 V4\資料\7,硬件資料\STM32F103ZET6.pdf
四、寄存器映射
參考資料:STM32F10xxx參考手冊(cè)_V10(中文版).pdf
路徑:戰(zhàn)艦 V4\資料\8,STM32參考資料\STM32F10xxx參考手冊(cè)_V10(中文版).pdf
寄存器映射是指將每個(gè)寄存器分配一個(gè)唯一的地址,以便在程序中通過這個(gè)地址來訪問寄存器。在嵌入式系統(tǒng)中,寄存器通常用于配置和控制外設(shè)、存儲(chǔ)狀態(tài)信息等。通過寄存器映射,程序可以通過讀寫特定的內(nèi)存地址來實(shí)現(xiàn)對(duì)寄存器的訪問。
在微控制器或微處理器的設(shè)計(jì)中,不同的寄存器用于不同的目的,例如配置、控制、狀態(tài)檢測(cè)等。這些寄存器的地址被定義為特定的數(shù)值,程序可以通過這些地址與寄存器進(jìn)行交互。對(duì)于每個(gè)寄存器,通常都會(huì)有相應(yīng)的位域,用于表示不同的配置選項(xiàng)、狀態(tài)標(biāo)志等信息。
以下是一個(gè)簡(jiǎn)化的例子,展示了寄存器映射的一部分:
地址: 寄存器
0x40000000: 控制寄存器
0x40000004: 數(shù)據(jù)寄存器
0x40000008: 狀態(tài)寄存器
0x4000000C: 配置寄存器
...
通過訪問這些地址,程序可以讀取或?qū)懭胂鄳?yīng)的寄存器,從而實(shí)現(xiàn)對(duì)硬件的配置和控制。在編程時(shí),開發(fā)者通常會(huì)使用硬件手冊(cè)或數(shù)據(jù)表來查找寄存器的地址和相關(guān)的位域信息。
寄存器基礎(chǔ)知識(shí)
STM32寄存器分類
STM32寄存器主要可以分為兩大類:內(nèi)核寄存器和外設(shè)寄存器。
內(nèi)核寄存器:
-
內(nèi)核相關(guān)寄存器: 包括 R0~R15 寄存器,xPSR 寄存器,以及一些特殊功能寄存器。這些寄存器用于處理器的基本操作和狀態(tài)管理。
-
中斷控制寄存器: 包括 NVIC(Nested Vectored Interrupt Controller)和 SCB(System Control Block)相關(guān)寄存器。在 NVIC 中,有一系列寄存器用于控制中斷的使能、優(yōu)先級(jí)等,如 ISER(Interrupt Set Enable Register)、ICER(Interrupt Clear Enable Register)、ISPR(Interrupt Set Pending Register)等。SCB 包含一些系統(tǒng)級(jí)別的控制寄存器,如 VTOR(Vector Table Offset Register)、AIRCR(Application Interrupt and Reset Control Register)等。
-
SysTick 寄存器: 包括 CTRL(Control Register)、LOAD(Reload Value Register)、VAL(Current Value Register)和 CALIB(Calibration Value Register)四個(gè)寄存器。SysTick 是一個(gè)用于實(shí)現(xiàn)系統(tǒng)時(shí)鐘節(jié)拍的定時(shí)器。
-
內(nèi)存保護(hù)寄存器: 這些寄存器用于配置存儲(chǔ)器的保護(hù)機(jī)制,但在一些 STM32 系列中可能并不包含。
-
調(diào)試系統(tǒng)寄存器: 包括 ETM(Embedded Trace Macrocell)、ITM(Instrumentation Trace Macrocell)、DWT(Data Watchpoint and Trace)等相關(guān)寄存器。這些寄存器用于支持調(diào)試和跟蹤功能。
外設(shè)寄存器:
外設(shè)寄存器包括 STM32 上各種外設(shè)的配置和控制寄存器。這些外設(shè)寄存器用于配置和控制與 MCU 相連接的外圍設(shè)備,如 GPIO、UART、I2C、SPI、TIM(定時(shí)器)、DMA、ADC、DAC、RTC(實(shí)時(shí)時(shí)鐘)、I/WWDG(看門狗)、PWR(電源管理)、CAN(控制器局域網(wǎng))、USB(通用串行總線)等。每個(gè)外設(shè)通常都有一組寄存器用于控制其行為、配置參數(shù)等。
寄存器映射(F1為例)
在 STM32 系列中,每個(gè)寄存器都有其特定的地址,該地址通常采用寄存器映射的方式進(jìn)行命名。給定一個(gè)例子,如寄存器地址 0x4001080C
和寄存器名字 GPIOA_ODR
:
-
寄存器地址:
0x4001080C
-
寄存器名字:
GPIOA_ODR
這表示該寄存器的物理地址是 0x4001080C
。在 STM32 系列中,寄存器名字通常包含外設(shè)名和功能描述,以便更好地理解和識(shí)別該寄存器的用途。在這個(gè)例子中,GPIOA_ODR
可能是 GPIO(通用輸入/輸出)模塊中的一個(gè)輸出數(shù)據(jù)寄存器(Output Data Register),用于控制 GPIOA 端口上的輸出狀態(tài)。
通常,具體的寄存器映射和寄存器名字的含義可以在 STM32 的參考手冊(cè)或數(shù)據(jù)手冊(cè)中找到,這些手冊(cè)由芯片制造商提供,詳細(xì)描述了芯片的內(nèi)部結(jié)構(gòu)、外設(shè)功能和寄存器的使用方法。
寄存器描述解讀
參考資料:STM32F10xxx參考手冊(cè)_V10(中文版).pdf
當(dāng)閱讀芯片手冊(cè)或數(shù)據(jù)手冊(cè)時(shí),寄存器描述通常包含以下幾個(gè)重要部分:
-
寄存器名字: 這是寄存器的標(biāo)識(shí)符,用于表示特定功能或外設(shè)的某個(gè)寄存器。
-
偏移量及復(fù)位值: 描述了該寄存器在整個(gè)寄存器映射中的偏移地址,通常給出了復(fù)位時(shí)寄存器的默認(rèn)值。
-
寄存器位表: 列出了該寄存器的所有位,每個(gè)位對(duì)應(yīng)一個(gè)特定的功能或配置選項(xiàng)。表格中可能包括位的名稱、位的偏移量、位寬度等信息。
-
位功能描述: 對(duì)每個(gè)位進(jìn)行詳細(xì)的描述,解釋了該位的作用、影響以及如何配置或使用。這是理解寄存器功能的關(guān)鍵部分。
讓我們以具體的例子解讀一個(gè)寄存器描述:
GPIOA_ODR (GPIOA output data register)
Offset: 0x14 Reset value: 0x0000 0000
Bits | 31:16 | 15:0 |
|-------|-------|
ODR | 0 | PortA |
|-------|-------|
在這個(gè)例子中:
-
寄存器名字:
GPIOA_ODR
表示 GPIOA 端口的輸出數(shù)據(jù)寄存器。 -
偏移量及復(fù)位值: 該寄存器的偏移量為
0x14
,復(fù)位時(shí)的默認(rèn)值為0x0000 0000
。 -
寄存器位表: 該寄存器只有一個(gè)位,即
ODR
,位寬度為 16 位。該位控制 GPIOA 端口的輸出。 -
位功能描述: 該位的描述可能是 “PortA”,說明這個(gè)位用于控制 GPIOA 端口的輸出狀態(tài)。
這是一個(gè)簡(jiǎn)化的例子,實(shí)際的寄存器描述可能更加復(fù)雜,包含更多的位和功能描述。理解這些寄存器描述對(duì)于正確配置和使用芯片的外設(shè)非常重要。
寄存器映射舉例
在嵌入式開發(fā)中,直接操作寄存器地址是常見的做法。通過定義寄存器的地址,并使用指針訪問這個(gè)地址,可以直接對(duì)寄存器進(jìn)行讀寫操作。這種方式通常用于對(duì)寄存器位進(jìn)行精確控制,例如配置 GPIO 的輸入輸出狀態(tài)。
下面是一個(gè)簡(jiǎn)單的示例,演示如何通過直接操作寄存器地址或使用宏定義的方式控制 GPIOA 的輸出狀態(tài):
// 直接操作寄存器地址
*(unsigned int *)(0x4001080C) = 0xFFFF; // 設(shè)置 GPIOA_ODR 寄存器的值為 0xFFFF
// 使用宏定義
#define GPIOA_ODR (*(volatile unsigned int *)(0x4001080C)) // 定義 GPIOA_ODR 的宏
GPIOA_ODR = 0xFFFF; // 設(shè)置 GPIOA_ODR 寄存器的值為 0xFFFF
在這個(gè)例子中,0x4001080C
是 GPIOA_ODR 寄存器的地址,volatile
關(guān)鍵字用于告訴編譯器該變量是易變的,可能會(huì)被外部因素更改,因此編譯器不會(huì)進(jìn)行一些優(yōu)化,確保每次都從內(nèi)存中讀取值。
使用宏定義的方式有助于提高代碼的可讀性和維護(hù)性。通過定義宏,可以將寄存器的地址封裝在宏中,給這個(gè)地址起一個(gè)易于理解的名字,方便在代碼中使用。這也是嵌入式開發(fā)中常見的一種編程風(fēng)格。
寄存器地址計(jì)算
寄存器地址計(jì)算的思路是將寄存器的地址拆分為三個(gè)部分,這樣的設(shè)計(jì)有助于更靈活地應(yīng)對(duì)不同的外設(shè)、總線等。具體而言,計(jì)算公式如下:
寄存器地址 = BUS_BASE_ADDR + PERIPH_OFFSET + REG_OFFSET \text{寄存器地址} = \text{BUS\_BASE\_ADDR} + \text{PERIPH\_OFFSET} + \text{REG\_OFFSET} 寄存器地址=BUS_BASE_ADDR+PERIPH_OFFSET+REG_OFFSET
其中:
- BUS_BASE_ADDR:總線基地址,代表總線的起始地址。
- PERIPH_OFFSET:外設(shè)基于總線基地址的偏移量,表示特定外設(shè)相對(duì)于總線的位置。
- REG_OFFSET:寄存器相對(duì)外設(shè)基地址的偏移量,表示特定寄存器相對(duì)于外設(shè)的位置。
這種寄存器地址計(jì)算的方法允許我們通過更改這三個(gè)部分的數(shù)值,輕松地適應(yīng)不同的硬件配置和外設(shè)分布。在嵌入式系統(tǒng)中,通常由芯片廠商提供相應(yīng)的寄存器映射表和基地址信息,開發(fā)人員可以據(jù)此進(jìn)行地址計(jì)算和寄存器操作。
參考資料:STM32F10xxx參考手冊(cè)_V10(中文版).pdf 2.3小節(jié)
GPIOA_ODR寄存器地址計(jì)算過程:
你的計(jì)算是正確的,下面將每一步詳細(xì)講解:
-
獲取外設(shè)掛在哪個(gè)總線上面?查系統(tǒng)結(jié)構(gòu)圖得知 GPIOA 外設(shè)掛在 APB2 總線上。
-
獲取總線基地址,APB2 總線基地址為 0 X 40010000 0X4001 0000 0X40010000。
-
獲取外設(shè)地址偏移量,GPIOA 相對(duì)于 APB2 總線的偏移量是 0 X 800 0X800 0X800。
-
獲取寄存器地址偏移量,ODR 相對(duì)于 GPIOA 外設(shè)的基地址的偏移量是 0 X 0 C 0X0C 0X0C。
現(xiàn)在,可以使用寄存器地址計(jì)算公式計(jì)算 GPIOA_ODR 的地址:
GPIOA_ODR = BUS_BASE_ADDR + PERIPH_OFFSET + REG_OFFSET \text{GPIOA\_ODR} = \text{BUS\_BASE\_ADDR} + \text{PERIPH\_OFFSET} + \text{REG\_OFFSET} GPIOA_ODR=BUS_BASE_ADDR+PERIPH_OFFSET+REG_OFFSET
將具體數(shù)值代入:
GPIOA_ODR = 0 X 40010000 + 0 X 800 + 0 X 0 C = 0 X 4001080 C \text{GPIOA\_ODR} = 0X4001 0000 + 0X800 + 0X0C = 0X4001 080C GPIOA_ODR=0X40010000+0X800+0X0C=0X4001080C
因此,GPIOA_ODR 寄存器的地址是
0
X
4001080
C
0X4001 080C
0X4001080C。
0
X
40013804
0X40013804
0X40013804
使用結(jié)構(gòu)體,可以很方便的完成對(duì)寄存器的映射:
使用結(jié)構(gòu)體進(jìn)行寄存器映射,可以更方便地訪問和操作寄存器,提高代碼的可讀性和可維護(hù)性。定義一個(gè)結(jié)構(gòu)體 GPIO_TypeDef
包含了 GPIO 相關(guān)寄存器的成員,然后使用結(jié)構(gòu)體指針來訪問寄存器,是一種常見的做法。
在上述例子中:
typedef struct
{
__IO uint32_t CRL;
__IO uint32_t CRH;
__IO uint32_t IDR;
__IO uint32_t ODR;
__IO uint32_t BSRR;
__IO uint32_t BRR;
__IO uint32_t LCKR;
} GPIO_TypeDef;
#define GPIOA_BASE 0X4001 0800
#define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)
// 訪問 GPIOA 的 ODR 寄存器
GPIOA->ODR = 0XFFFF;
這樣的代碼更加清晰和易于維護(hù)。通過使用結(jié)構(gòu)體,你可以直觀地理解每個(gè)寄存器的作用,也方便了對(duì)硬件的配置和操作。
stm32f103xe.h主要組成部分
stm32f103xe.h
路徑:戰(zhàn)艦 V4\資料\4,程序源碼\2,標(biāo)準(zhǔn)例程-HAL庫(kù)版本\實(shí)驗(yàn)1 跑馬燈實(shí)驗(yàn)\stm32f103xe.h文章來源:http://www.zghlxwxcb.cn/news/detail-831482.html
跳轉(zhuǎn)到此處
文章來源地址http://www.zghlxwxcb.cn/news/detail-831482.html
到了這里,關(guān)于【正點(diǎn)原子STM32】STM32基礎(chǔ)知識(shí)(F1F4F7H7 STM32系統(tǒng)框架、尋址范圍、存儲(chǔ)器映射的存儲(chǔ)器功能劃分、寄存器映射)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!