版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、 TheInsidersTo TheSTM32uide一個工程師對STM32系列的介紹ARMBased M翻譯:xi_liang 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 前言 很久以前看到這篇文檔,看到里面對 STM32 的介紹,發(fā)現(xiàn)了不少在 STM32 技術(shù)手冊也找不到的答案。正如文檔題目所說的,這可以說是一份 STM32 的技術(shù)資料??吹胶芏嗑W(wǎng)友說學(xué)不會 STM32,其實不難怪,因為 STM32 的內(nèi)容實在是太多了,一個 LED 流水燈也需要了解 Corte
2、x-m3 技術(shù)手冊和 STM32 數(shù)據(jù)手冊的內(nèi)容,還有 Thumb-2 指令集,甚至 Keil 開發(fā)環(huán)境,和下載工具的使用。但和 ARM+linux 相比還是挺容易的。這篇文檔對 Cortex-m3 和 STM32 的介紹淺顯易懂,只有一百多頁沒有太多的廢話,卻介紹了 Cortex-m3 和 STM32 的絕大部分細(xì)節(jié)。于是從 2012-12 月開始我著手翻譯,前后也花了不少時間,終于可以在今天完成了。 這篇文檔主要研究 Cortex-m3 和STM32 的架構(gòu)和實現(xiàn)細(xì)節(jié)。Cortex-m3 技術(shù)手冊里面除了介紹編程相關(guān)內(nèi)容外,可能還介紹了 Cortex-m3 芯片設(shè)計的相關(guān)內(nèi)容,而這里只介紹
3、一些Cortex-m3 的主要特性和軟件編程需要關(guān)注的內(nèi)容。STM32 作為一個基于 Cortex-m3 的處理器,有著 Cortex-m3 的共同特性,同時也有著一些差異,例如中斷優(yōu)先級寄存器,Cortex-m3 定義了 8 位,而STM32 只實現(xiàn)了 4 位。 雖然在 ARM7,ARM9 時代研究匯編有時也很有必要,因為有不少工作需要在啟動時需要用匯編來完成,如代碼從 NOR 搬運到 SDRAM 等。雖然我也有一定的匯編功底,但 Thumb-2 指令集太復(fù)雜了,對于常用的編程來說研究價值并不大。 當(dāng)然你不要期望這篇文章能給你的 STM32 編程水平有很大的提高,這只是作為入門的一篇文檔,如
4、果你已經(jīng)用過 STM32 進行編程,但還對里面的某些架構(gòu)或具體實現(xiàn)細(xì)節(jié)不太清楚,也許這篇文章能給你帶來意外收獲。 2 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 目錄1.簡介81.1 什么是 Cortex?81.2 一起來看看 STM3291.2.1 復(fù)雜性101.2.2 系統(tǒng)安全性111.2.3 代碼安全性111.2.4 軟件開發(fā)111.2.5 STM32 系列112Cortex 概述132.1 ARM 體系結(jié)構(gòu)版本132.2 Cortex 處理器和 Cortex CPU142.3 Cortex CPU142.3.1
5、 流水線142.3.2 編程模型 XPSR152.3.3 CPU 工作模式162.3.4 Thumb-2 指令集172.3.5 存儲器映射182.3.6 非對齊的內(nèi)存訪問192.3.7 位帶192.4 Cortex 處理器222.4.1 總線222.4.2 總線矩陣222.4.3 系統(tǒng)定時器222.4.4 中斷處理232.4.5 嵌套向量中斷控制器 NVIC 操作異常的進入和退出 高級中斷處理模式.1 中斷搶占253 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 www.stm32
6、.2 尾鏈.3 遲來2 NVIC 的配置和使用2.1 異常向量表272.5 電源管理模式312.5.1 進入低功耗模式312.5.2 CoreSight 調(diào)試支持3 指令跟蹤332.6 Cortex 微控制器軟件接口標(biāo)準(zhǔn)343讓它工作363.1 封裝類型和 PCB 封裝363.2 電源363.3 復(fù)位電路373.3.1 基本硬件原理圖373.4 振蕩器383.4.1 外部高速振蕩器383.4.2 外部低速振蕩器383.4.3 時鐘輸出383.4.4 啟動引腳和在線編程393.4.6 調(diào)試端口394.
7、STM32 的系統(tǒng)架構(gòu)404.1 的內(nèi)存布局414.1.1 寄存器地址查閱434.2 最大化性能444.2.1 鎖相環(huán)4 總線配置474.2.2 FLASH 緩沖區(qū)494.2.3 直接內(nèi)存訪問495外設(shè)555.1 通用外設(shè)554 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 5.1.1 通用 IO5 復(fù)用功能5輸出605.1.2 外部中斷605.1.3 ADC6 轉(zhuǎn)換時間和轉(zhuǎn)換組6 模擬看門狗6 基本 ADC 配置655.1.
8、3.4 雙轉(zhuǎn)換模式6.1 注入同步模式和常規(guī)同步模式6 常規(guī)/注入混合同步模式6 快速交叉模式和慢速交叉模式6 交替觸發(fā)模式6 混合常規(guī)同步和交替觸發(fā)模式6 混合注入同步和交替觸發(fā)模式685.1.4 數(shù)字到模擬轉(zhuǎn)換器6 DMA 支持70 轉(zhuǎn)換電壓和轉(zhuǎn)換時間70 噪聲和三角波信號發(fā)生器705.1.5 通用定時器和高級定時器7 通用定時器7.1 捕獲比較單元7.2 捕獲單元7.3 PWM 輸入模式
9、7.4 編碼器接口7.5 輸出比較7.6 PWM 模式7.7 單脈沖模式7 高級定時器7.1 中斷功能765 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 .2 霍爾傳感器接口7 定時器同步7 基本定時器785.1.6 RTC 和備份寄存器785.1.7 備份寄存器和侵入引腳795.1.8 循環(huán)冗余校驗計算單位。795.2 互聯(lián)性805.2.1 SPI805.2.2 內(nèi)部集成音頻
10、I2S 外設(shè)815.2.3 I2C825.2.4 USART835.3 CAN 和 USB 控制器855.3.1 CAN 控制器855.4 USB886低功耗工作896.1 運行模式896.1.1 預(yù)取緩沖器和半周期模式896.2 低功耗模式896.2.1 SLEEP 模式896.2.2 STOP 模式906.3 Standby 模式926.4 備份域功耗926.5 調(diào)試支持927安全特性937.1 復(fù)位控制937.2 電源電壓檢測947.3 時鐘安全系統(tǒng)947.4 看門狗957.4.1 窗口看門狗957.4.2 獨立看門狗976 百為技術(shù)官方網(wǎng)店 http:/baiweijishu.taob
11、技術(shù)支持論壇 7.5 外設(shè)特點987.5.1 GPIO 端口鎖定987.5.2 模擬看門狗987.5.3 中斷插入988內(nèi)存區(qū)域998.1 FLASH 模塊998.1.1 內(nèi)部 FLASH 的安全性和編程998.1.2 擦除與寫入操作1008.1.3 選項字節(jié)100 寫保護10 讀保護10 配置字節(jié)1018.1.4 靈活的靜態(tài)存儲器控制器10 NAND 和 PC 卡10 PC Card1048.1.5 SDIO 接口10 命令和數(shù)據(jù)傳輸10
12、SDIO 外設(shè)10.1 內(nèi)部結(jié)構(gòu)10.2 數(shù)據(jù)交易10.3 可用的文件系統(tǒng)1079開發(fā)工具1089.1 評估工具1089.2 庫和協(xié)議棧1089.3 RTOS10910.結(jié)束注10911.參考書目1097 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 1. 簡 介在過去的六,七年里,微控制器設(shè)計領(lǐng)域里的主要發(fā)展趨勢之一是采用 ARM7 和 ARM9 CPU 作為通用型微控制器。今天,已經(jīng)有范圍廣泛的制造商提供大約240 個基于ARM 的微控制器?,F(xiàn)在,ST 微電子已經(jīng)推出了
13、 STM32,他們的第一個基于新的 ARM Cortex-M3 微控制器內(nèi)核的 微控制器。該控制器在性能和成本,以及低功率操作和硬實時控制方面設(shè)定了新的標(biāo)準(zhǔn)。 1.1 什么是 Cortex?ARM Cortex 系列是新一代的,一個為廣泛的技術(shù)需求提供標(biāo)準(zhǔn)架構(gòu)的處理器。與其他的ARM 處理器不同,Cortex 系列是一個完整的處理器核心,一個標(biāo)準(zhǔn)的 CPU 和系統(tǒng)架構(gòu)。Cortex 系列有三個主要的配置系列:A 為高端應(yīng)用系列,R 為實時應(yīng)用系列,M 為成本敏感和微控制器應(yīng)用系列。STM32 屬于M 配置系列,專為高系統(tǒng)性能與低功耗相結(jié)合設(shè)計的。它有足夠低的成本,足以挑戰(zhàn)傳統(tǒng)的 8 位和 16
14、 位微控制器。 雖然 ARM7 和 ARM9 的CPU 已經(jīng)被成功地集成到標(biāo)準(zhǔn)的微控制器,但它們的結(jié)構(gòu)還是不盡相同的。尤其在異常和中斷處理方面,這個是特別明顯的,因為每一個特定制造商都在設(shè)計 自己的解決方案。Cortex-M3 提供了一個超越了 CPU 的標(biāo)準(zhǔn)的微控制器核心(包括中斷系統(tǒng)的整個心臟,SysTick 定時器,調(diào)試系統(tǒng)和內(nèi)存映射)。 Cortex-M3 的 4Gbyte 地址空間被分成明確定義的區(qū)域:代碼區(qū),SRAM 區(qū),外設(shè)區(qū)和系統(tǒng)外設(shè)區(qū)。與 ARM7 不同的是,Cortex-M3 是一個哈佛結(jié)構(gòu)的處理器,所以有多條總線,允許執(zhí)行并行操作,提高其整體性能。與早期 的 ARM 架構(gòu)
15、不同,Cortex 系列允許未對齊的數(shù)據(jù)訪問。這將確保最有效地利用內(nèi)部 SRAM。Cortex 系列還有一個稱為位帶的方法,支持在兩個 1M byte 的內(nèi)存區(qū)域里進行位設(shè)置和清除。這樣可以有效地訪問位于 SRAM 存儲器的外設(shè)寄存器和標(biāo)志,而不需要一個完整的布爾 處理器。 STM32 的核心是 Cortex-M3 處理器。Cortex M3 處理器是一個標(biāo)準(zhǔn)化的微控制器,包括 32 位CPU,總線結(jié)構(gòu), 嵌套的中斷單元,調(diào)試系統(tǒng)和標(biāo)準(zhǔn)內(nèi) 存布局。 8 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 Cortex-M3 核
16、心的關(guān)鍵部件之一是嵌套向量中斷控制器(NVIC)。NVIC 為所有基于 Cortex的微控制器提供了一個標(biāo)準(zhǔn)的中斷結(jié)構(gòu)和異常中斷處理。NVIC 提供專用的中斷向量多達 240 個中斷源,其中每個中斷源都可以設(shè)置獨立的優(yōu)先級。 NVIC 已被設(shè)計為可以極其快速地處理中斷。所花費的時間從接收到中斷到進入中斷服務(wù)程序的第一行代碼只有 12 個周期。這其中一部分是通過在 CPU 內(nèi)的微代碼的自動堆棧處理實現(xiàn)的。在連續(xù)中斷的情況下,NVIC 使用“尾鏈”的方法,使連續(xù)中斷服務(wù)只有 6 個周期的延遲。在中斷嵌套階段,一個高優(yōu)先級的中斷可以搶占低優(yōu)先級的中斷而不產(chǎn)生任何額外的 CPU 周期。中斷結(jié)構(gòu)還緊密耦
17、合到Cortex-M3 內(nèi)核的低功耗模式內(nèi)。這使得配置 CPU 從一個中斷退出時自動進入一種低功耗模式是可能的。然后核心保持休眠,直到另一個異?;蛑袛嗟牡絹?。 盡管 Cortex-M3 作為一種低成本的核心設(shè)計,但它也還是一個 32 位的 CPU,因此支持兩個操作模式:線程模式和處理程序模式,每種模式可以配置自己的棧。這使得它支持更復(fù) 雜的軟件設(shè)計和更多的實時操作系統(tǒng)。 Cortex 核心還包括一個 24 位自動重裝定時器,可以為RTOS 內(nèi)核提供一個周期性的中斷。ARM7 和 ARM9 CPU 具有兩個指令集(ARM 32 位 Thumb 16 位指令集),Cortex 系列支持 ARM T
18、humb-2 指令集。這種混合 16 位和 32 位的指令,為客戶提供 32 位的 ARM 指令集的性能和 16 位 Thumb 指令集的代碼密度。Thumb-2 指令集是一個豐富的指令集,被設(shè)計作為 C / C + +編譯器的目標(biāo)。這意味著在 Cortex 應(yīng)用程序完全可 以用 C 編碼。 1.2 一起來看看 STM32ST 已經(jīng)有四個 ARM7 和 ARM9 微控制器系列,但 STM32 的性價比有著顯著的提升。批量 1 歐元多一點的價格, STM32 對現(xiàn)有的 16 位微控制器來說是一個嚴(yán)峻的挑戰(zhàn)。在寫作本文的時候,STM32 已經(jīng)發(fā)布了超過 75 個不同的型號。這些被分成四組:CPU
19、時鐘高達 36Mhz 的基本型,CPU 時鐘高達 72MHz 的增強型,增加 USB device 外設(shè)并且運行在時鐘速度為 48MHz 的USB 型,稱為互聯(lián)型的第四組型號已經(jīng)發(fā)布?;ヂ?lián)型增加的先進通信外設(shè)包括以太網(wǎng) MAC 和USB HOST/ OTG 控制器。所有組的型號的引腳和軟件兼容,并且提供 FLASH ROM 容量高達 512K 和64K SRAM。由最初的版本到現(xiàn)在,STM32 已經(jīng)可以擴展到包括更大的 RAM 和 FLASH,以及 更復(fù)雜外設(shè)的設(shè)備。 低密度型設(shè)備;增強型和基本型9 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 www
20、.中密度型設(shè)備;增強型和基本型高密度設(shè)備;增強型和基本型1.2.1 復(fù)雜性乍一看,STM32 外設(shè)集看起來像一個典型的小型微控制器,具有外圍設(shè)備如雙 ADC,通用定時器,I2C,SPI,CAN,USB 和一個實時時鐘等等。不過這些外設(shè)的功能是非常豐富的。例如12 位 ADC,具有一個集成的溫度傳感器和多個轉(zhuǎn)換模式,并且雙 ADC 可以主從組合成ADC 的九種轉(zhuǎn)換模式。同樣地,四個定時器每個有四個捕捉比較單元,每個定時器模塊,也可以與其他定時器模塊組合,構(gòu)建復(fù)雜的定時器陣列。高級定時器能支持更復(fù)雜的電機控制, 有 6 個帶有可編程死區(qū)時間和中斷輸入線的 PWM 輸出,可強
21、制 PWM 信號到一個預(yù)先編程好的 安全狀態(tài)。SPI 外設(shè)有一個 8 位和 16 位硬件 CRC 發(fā)生器用來支持 SD 和MMC 卡接口。 令人驚訝的是,STM32 的小型微控制器還包括多達 12 通道的 DMA 單元。每通道可以用來傳輸 8/16/32 位數(shù)據(jù)到任何內(nèi)存位置的外設(shè)寄存器,或從任何內(nèi)存位置的外設(shè)寄存器接收數(shù)據(jù)。每一個外圍設(shè)備都可以是一個的 DMA 流控制器,根據(jù)需要發(fā)送或接收數(shù)據(jù)。內(nèi)部總線仲裁器和總線矩陣,最大限度地減少了 CPU 的數(shù)據(jù)訪問和 DMA 通道之間的仲裁。這意味著, DMA 單元在微控制器內(nèi)是靈活的,易于使用,真正實現(xiàn)自動化數(shù)據(jù)流的。 STM32 是一款低功耗和高
22、性能的微控制器。它可以以 2V 電壓供電運行在 72MHz,所有功 10 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 能跑起來僅消耗 36mA。結(jié)合 CORTEX 低功耗模式,STM32 待機功耗僅為 2A。一個內(nèi)部 8MHz RC 振蕩器,使得該芯片能夠在外部振蕩器仍然處于啟動的情況下,迅速退出低功耗模式下。 這種快速的進入和退出低功耗模式,進一步降低了整體功耗。 1.2.2 系統(tǒng)安全性在要求更多的處理能力和更先進的外圍設(shè)備的同時,越來越多的現(xiàn)代應(yīng)用程序要求工作 在安全重要的環(huán)境??紤]到這一點,STM32 有很多的硬
23、件特性幫助支持高度集成的應(yīng)用。其中包括一個低功耗電壓檢測器,時鐘安全系統(tǒng)和兩個獨立的看門狗。第一個看門狗是一個窗 口看門狗。這個看門狗,必須在規(guī)定的時間內(nèi)刷新。如果你處理太早,或者太晚,看門狗會 觸發(fā)。第二個看門狗是一個獨立的看門狗,擁有自己的獨立于主系統(tǒng)時鐘的外部振蕩器。進 一步的時鐘安全系統(tǒng)可以檢測到外部主振蕩器的故障,然后從故障安全地返回到內(nèi)部 8MHz RC 振蕩器上。 1.2.3 代碼安全性現(xiàn)代設(shè)計的其他不幸的要求之一是需要代碼的安全性,以防止軟件盜版。這里的 STM32 FLASH 可以通過調(diào)試端口鎖定對 Flash 讀的訪問??梢宰x保護的同時,F(xiàn)lash 存儲器還有寫保護功能,以
24、防止不受信任的代碼從中斷向量表插入。進一步的寫保護功能,可以在剩余FLASH存儲器部分啟用。STM32 還有一個實時時鐘和一個小面積電池供電的 SRAM。此區(qū)域具有防篡改輸入,可以在狀態(tài)變化時觸發(fā)中斷。此外,防篡改的內(nèi)容。 將自動清除電池備份 SRAM 1.2.4 軟件開發(fā)如果你已經(jīng)在使用基于 ARM 的微控制器,有個好消息是,你的開發(fā)工具已經(jīng)支持 Thumb-2 指令集和 Cortex 系列。最壞的情況是需要軟件升級,以獲得必要的支持。 ST 還提供了外設(shè)驅(qū)動程序庫,USB 開發(fā)庫作為一個 ANSI C 庫,源代碼與先前他們公布的 STR7 庫和 STR9 微控制器的庫兼容。這些庫的移植已經(jīng)
25、支持流行的編譯器工具。同樣,許多開源和商業(yè)的RTOS 和中間件(TCP/ IP,文件系統(tǒng)等)可用于 Cortex 系列。在 Cortex-M3 還配備了一個全新的調(diào)試系統(tǒng) CoreSight。訪問 CoreSight 系統(tǒng)是通過一個支持標(biāo)準(zhǔn) JTAG 的接口或串行線(2 線) 接口來訪問。STM32 的 CoreSight 系統(tǒng)提供調(diào)試運行控制的同時,還提供了一個數(shù)據(jù)觀察點和一個指令跟蹤功能。該指令跟蹤模塊可以發(fā)送指定的應(yīng)用程序信息到調(diào)試工具。 這可以提供擴展的調(diào)試信息,可以用來在軟件測試期間調(diào)試。 1.2.5 STM32 系列STM32 系列有四個不同的分支。這些被歸類為增強型,基本型和 U
26、SB 型設(shè)備.ST 也宣布了第四組型號被稱為互聯(lián)型。在用戶手冊中,增強型,USB 型和基本型也被稱為高,中,低密度設(shè)備。在增強型,基本型和 USB 型設(shè)備中,內(nèi)存大的比內(nèi)存小的嵌入外設(shè)更豐富。因此, 有三個內(nèi)存容量范圍和相應(yīng)的外設(shè)集。低密度設(shè)備的 FLASH 容量大小為 16KB 到 32KB 并有最小的存儲集。中密度設(shè)備的 Flash 存儲器容量大小為 64KB 到 128KB,而高密度器件 FLASH 容量大小為 256KB 到 512KB,并且具有最豐富的外設(shè)集。 11 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 www.stm32bbs.co
27、m基本型是入門級的 STM32 系列產(chǎn)品線,運行在 36MHz 并具有簡單的外設(shè)集。增強型運行在 72MHz,并提供更多的外圍設(shè)備。 USB 型添加一個 USB device,用于對成本敏感的 USB 應(yīng)用程序。 ST 還宣布STM32 系列的一個新的分支稱為互聯(lián)型。該系列給 STM32 帶來了先進的通信外設(shè)包括一個雙重角色的 USB 控制器和以太網(wǎng) MAC。這個雙重角色 USB 可以作為 USB 設(shè)備控制器或 USB 主機/ OTG 控制器。以太網(wǎng) MAC 還包括 IEEE1588,支持實時以太網(wǎng)協(xié)議。重要的是,所有不同型號之間的封裝類型和引腳布局是兼容的。這使得不同型號的 STM32 互換
28、,只需要較少的軟件工作量,而無需重畫 PCB。 12 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 2Cortex 概述正如我們在簡介中所看到的,Cortex 處理器是從 ARM 繼承的下一代嵌入式核心。和早期的 ARM CPU 有點不同的是,Cortex 是一個完整的處理器核心,由 Cortex CPU 和周圍的一整套系統(tǒng)外設(shè)組成,提供了一個嵌入式系統(tǒng)的核心。為了滿足各種各樣的嵌入式系統(tǒng)的需求, Cortex 處理器提供了各種應(yīng)用配置系列。這些系列由 Cortex 后的字母名稱表示。這三個系列如下: Cortex-A
29、系列,支持復(fù)雜的操作系統(tǒng)和用戶應(yīng)用的應(yīng)用處理器系列。支持 ARM,Thumb 和Thumb-2 指令集。 Cortex-R 系列,實時系統(tǒng)應(yīng)用系列。支持 ARM,Thumb 和Thumb-2 指令集。 Cortex-M 系列,為低成本應(yīng)用進行了優(yōu)化的控制器系列。 僅支持 Thumb-2 指令集。 Cortex 名稱后面的數(shù)字是指對應(yīng)的性能水平,1 為最低,而 8 是最高的。目前在 Cortex-M 系列中性能水平最高的級別是 3。STM32 是基于 Cortex-M3 處理器的基礎(chǔ)上的。 2.1 ARM 體系結(jié)構(gòu)版本ARM 也表示對自己的處理器與體系結(jié)構(gòu)的版本有點混亂。 (這里用于 ARMv6
30、,ARMv7 體系等)Cortex M3 的體系結(jié)構(gòu)版本是 ARMv7 M. Cortex-M3 處理器是基于 ARMv7 體系結(jié)構(gòu)并能夠執(zhí)行 Thumb-2 指令集的。 因此, Cortex-M3 的文檔包括 Cortex-M3 技術(shù)參考手冊和 ARMv7 體系結(jié)構(gòu)參考手冊。 這些文件可以從 ARM 網(wǎng)站 上下載。 13 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 2.2 Cortex 處理器和 Cortex CPU在整個這本書的其余部分中,術(shù)語 Cortex 處理器和 Cortex CPU
31、將被用來區(qū)分完整的Cortex 嵌入式內(nèi)核(STM32)和內(nèi)部 RISC CPU。在下一節(jié)中,我們將著眼于 Cortex CPU 的關(guān)鍵特性,然后再 Cortex 處理器(STM32)的系統(tǒng)外圍設(shè)備。 2.3 Cortex CPU在 Cortex 處理器的核心,是一個 32 位的RISC CPU。該 CPU 具有一個簡化版本的 ARM7 / 9 編程模型,但具有更豐富的指令集,具有良好的整數(shù)支持,更好的位操作和硬實時性能。 2.3.1 流水線Cortex CPU 可以在一個周期內(nèi)執(zhí)行大多數(shù)指令。和 ARM7 和 ARM9 的 CPU 一樣,這是由一個三級流水線來實現(xiàn)的。 當(dāng)一條指令在被執(zhí)行時,
32、下一條指令被譯碼和第三條指令被從存儲器中取出。這在正常 順序執(zhí)行的情況下工作得非常好,但是當(dāng)遇到分支時,流水線必須進行刷新和重填,才可以 繼續(xù)執(zhí)行代碼。在 ARM7 和 ARM9 CPU 中,分支在代碼的性能上是非常耗費的。在 Cortex CPU 中三級流水線效率是通過分支預(yù)測來增強的。這意味著達到,條件分支指令到來時,預(yù)測取 指動作被執(zhí)行,使兩個分支的指令都可以被執(zhí)行,而不會導(dǎo)致性能的下降。最壞的情況是一 個間接分支的預(yù)測取指不能被執(zhí)行,而這時唯一的辦法是,沖洗流水線。雖然流水線是 Cortex CPU 的整體性能的關(guān)鍵,但在應(yīng)用程序代碼上沒有什么特別需要考慮的。 2.3.2 編程模型Co
33、rtex CPU 是一個有加載和存儲體系結(jié)構(gòu)的 RISC 處理器。為了執(zhí)行數(shù)據(jù)處理指令,操作數(shù)必須被加載到一個中央寄存器,數(shù)據(jù)操作必須在這些寄存器上執(zhí)行,并且把結(jié)果回存到 內(nèi)存上。 14 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 因此,所有的程序活動重點圍繞 CPU 寄存器。這些寄存器包括 16 個 32 位寄存器。寄存器 R0-R12 是簡單的寄存器可以用來存放程序變量。寄存器 R13-R15 在Cortex CPU 內(nèi)具有特殊的功能。寄存器 R13 用作堆棧指針。這個寄存器是分塊的,它允許在 Cortex CPU
34、 有兩種操作模式(線程模式和處理模式),每種操作模式都有自己獨立的棧空間。這通常用于 RTOS中,即可以在保護模式下運行“系統(tǒng)”代碼。Cortex CPU 有兩個堆棧稱為主堆棧和進程堆棧。接下來的寄存器 R14 是鏈接寄存器。該寄存器是用來存儲程序調(diào)用時的返回地址。這使得Cortex CPU 可以快速地進入和退出程序。如果你的代碼調(diào)用幾級子程序,編譯器將自動把R14 存儲在棧上。最后的寄存器R15 是程序計數(shù)寄存器,因為它也是中央寄存器的一部分, 所以它也可以像其他寄存器一樣進行讀寫操作。 XPSR除了中央寄存器之外,還有有一個單獨的寄存器,程序狀態(tài)寄存器。它不是中央寄存器的一
35、部分,它僅能夠通過兩個專用的指令 MRS 和MSR 進行操作。xPSR 包含了一些影響 Cortex CPU 執(zhí)行的字段。 xPSR 的寄存器也可以通過三個特殊的別名 APSR、IPSR 和 EPSR,對 xPSR 子范圍內(nèi)的位進行訪問。前 5 位是條件代碼標(biāo)志,別名是應(yīng)用程序狀態(tài)寄存器(Application Program Status Register)。前四個條件代碼標(biāo)志 N,Z,C,V(負(fù)數(shù),零,進位和溢出)將根據(jù)數(shù)據(jù)處理指令的結(jié)果被設(shè)置或清零。Q 位是由 DPS 飽和數(shù)學(xué)指令使用,用來表明變量已經(jīng)達到它的最大值或最小值。和 ARM 32 位指令集一樣,某些 Thumb-2 指令僅當(dāng)
36、滿足應(yīng)用程序狀態(tài)寄存器的條件碼標(biāo)志狀態(tài)時才被執(zhí)行。如果該指令條件碼不匹配,則該指令通過流水線時作 為 NOP 指令處理。這將保證指令順利通過流水線,并最大限度地減少流水線沖洗。在 Cortex CPU 中, 執(zhí)行程序狀態(tài)寄存器(Execution Program Status Register)使得這一技術(shù)得以擴展。這個是位 26 - 8 的 xPSR 的別名。這包含三個區(qū):“IF then”區(qū),“中斷-可繼續(xù)指令區(qū)”,和Thumb 指令狀態(tài)區(qū)。Thumb-2 指令集在執(zhí)行小塊的“IF then”塊指令時,有一個有 效的方法。當(dāng)條件測試為真,它可以在“IF then”位設(shè)置一個值,告訴 CPU
37、 可以執(zhí)行到下 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 面四個指令。如果條件測試為假,這些指令會在通過流水線時作為 NOP 指令處理。因此,一個典型的流水線 C 將被編碼如下: If (r0 =0)CMP r0,#0 ITTEE EQThen r0 = *r1;compare r0 to 0;if true execute the next two instructions+2;LDR r0,r1ADDr0,#2;load contents of memory location into r0;add 2大多數(shù) T
38、humb-2 指令在一個周期內(nèi)被執(zhí)行,而有些指令(如多寄存器加載和存儲指令) 卻需要多個周期。因此,Cortex CPU 可以有一個明確的中斷響應(yīng)時間,這些指令必須是可以被中斷的。當(dāng)一條多寄存器加載/存儲指令被提前終止時,中斷繼續(xù)指令區(qū)將存儲將要作的下一個寄存器的編號。因此,一旦中斷服務(wù)程序完成后,多寄存器加載/存儲指令可 以繼續(xù)執(zhí)行。最后的 Thumb 指令狀態(tài)區(qū)是繼承自早期的 ARM 處理器的。此區(qū)表示,目前正在被 CPU 執(zhí)行的是 ARM 指令集還是 Thumb 指令集。在 Cortex-M3,該位始終設(shè)置為 1。最后, 中斷狀態(tài)寄存器(Interrupt Status Register
39、s)包含當(dāng)前被激活的中斷編號。 2.3.3 CPU 工作模式雖然 Cortex 處理器是一個低門數(shù),速度快,易于使用的微控制器核心,但它已被設(shè)計為支持使用實時操作系統(tǒng)。 Cortex 處理器有兩種操作模式:線程模式和處理模式。當(dāng) CPU 在非中斷背景模式執(zhí)行時,它將運行在線程模式下,當(dāng)執(zhí)行異常時,它將切換到處理模式。 此外,Cortex CPU 可以在或非模式下執(zhí)行代碼。在模式下,CPU 可以訪問完整的指令集。在非模式下某些指令將被禁用(如允許訪問 xPSR 和它的別名的 MRS 和 MSR 指令)。此外, Cortex 處理器系統(tǒng)控制空間的大部分寄存器也將被禁用。堆棧的使用也可以被配置。主堆
40、棧(R13)可以用在線程模式和處理模式這兩種模式。另外,處理模式模式 也可以被配置為使用進程堆棧(R13 bank 寄存器)。 Cortex-M3 可用在一個“平”的簡單模式。它也被設(shè)計為支持實時操作系統(tǒng)。它具有處理模式和線程模式,可以被配置為使用主?;蜻M程棧并有Cortex 系統(tǒng)控制寄存器。 訪問 16 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 復(fù)位后 Cortex 處理器將運行在一個“平”的配置。線程模式和處理模式這兩種模式都是運行在模式下,所以對任何處理器資源的訪問都沒有任何限制。線程模式和處理模式 都可以使用
41、主堆棧。為了開始執(zhí)行,只需要對 Cortex 處理器的復(fù)位向量和堆棧的開始地址進行配置,然后你就可以開始執(zhí)行你的應(yīng)用程序 C 代碼了。但是,如果你使用的是 RTOS 或正在開發(fā)一種安全攸關(guān)的應(yīng)用程序,該芯片可以被用在高級模式配置,即處理模式(異常和RTOS)運行在模式下,使用主堆棧,而在非訪問的線程模式下運行應(yīng)用程序代碼, 使用進程堆棧。這種系統(tǒng)代碼和應(yīng)用程序代碼進行分區(qū)的方式使得應(yīng)用程序代碼中的錯誤不 會導(dǎo)致 RTOS 。 2.3.4 Thumb-2 指令集ARM7 和 ARM9 CPU 可以同時執(zhí)行兩個指令集:32 位的 ARM 指令集和 16 位的 Thumb 指令集。這允許開發(fā)人員通過
42、選擇不同的指令集來優(yōu)化其程序:32 位指令的速度和 16 位指令的代碼壓縮。Cortex CPU 執(zhí)行Thumb-2 指令集,這是一個混合的 16 位和 32 位指令。Thumb-2 指令集提供了32 位ARM 指令集26代碼密度的提高和16 位Thumb 指令集25性能的提升。Thumb2 指令集具有一些改進的可以在一個單周期內(nèi)執(zhí)行的乘法指令和大約需要 2 - 7 周期 的硬件除法器。 Cortex 處理器 benchmarks 提供 1.2 DMIPS / MHz 的性能水平,即是每指令1.2 個時鐘周期。 17 百為技術(shù)官方網(wǎng)店 技
43、術(shù)支持論壇 Thumb-2 指令集也有改進的分支指令,包括測試和比較,IF then 條件執(zhí)行塊和數(shù)據(jù)操作的字節(jié)順序和字節(jié)和半字提取指令。作為一個 RISC 處理器,Cortex CPU 還具有豐富的專門為 C 編譯器目標(biāo)設(shè)計的指令集。 Cortex-M3 的一個典型項目,將完全由 ANSI C 編寫,使 用最少的非 ANSI 關(guān)鍵字,并且只有異常向量表是由匯編語言編寫的。 2.3.5 存儲器映射Cortex-M3 處理器 一個標(biāo)準(zhǔn)的微控制器核心,并具有一個明確定義的內(nèi)存映射。盡管有多個內(nèi)部總線,這個內(nèi)存映射是線性的 4G 字節(jié)的地址空間。 Cortex-M3
44、定義了一個固定的 4GB 內(nèi)存映射,指定了代碼區(qū)、SRAM 區(qū)、外設(shè)區(qū)、外部存儲器或設(shè)備和 Cortex 系統(tǒng)寄存器的區(qū)域范圍。此內(nèi)存映射適用于所有基于 Cortex 的設(shè)備。 第一個 1GB 的內(nèi)存空間被分為代碼區(qū)和SRAM 區(qū)。代碼空間被優(yōu)化為從I-Code 總線執(zhí)行。同樣,SRAM 由 D-Code 總線訪問。雖然代碼可以從 SRAM 加載和執(zhí)行,但指令從系統(tǒng)總線提取,這將會產(chǎn)生額外的等待狀態(tài)。這很可能是因為從 SRAM 上運行,比從位于代碼區(qū)的片上FLASH 存儲器上運行代 速度要慢。接下來的 0.5GB 的存儲空間是片上外設(shè)區(qū)。所有由微控制器供應(yīng)商提供的用戶外設(shè)將設(shè)在這個區(qū)域。SRA
45、M 和外設(shè)區(qū)中的第一個 1M 字節(jié)是可位尋址的, 使用的技術(shù)稱為位帶技術(shù)。由于 STM32 所有的 SRAM 和所有用戶外設(shè)位于這些區(qū)域,STM32所有的內(nèi)存位置都可以用一個字或位的方式進行操作的。接下來的 2GB 的地址空間被分配給 外部 SRAM 和外部設(shè)備。最后的 0.5 GB 被分配給內(nèi)部的 Cortex 處理器外設(shè) 一個給供應(yīng)商 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 自定義 Cortex 處理器增強功能的區(qū)。所有 Cortex 處理器的寄存器在所有基于 Cortex 的微控制器中有固定地址。這使得代碼很
46、容易被移植到不同的 STM32 型號之間以及其他廠商的Cortex 微控制器上。只需要學(xué)習(xí)一個處理器,只需要投資一種工具集,就有大量的代碼可 以在廣泛的微控制器中重用。 2.3.6 非對齊的內(nèi)存訪問ARM7 和ARM9 的指令集能夠訪問字節(jié),有符號和無符號半字和字變量。這使得 CPU 自然地支持整數(shù)變量,而不需要那種通常在 8 位和 16 位微控制器上需要的軟件庫的支持。但是, 早期的 ARM 處理器的缺點是,他們只能做字或半字對齊訪問。這限制了編譯連接器將數(shù)據(jù)存放到SRAM 的能力和一些有效的 SRAM 空間將被浪費。 (這可以是高達 25的,取決于所使 用的變量的組合。) Cortex-M
47、3 可以使用未對齊的內(nèi)存訪問,這確保 SRAM 是被有效使用的。 Cortex CPU 有字,半字和字節(jié)尋址模式,但能夠?qū)Ψ菍R的內(nèi)存進行訪問。這使得編譯鏈接器可以完全自由地在內(nèi)存中安排程序數(shù)據(jù)。Cortex CPU 額外的位帶支持允許程序的 標(biāo)志被包裝成一個字或半字變量,而不是每個標(biāo)志使用一個字節(jié)。 2.3.7 位帶早期的ARM7 和 ARM9 的CPU 只能在 SRAM 和外設(shè)存儲器位置上通過使用 AND 和 OR 指令執(zhí)行位操作。這需要一個讀-修改-寫操作,在設(shè)置和清除位需要的周期數(shù)量和對每一個位操作 所需的整體代碼空間方面來說,這是很昂貴的。 19 百為技術(shù)官方網(wǎng)店 http:/bai
48、技術(shù)支持論壇 為了克服這個限制,將有可能引入一個專用的位設(shè)置和清除指令,或者一個完整的布爾 處理器,但是這將會增加 Cortex CPU 的大小和復(fù)雜性。取而代之的是,一個叫位帶的技術(shù)允許直接位操作外設(shè)區(qū)和 SRAM 區(qū)內(nèi)存空間,而不需要其他任何特別指令的介入。Cortex 存儲器映射中的位尋址區(qū)域是由位帶區(qū)(容量高達 1M byte 的實際存儲器或外設(shè)寄存器)和占用內(nèi)存映射32M byte 的位帶別名區(qū)組成的。位帶技術(shù)把位帶區(qū)域中的一個位映射到別名區(qū)中的一個字地址。因此,通過設(shè)置和清除別名區(qū)字地址,我們可以設(shè)置和清除真正內(nèi)
49、存中的 位。 位帶支持 SRAM 區(qū)和外設(shè)區(qū)的第一個 1M 字節(jié)。這涵蓋了 STM32 的所有資源。 這使得我們能夠執(zhí)行獨立的位操作,而不需要特別的指令,并使 Cortex 核心保持了盡可能小的整體尺寸。在實踐中,我們需要計算一個在外設(shè)區(qū)或 SRAM 區(qū)中指定內(nèi)存位置的位 帶別名地址。計算別名地址的公式如下: 位帶別名區(qū)的地址位帶字偏移 =位帶別名區(qū)的基地址+位帶字偏移位帶基地址偏移*32+位號*4 這比一開始看起來要容易得多。對于一個實際的例子,GPIO 輸出數(shù)據(jù)寄存器被設(shè)計為可以設(shè)置和清除單個 IO 線。端口 B 輸出寄存器的物理地址是 0x40010C0C。在這個例子中, 我們可以使用上
50、面的公式來設(shè)置和清除這個字的第 8 位。 字地址 外設(shè)位帶基地址 外設(shè)位帶別名基地址位帶基地址偏移 位帶字偏移 位別名地址 =0x40010C0C 0x40000000 0x42000000 0x40010C0C-0x40000000=10C0C (0x10C0C*32)+(8*4)=0x2181A0 0x42000000+0x2181A0=0x422181A0 現(xiàn)在,我們可以用下面的 C 代碼來創(chuàng)建一個指針指向這個地址:#definePortBbit8 (*(volatile unsigned long *) 0x422181A0 )然后,可以使用這個指針來設(shè)置和清除IO端口位: PortB
51、bit8 = 1;對應(yīng)產(chǎn)生下面的匯編指令: /led onMOVSLDRr0,#0x01r1,pc,#10420 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 STRr0,r1,#0x00熄滅指示燈: PortBbit8 = 0;對應(yīng)生成下面的匯編指令: /led offMOVS LDRSTRr0,#0x00 r1,pc,#88r0,r1,#0x00設(shè)置和清除操作占用3 個16 位指令,STM32 運行在72 MHz 時這些指令的執(zhí)行時間為80ns。在外設(shè)和 SRAM 位帶區(qū)域的任何字,也可以直接字存取,這樣我們就可以使
52、用更傳統(tǒng)的 AND 和 OR 方法進行同樣的設(shè)置和清除操作: GPIOB-ODR|= 0x00000100;/LED onLDR ADDS LDR ORR LDRSTRr0,pc,#68 r0,r0,#0x08 r0,r0,#0x00 r0,r0,#0x100 r1,pc,#64r0,r1,#0xC0CGPIOB-ODR&=!0x00000100;/LED offLDR ADDS LDR MOVS LDRSTRr0,pc,#40 r0,r0,#0x08 r0,r0,#0x00 r0,#0x00 r1,pc,#40r0,r1,#0xC0C這種情況下每個設(shè)置和清除操作需要一個混合的 16 位和 3
53、2 位操作,每個操作至少需要14 個字節(jié),并且在相同的時鐘頻率下最少要 180ns。如果你考慮在一個典型的嵌入式應(yīng)用程序中設(shè)置和清除大量外設(shè)寄存器的位,并在 SRAM 上使用信號量和標(biāo)志時位帶帶來的影響, 你會很清楚要明顯節(jié)省代碼空間和執(zhí)行時間,而這些都在 STM32 的頭文件幫你處理好了。 庫函數(shù)例程中相關(guān)代碼: 位帶別名地址計算公式為: bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number x 4) 其中 bit_word_addr 是位帶別名地址,bit_band_base 是位帶別名區(qū)基地址,byte_offs
54、et 是在位帶區(qū)的偏移 = 位帶區(qū)地址 - 位帶區(qū)基地址,bit_number 表示位帶區(qū)地址中的第幾位。 #define Var_ResetBit_BB(VarAddr, BitNumber) (*(vu32 *) (RAM_BB_BASE | (VarAddr(BitNumber) 2) = 0)- RAM_BASE) 5)|#define Var_SetBit_BB(VarAddr, BitNumber) (*(vu32 *) (RAM_BB_BASE | (VarAddr(BitNumber) 2) = 1)- RAM_BASE) 5)|#define Var_GetBit_BB(Va
55、rAddr, BitNumber)21 百為技術(shù)官方網(wǎng)店 技術(shù)支持論壇 (*(vu32 *) (RAM_BB_BASE | (VarAddr - RAM_BASE) 5) |(BitNumber) 2)2.4 Cortex 處理器2.4.1 總線Cortex-M3 處理器具有一個哈佛架構(gòu),具有獨立的代碼和數(shù)據(jù)總線。這些分別被稱為ICode 總線和 DCode 總線。這些總線都可以訪問地址范圍 0X00000000 - 0x1FFFFFFF 的代碼和數(shù)據(jù)。另外,系統(tǒng)總線是用來訪問地址范圍為 0x200000000 - 0xDFFFFFFF 和 0xE0100000 - 0xFFFFFFFF 的 Cortex 系統(tǒng)控制空間的。Cortex 的片上調(diào)試系統(tǒng)另外有一個總線結(jié)構(gòu)稱為 專用外設(shè)總線。 2.4.2 總線矩陣系統(tǒng)總線和數(shù)據(jù)總線是通過一組由高速總線排列組成的一個總線矩陣來連接到外部微控制器的。這使得 Cortex 總線和其他外部總線主設(shè)備(如 DMA),到片上資源(如 SRAM 和外設(shè))之間有多個并行的路徑。如果兩個主機(即 Co
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 箱子材料成型課程設(shè)計
- 生物數(shù)字化課程設(shè)計
- 公司薪酬福利管理制度
- 發(fā)展集團財務(wù)管理管控規(guī)章制度匯編
- 研究生幼兒游戲課程設(shè)計
- 繼電器電路控制課程設(shè)計
- 住院部護理工作總結(jié)
- 泰拳系統(tǒng)課程設(shè)計案例
- 2025年高考?xì)v史一輪復(fù)習(xí)之經(jīng)濟發(fā)展與社會進步
- 律師調(diào)解案件心得分享
- 2022版義務(wù)教育物理課程標(biāo)準(zhǔn)
- 數(shù)字資產(chǎn)管理與優(yōu)化考核試卷
- 期末測試-2024-2025學(xué)年語文四年級上冊統(tǒng)編版
- 教案-“枚舉法”信息技術(shù)(信息科技)
- 2024年內(nèi)部審計年度工作計劃范文(六篇)
- 四川省成都市2021-2022學(xué)年物理高一下期末學(xué)業(yè)質(zhì)量監(jiān)測模擬試題含解析
- 光伏發(fā)電系統(tǒng)租賃合同范本
- 新教科版六年級上冊科學(xué)全冊知識點(期末總復(fù)習(xí)資料)
- 綠色建筑工程監(jiān)理實施細(xì)則
- 2024年安全員b證繼續(xù)教育考試
- 科研倫理與學(xué)術(shù)規(guī)范期末考試試題
評論
0/150
提交評論