要學(xué)習(xí)一個MCU,首先要學(xué)習(xí)這個芯片的架構(gòu),比如這個芯片是32bit 的RSIC V還是哈佛架構(gòu),對于STM32F4,它采用ARMv7-ME架構(gòu),是32位處理器,哈佛結(jié)構(gòu),三級流水線,Thumb-2指令集,擴(kuò)展的DSP指令和SIMD指令,單周期MAC,可選的單精度FPU,可選的MPU,可選的Debug$trace接口
可配置的NVIC,可配置的WIC(wakeup interrupt controller)
3套AHB-Lite總線接口
主系統(tǒng)由 32 位多層 AHB 總線矩陣構(gòu)成,可實(shí)現(xiàn)以下部分的互連:
- 八條主控總線:
- Cortex?-M4F 內(nèi)核,Icode總線(I-bus,讀取指令)Dcode總線(D-bus,訪問數(shù)據(jù)),System總線(S-bus,內(nèi)核系統(tǒng)總線)
- DMA1 存儲器總線
- DMA2 存儲器總線
- DMA2 外設(shè)總線
- 以太網(wǎng) DMA 總線
- USB OTG HS DMA 總線
- 七條被控總線:
- 內(nèi)部 Flash ICode 總線
- 內(nèi)部 Flash DCode 總線
- 主要內(nèi)部 SRAM1 (112 KB)
- 輔助內(nèi)部 SRAM2 (16 KB)
- 輔助內(nèi)部 SRAM3 (64 KB)(僅適用于 STM32F42xxx 和 STM32F43xxx 器件)
- AHB1 外設(shè)(包括 AHB-APB 總線橋和 APB 外設(shè))
- AHB2 外設(shè)
- FSMC
每次芯片復(fù)位后,所有外設(shè)時鐘都被關(guān)閉(SRAM 和 Flash 接口除外)。使用外設(shè)前,必須 在 RCC_AHBxENR 或 RCC_APBxENR 寄存器中使能其時鐘。
注意:對 APB 寄存器執(zhí)行 16 位或 8 位訪問時,該訪問將轉(zhuǎn)換為 32 位訪問:總線橋?qū)?16 位或 8 位數(shù)據(jù)復(fù)制后提供給 32 位向量。
存儲器組織結(jié)構(gòu)
程序存儲器、數(shù)據(jù)存儲器、寄存器和 I/O 端口排列在同一個順序的 4 GB 地址空間內(nèi)。
各字節(jié)按小端格式在存儲器中編碼。字中編號最低的字節(jié)被視為該字的最低有效字節(jié),而編號最高的字節(jié)被視為最高有效字節(jié)。
可尋址的存儲空間分為 8 個主要塊,每個塊為 512 MB。
嵌入式 SRAM
STM32F405xx/07xx 和 STM32F415xx/17xx 帶有 4 KB 備份 SRAM和 192 KB 系統(tǒng) SRAM。
系統(tǒng) SRAM 可按字節(jié)、半字(16 位)或全字(32 位)訪問。讀寫操作以 CPU 速度執(zhí)行, 且等待周期為 0。系統(tǒng) SRAM 分為三個塊:
映射在地址 0x2000 0000 的 112 KB 和 16 KB 塊,可供所有 AHB 主控總線訪問。
在地址 0x1000 0000 映射的 64 KB 塊,只能供 CPU 通過數(shù)據(jù)總線訪問。
Flash
Flash 接口可管理 CPU 通過 AHB I-Code 和 D-Code 對 Flash 進(jìn)行的訪問。該接口可針對 Flash 執(zhí)行擦除和編程操作,并實(shí)施讀寫保護(hù)機(jī)制。Flash 接口通過指令預(yù)取和緩存機(jī)制加速 代碼執(zhí)行
Flash 具有以下主要特性:
● 對于 STM32F40x 和 STM32F41x,容量高達(dá) 1 MB;
● 128 位寬數(shù)據(jù)讀取
● 字節(jié)、半字、字和雙字?jǐn)?shù)據(jù)寫入
● 扇區(qū)擦除與全部擦除
● 存儲器組織結(jié)構(gòu)
Flash 結(jié)構(gòu)如下:
● 主存儲器塊,分為 4 個 16 KB 扇區(qū)、1 個 64 KB 扇區(qū)和 7 個 128 KB 扇區(qū)
● 系統(tǒng)存儲器,器件在系統(tǒng)存儲器自舉模式下從該存儲器啟動
● 512 字節(jié) OTP(一次性可編程),用于存儲用戶數(shù)據(jù)
OTP 區(qū)域還有 16 個額外字節(jié),用于鎖定對應(yīng)的 OTP 數(shù)據(jù)塊。
● 選項(xiàng)字節(jié),用于配置讀寫保護(hù)、BOR 級別、軟件/硬件看門狗以及器件處 于待機(jī)或停止模式下的復(fù)位。
● 低功耗模式
對比一個建立好的工程文件,對SRAM和ROM的默認(rèn)配置如下
說明STM32F407系列主要用的ROM是4個16KB的扇區(qū),SRAM用的是 112 KB 和 16 KB 的SRAM,同時也可以勾選 0x1000 0000 映射的 64 KB 區(qū)域,但是這一部分只能供CPU通過數(shù)據(jù)訪問。
位段
Cortex?-M4F 存儲器映射包括兩個位段區(qū)域。這些區(qū)域?qū)⒋鎯ζ鲃e名區(qū)域中的每個字映射 到存儲器位段區(qū)域中的相應(yīng)位。在別名區(qū)域?qū)懭胱謺r,相當(dāng)于對位段區(qū)域的目標(biāo)位執(zhí)行讀-修改-寫操作。
在 STM32F4xx 器件中,外設(shè)寄存器和 SRAM 均映射到一個位段區(qū)域,這樣可實(shí)現(xiàn)單個位段的 讀寫操作。這些操作僅適用于 Cortex?-M4F 訪問,對于其它總線主接口(如 DMA)無效。
可通過一個映射公式說明別名區(qū)域中的每個字與位段區(qū)域中各個位之間的對應(yīng)關(guān)系。映射公式為:
bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)
其中:
— bit_word_addr 代表別名區(qū)域中將映射到目標(biāo)位的字的地址
— bit_band_base 代表別名區(qū)域的起始地址
— byte_offset 代表目標(biāo)位所在位段區(qū)域中的字節(jié)編號
— bit_number 代表目標(biāo)位的位位置 (0-7)。
示例
下例說明如何將 SRAM 地址 0x20000300 處字節(jié)的位 2 映射到別名區(qū)域:
0x22006008 = 0x22000000 + (0x30032) + (24)
對地址 0x22006008 執(zhí)行寫操作相當(dāng)于在 SRAM 地址 0x20000300 處字節(jié)的位 2 執(zhí)行讀-修 改-寫操作。
對地址 0x22006008 執(zhí)行讀操作將返回 SRAM 地址 0x20000300 處字節(jié)的位 2 的值(0x01 表示位置位,0x00 表示位復(fù)位)。
自舉配置
存儲器采用固定的存儲器映射,代碼區(qū)域起始地址為 0x0000 0000(通過 ICode/DCode 總 線訪問),而數(shù)據(jù)區(qū)域起始地址為 0x2000 0000(通過系統(tǒng)總線訪問)。Cortex?-M4F CPU 始終通過 ICode 總線獲取復(fù)位向量,這意味著只有代碼區(qū)域(通常為 Flash)可以提供 自舉空間。STM32F4xx 微控制器實(shí)施一種特殊機(jī)制,可以從其它存儲器(如內(nèi)部 SRAM) 進(jìn)行自舉。
在 STM32F4xx 中,可通過 BOOT[1:0] 引腳選擇三種不同的自舉模式
所以,一般情況下,我們板子上配置的都是BOOT0拉低,如果在調(diào)試時,則可以將BOOT0,BOOT1都拉高,以此來降低FLASH的擦寫次數(shù),提高壽命。
但是也要注意,如果器件從 SRAM 自舉,在應(yīng)用程序初始化代碼中,需要使用 NVIC 異常及中斷向量表和偏 移寄存器來重新分配 SRAM 中的向量表。
復(fù)位后,在 SYSCLK 的第四個上升沿鎖存 BOOT 引腳的值。復(fù)位后,用戶可以通過設(shè)置 BOOT1 和 BOOT0 引腳來選擇需要的自舉模式。
BOOT0 為專用引腳,而 BOOT1 則與 GPIO 引腳共用。一旦完成對 BOOT1 的采樣,相應(yīng) GPIO 引腳即進(jìn)入空閑狀態(tài),可用于其它用途。
器件退出待機(jī)模式時,還會對 BOOT 引腳重新采樣。因此,當(dāng)器件處于待機(jī)模式時,這些引 腳必須保持所需的自舉模式配置。這樣的啟動延遲結(jié)束后,CPU 將從地址 0x0000 0000 獲 取棧頂值,然后從始于 0x0000 0004 的自舉存儲器開始執(zhí)行代碼。
嵌入式自舉程序
嵌入式自舉程序模式用于通過以下串行接口重新編程 Flash:
● USART1(PA9/PA10)
● USART3(PB10/11 和 PC10/11)
● CAN2(PB5/13)
● USB OTG FS(PA11/12) 從設(shè)備模式(DFU:器件固件升級)。
USART 外設(shè)以內(nèi)部 16 MHz 振蕩器 (HSI) 頻率運(yùn)行,而 CAN 和 USB OTG FS 則需要相當(dāng) 于 1 MHz 數(shù)倍(4 MHz 到 26 MHz 之間)的外部時鐘 (HSE) 頻率。
嵌入式自舉程序代碼位于系統(tǒng)存儲器中,在芯片生產(chǎn)期間由 ST 編程。
評論
查看更多