STM32系統(tǒng)構(gòu)架
當(dāng)你拿到一款芯片后,怎樣可以快速了解到它具有哪些功能?了解單片機(jī)的系統(tǒng)架構(gòu)是使用款芯片的基礎(chǔ),這些信息在芯片手冊上都會有詳細(xì)的說明,并且它們會被安排在最前面的章節(jié),目的就是讓用戶最開始就能夠關(guān)注到該款芯片具有哪些功能,特點(diǎn)。
STM32F103系統(tǒng)結(jié)構(gòu)
從上圖我們可以了解到STM32F103系列的主要系統(tǒng)組成單元:
CPU核:使用ARM Cortex-M3內(nèi)核;
存儲器:
STM32F103系列微控制器采用經(jīng)典的哈佛架構(gòu),程序存儲和數(shù)據(jù)存儲采用獨(dú)立的存儲器空間;
ICode:指令代碼,Flash存儲器用于存儲程序;
DCode:數(shù)據(jù)代碼,SRAM用于存儲數(shù)據(jù);
外設(shè):
GPIO;
定時器;
ADC;
通信接口:SPI、I2C、USART;
其他接口:USB、CAN、RTC、DMA、SDIO、FSMC等;
總線架構(gòu):
AHB總線:高速總線,連接核心與部分外設(shè)。
APB1/APB2總線:連接外設(shè),時鐘較AHB低。
芯片存儲器映射
從上面的系統(tǒng)結(jié)構(gòu)圖中我們很容易就能看出內(nèi)核與存儲單元的關(guān)系,但更多的細(xì)節(jié)芯片手冊上并沒有給出。對于51系列單片機(jī)單片機(jī),因?yàn)槠鋬?nèi)核和存儲單元都比較簡單管理起來也非常容易,但STM32芯片內(nèi)部復(fù)雜程度都比51高幾個數(shù)量級,所以需要對存儲單元有特定的劃分管理,把它稱為存儲器映射,這些知識在51單片機(jī)中是不會涉及的,這一部分內(nèi)容在ARM公司的內(nèi)核手冊上才會有詳細(xì)的講解。我們都知道了STM32F103系列單片機(jī)采用的是的ARM Cortex-M3內(nèi)核,所以要了解這部分知識需要查看Cortex-M3內(nèi)核資料。
上圖是Cortex-M3內(nèi)核資料中對給內(nèi)核芯片預(yù)定義的存儲器映射說明,接下來我們通過STM32F103系列單片機(jī)來逐步學(xué)習(xí)。
STM32單片機(jī)存儲器映射
STM32單片機(jī)存儲空間包含了用于程序代碼和數(shù)據(jù)存儲的系統(tǒng)存儲器區(qū)域,以及用于外設(shè)控制的外設(shè)寄存器區(qū)域。為了能夠直觀而有效地操作這些內(nèi)存資源,STM32采用存儲器映射的方式進(jìn)行內(nèi)存管理。什么是存儲器映射?其基本思想是將不同的內(nèi)存區(qū)域按邏輯功能映射到單片機(jī)的線性地址空間,從而實(shí)現(xiàn)通過訪問地址來操作存儲單元的目的。
要高效地使用STM32單片機(jī),正確理解和使用其存儲器映射方式是必要的。以下詳細(xì)介紹STM32內(nèi)存映射的組成結(jié)構(gòu)、典型布局以及編程方法,幫助初學(xué)者建立對存儲器映射的整體認(rèn)知,為后續(xù)STM32編程開發(fā)奠定基礎(chǔ)。
STM32存儲器映射概述
STM32單片機(jī)的內(nèi)存映射可以分為兩大部分:系統(tǒng)存儲器映射區(qū)域和外設(shè)寄存器映射區(qū)域。
系統(tǒng)存儲器區(qū)域主要包括:
SRAM:用于存放數(shù)據(jù),包括全局變量、堆棧等
Flash:用于存放程序代碼
外設(shè)寄存器區(qū)域則映射了各外設(shè)控制需要的寄存器,通過訪問這些寄存器可以配置外設(shè)工作模式或者獲取其工作狀態(tài)。
整個內(nèi)存映射采用線性連續(xù)的地址從低向高排布,從0x00000000開始,每個內(nèi)存區(qū)按照功能和大小順序映射。STM32內(nèi)存空間的總大小依型號不同有所區(qū)別,較大的可以達(dá)到GB級別。
典型存儲器映射布局
下面我們以STM32F103系列為例,介紹其典型的存儲器映射布局。
Flash memory: 0x08000000 ~ 0x0807FFFF (512KB)
該區(qū)域存儲了程序代碼。起始地址固定為0x08000000,大小根據(jù)芯片容量不同而不同。
SRAM: 0x20000000 ~ 0x2000FFFF (64KB)
該區(qū)域用于存儲運(yùn)行時的數(shù)據(jù),如全局變量、堆棧等。起始地址固定為0x20000000。
外設(shè)寄存器: 0x40000000 ~ 0x4000FFFF
用于映射控制外設(shè)的各種控制寄存器,可以通過訪問這些地址來配置外設(shè)。
AHB外設(shè): 0x40020000 ~ 0x4002FFFF
包含了連接在AHB總線上的外設(shè),如GPIO、DMA等的控制寄存器。
APB1外設(shè): 0x40000000 ~ 0x4000FFFF
包含連接在APB1總線上的外設(shè),如TIMER2、UART2等。
APB2外設(shè): 0x40010000 ~ 0x400FFFFF
包含連接在APB2總線上的外設(shè),如TIMER1、SPI1等。
通過上述內(nèi)存布局可知,STM32內(nèi)存映射有明確的邏輯劃分,不同區(qū)域存放不同的數(shù)據(jù)或寄存器,各外設(shè)也按照所在總線分組排布。用戶可以通過編程手冊找到每個外設(shè)寄存器的確切地址。
基于存儲器映射的外設(shè)寄存器編程
知道了各外設(shè)寄存器的地址映射后,我們就可以通過直接讀寫地址來操作外設(shè),例如:
GPIOA_CRH = 0x40010800; //GPIOA控制寄存器地址
*(volatile uint32_t *)GPIOA_CRH |= 0x01; //配置PA8為輸出模式
但是直接地址操作不夠優(yōu)雅和靈活,更好的方法是利用硬件抽象層(HAL)提供的函數(shù)來訪問寄存器,例如:
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL庫會根據(jù)傳入的GPIO端口和引腳參數(shù),自動計算出對應(yīng)的寄存器地址,從而實(shí)現(xiàn)配置GPIO的功能。
這種基于內(nèi)存映射的編程方式,為用戶屏蔽了底層寄存器操作的細(xì)節(jié),提供了簡單易用的外設(shè)驅(qū)動接口。
存儲器映射工作原理
那么STM32是如何實(shí)現(xiàn)內(nèi)存映射,將不同區(qū)域的存儲單元映射到連續(xù)的線性地址空間中的呢?
主要是通過地址譯碼器根據(jù)地址某些Bit位的組合,對地址進(jìn)行解碼,選通出需要訪問的目標(biāo)存儲區(qū)域的信號,從而將訪問請求導(dǎo)向到正確的目的地。
例如,地址的31-24bit用于區(qū)分代碼區(qū)域和外設(shè)區(qū)域,0-15bit含有偏移量;地址譯碼器根據(jù)地址Bit位組合,將訪問請求定向到與之對應(yīng)的存儲單元上。
內(nèi)存保護(hù)機(jī)制
為了數(shù)據(jù)安全,STM32還增加了存儲區(qū)域?qū)懭氡Wo(hù)機(jī)制。
主要手段是利用內(nèi)存保護(hù)單元(MPU)進(jìn)行存儲區(qū)域訪問控制。MPU可以進(jìn)行區(qū)域劃分,配置每個區(qū)域的訪問權(quán)限,從而實(shí)現(xiàn)對區(qū)域讀寫操作的保護(hù),防止程序異常修改關(guān)鍵存儲內(nèi)容。
結(jié)語
本文介紹了STM32存儲器映射的基本結(jié)構(gòu)、典型布局及相關(guān)原理,并講解了基于存儲器映射訪問外設(shè)寄存器的編程方法。存儲器映射方式抽象并簡化了STM32的龐大內(nèi)存空間,有助于用戶直觀而高效地使用這塊“位帶區(qū)”。希望本文能幫助讀者建立STM32存儲器映射的概念框架,并為后續(xù)編程項(xiàng)目提供基礎(chǔ)理論支持。關(guān)于“位帶”操作,我將會在以后的文章中做單獨(dú)進(jìn)行介紹。使用“位帶”操作可以讓我們的代碼更高效,這也是每一位STM32單片機(jī)開發(fā)者不可或缺的技能。
上一篇:STM32定時器溢出的工作原理是什么?
下一篇:STM32操作系統(tǒng)系列使用C語言的教程
推薦閱讀最新更新時間:2025-05-07 12:44




設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 無人飛行器機(jī)載穩(wěn)定云臺控制系統(tǒng)的設(shè)計
- 匠芯創(chuàng)推出面向具身智能高性能實(shí)時處理器M7000
- 基于HW2181B的航模無線遙控通信系統(tǒng)設(shè)計與實(shí)現(xiàn)
- 應(yīng)對機(jī)器人“四高”,極海推出全球首款雙核Cortex-M52 MCU G32R501
- 非道路移動機(jī)械透射式煙度計研究與實(shí)現(xiàn)
- 基于STM32F103的角磨機(jī)開關(guān)磁阻電機(jī)控制器的設(shè)計
- 基于Cortex-M0智能水溫監(jiān)控系統(tǒng)的優(yōu)化
- STM32 printf重定向(串口輸出)
- 基于STM32H743的仿真轉(zhuǎn)臺控制器設(shè)計
- 2.8寸Miyoo橫板掌機(jī)
- RT7239、5A、18V、650kHz、ACOT同步降壓轉(zhuǎn)換器的典型應(yīng)用
- ESP32多功能開發(fā)板小電視(部分功能已驗(yàn)證)
- 物聯(lián)網(wǎng)AI攝像頭
- LTC3541 的典型應(yīng)用 - 高效率降壓 + VLDO 穩(wěn)壓器
- OP213ESZ-REEL7 多媒體聲音編解碼器耳機(jī)放大器典型應(yīng)用
- C3247489_基于W5100S的PHY收發(fā)器芯片方案驗(yàn)證板
- 使用 FAN9673 180 至 264 VAC 輸入、5kW CCM PFC 控制器的 3 通道交錯 CCM PFC
- FA-20H,AVR射頻芯片振蕩電路及晶體單元選型指南
- LT3756IMSE 94% 效率 30W 白光 LED 前照燈驅(qū)動器的典型應(yīng)用電路
- 電池新國標(biāo),帶來漲價潮?
- 2025Q1全球動力電池戰(zhàn)報:中國6企占近7成份額,三星SDI裝機(jī)量跌17%
- 國產(chǎn)HUD頭部企業(yè)沖刺港股:背靠蔚來、小米、理想,3年?duì)I收翻倍
- 新能源重卡的智能化核心在哪里?
- 大圓柱電池,卷土重來
- 智駕暗戰(zhàn):全民智駕降溫,L3如箭在弦|上海車展觀察
- 蔡司智能玻璃技術(shù):車窗變娛樂屏,12000尼特亮度革新駕駛體驗(yàn)
- 車輛連接的衛(wèi)星之戰(zhàn)
- 兩款熱門 SUV 輔助駕駛大PK,更安全的秘訣是國產(chǎn)芯片?
- 麻省理工學(xué)院開發(fā)出可高速精準(zhǔn)回?fù)舻钠古仪驒C(jī)器人
- ST有獎直播:智能功率開關(guān)在工業(yè)自動化行業(yè)的應(yīng)用
- 答題有好禮 | 是德科技《優(yōu)化物聯(lián)網(wǎng)設(shè)備電池續(xù)航時間的4個技巧》
- 有獎直播 | 是德科技信號完整性測試的演變和更新
- 直播已結(jié)束|貝能國際新型玻璃破碎檢測方案
- Microchip有獎直播:為什么選擇FPGA,而非MCU?
- RT-THREAD 開發(fā)者大會
- 下載有禮:2017年泰克亞太專家大講堂第四期: 如何應(yīng)對新型半導(dǎo)體材料表征測試挑戰(zhàn)
- 直播已結(jié)束【用于光伏逆變器/儲能系統(tǒng)的歐姆龍繼電器 /開關(guān)/連接器解決方案】
- 中國圍棋第一人柯潔“食言”再戰(zhàn)人工智能 對弈中國“星陣”
- 聯(lián)發(fā)科掘金ASIC市場,領(lǐng)先業(yè)界去打造下一個增長新引擎
- 中芯創(chuàng)始人張汝京操刀芯恩集成,與青島大學(xué)攜手解決人才荒
- 中國移動成立國內(nèi)首個5G聯(lián)創(chuàng)中央實(shí)驗(yàn)室
- 華為全球供應(yīng)商已超2000家 這50家核心絕對是核心!
- “五道口守門員”王小川的漫長戰(zhàn)事
- 美國調(diào)查華為 半導(dǎo)體巨頭集體打擺子
- 深挖用戶智造需求,愛普生工業(yè)機(jī)器人持續(xù)發(fā)力
- 工程院院士倪光南:中國要打破Wintel的壟斷
- 李開復(fù)、張亞勤、胡郁“激辯”AI戰(zhàn)略與人才