STM32 的核心Cortex-M3 處理器是一個標準化的微控制器結構,希望思考一下,何為標準化?
簡言之,Cortex-M3 處理器擁有32 位CPU,并行總線結構,嵌套中斷向量控制單元,調試系
統以及標準的存儲映射。
嵌套中斷向量控制器(Nested Vector Interrupt Controller,簡稱NVIC)是Cortex-M3 處理器中
一個比較關鍵的組件,它為基于Cortex-M3 的微控制器提供了標準的中斷架構和優秀的中斷
響應能力,為超過240 個中斷源提供專門的中斷入口,而且可以賦予每個中斷源單獨的優先
級。利用NVIC 從可以達到極快的中斷響應速度,從收到中斷請求到執行中斷服務的第一條
指令僅需12 個周期。這種極快的響應速度一方面得益于Cortex-M3 內核對堆棧的自動處理
機制,這種機制是通過固化在CPU 內部的微代碼實現的。另一方面,在中斷請求連續出現
的情況下,NVIC 使用一種稱為“尾鏈”的技術,使連續而來的中斷可以在6 個時鐘周期內得
到服務。在中斷的壓棧階段,更高優先級的中斷可以不耗費任何額外的CPU 周期就能完成
嵌入低優先級中斷的動作。具體的細節后面我會繼續總結的。用戶可以通過設置CPU 自動
進入低功耗狀態,而使用中斷來將其喚醒,CPU 在中斷時間來臨之前會一直保持睡眠狀態。
這個后面我也會再總結。
Cortex-M3 的CPU 支持兩種運行模式:線程模式(Thread Mode)與處理模式(Handler Mode)
并且需要注意的是,這兩種模式都擁有各自獨立的堆棧。這種設計使得開發人員可以進行更
為精密的程序設計,對實時操作系統的支持也就更好了。
Cortex-M3 處理器還包含了一個24 位可自動重裝載定的定時器,可以為內核(RTOS)提供
一個周期中斷。
在指令集方面,ARM7 和ARM9 都有兩種指令集(32 位指令集和16 位指令集),而Cortex-M3
系列處理器支持Thumb-2 指令集。由于Thumb-2 指令集融合了Thumb 指令集和ARM 指令
集,使得32 位指令集的性能和16 位指令集的代碼密度之間取得了平衡。
而且,ARM Thumb-2 專門為C/C++編譯器設計,這就意味著Cortex-M3 系列處理器的開發應
用可以全部在C 語言環境中完成。
STM32 微控制器的推出標志著ST 公司在兩條產品主線(低價位主線和高性能主線)上邁出
了重大一步。STM32 最初發布時有14 個不同型號,分為兩個版本:最高CPU 時鐘為72MHZ
的“增強型”和最高CPU 時鐘為36MHZ 的“基本型”。這些不同STM32 型號里內置的Flash 最
大可達128KB,SRAM 最大為20KB,在STM32 發布之初,配置更大Flash,RAM 和更復雜外設
的版本就已經在規劃之中了。不管是什么版本,什么型號的STM32 器件,它們在引腳功能
和應用軟件上是兼容的。這就使得開發人員在使用STM32 系列微控制器時,不必改動PCB
就可以根據需要隨意更換器件型號。
乍一看STM32 的設備配備,與往日熟悉的51 單片機倒有幾分相似。一般,STM32 都會配備
常見外設,諸如多通道ADC,通用定時器,I2C 總線接口,SPI 總線接口,CAN 總線接口,USB
控制器,實時時鐘RTC 等。但是,它的每一個外部設備都具有獨特之處。例如,12 位精度
的ADC 具備多種轉換模式,并帶有一個內部溫度傳感器,帶有雙ADC 的STM32 器件,還可
以使兩個ADC 同時工作,從而衍生出了更為高級的9 種轉換模式;STM32 的每一個定時器
都具備4 個捕獲比較單元,而且每個定時器都可以和另外的定時器聯合工作以生成更為精密
的時序;STM32 有專門為電機控制而設的高級定時器,帶有6 個死區時間可編程的PWM 輸
出通道,同時其帶有的緊急制動通道可以在異常情況出現時,強迫PWM 信號輸出保持在一
個預訂好的安全狀態;SPI 接口含有一個硬件CRC 單元,支持8 位字節和16 位半字數據的
CRC 計算。在對SD 或MMC 等存儲介質進行數據存取時相當有用。
而且,STM32 還包含了7 個DMA 通道。沒惡搞通道都可以用來在設備與內存之間進行8 位,
16 位,32 位數據的傳輸。每個設備都可以向DMA 控制器請求發送或者接收數據。STM32
內部總線仲裁器和總線矩陣將CPU 數據接口和DMA 通道之間的連接大大的簡化了,這就意
味著DMA 通道單元是很靈活的其使用方法簡單,足以應付微控制器應用中常見的數據傳輸
要求。
我們前面說過了,STM32 是低功耗,高性能的微控制器。在低功耗方面,STM32 表現也是
不錯的。它可以在2V 供電的情況下運行,在所有設備同時打開且運行在滿速72MHZ 主頻的
情況下,也僅消耗36mA 的電流,在與Cortex-M3 內核的低功耗模式結合之后,只有2uA 的
電流消耗。即便外部振蕩器處在待啟動狀態,STM32 使用內部8MHZ 的RC 振蕩器也可迅速
退出低功耗模式。這種快速進出低功耗模式的特性,也進一步降低了微控制器整體的功率消
耗,同時使微控制器仍然可以保持器件的整體高性能。
在電子領域,對器件的要求精度高是一方面,另一方面,還要求器件穩定性要好,處于可靠
性的考慮,STM32 配備了一系列硬件來支持對可靠性的高度要求。這些硬件有:一個低電
壓檢測器,一個時鐘安全管理系統和兩個看門狗定時器。時鐘管理系統可以檢測到外部主振
蕩器的失效,并隨即安全的將STM32 內部8MHZ 的RC 振蕩器切換為主時鐘源。兩個看門狗
定時器中的一個稱為窗口看門狗。窗口看門狗必須在事先定義好的時間上下限到達之前刷新,
如果過早或過晚的刷新它,將會觸發窗口看門狗復位。第二個看門狗稱為獨立看門狗。獨立
看門狗使用外部振蕩器驅動,該振蕩器與主系統時鐘是相互獨立的,這樣即便STM32 的主
系統時鐘崩潰,獨立看門狗也能“力挽狂瀾”。
在現代電子設計行業中,有一個問題是無法逃避的,那就是你不得不想方設法提高代碼的安
全性以防止被破解人員盜用。聽師傅說,在極難得電子市場,復制一個芯片只需要幾分鐘。
STM32 可以鎖住其內部Flash 使破解人員無法通過調試端口讀取其內容。當Flash 的讀保護
功能開啟后,其寫保護功能也隨之開啟。寫保護功能常用于防止一些來歷不明的代碼寫入中
斷向量表。但是,寫保護不僅可以保護中斷向量表,還可以進一步將其保護范圍延伸到整個
Flash 中的未被使用區域。另外,STM32 還有一小塊電池備份RAM 區,這個RAM 區域對應
于一個入侵檢測引腳應用,當這個引腳上產生電平變化時,STM32 會認為遭遇了入侵事件,
隨即自動將電池備份RAM 區的內容全部清除。
目前好多開發工具都開始支持Thumb-2 指令集和STM32 系列,即使不支持也沒有關系,我
們只需要將軟件升級一下即可。同時,ST 公司還提供了一個設備驅動固件庫和一個USB 開
發應用庫,以方便調用。對于STM32 來說,一些早期微控制器比如早期的STR7 和STR9 發
布的ANSI C 庫和源代碼都是可移植的。這些程序的接口已經在許多流行的編譯工具上得到
了整合。相似的,許多開源的或者商用的RTOS,還有一些中間件(比如TCP/IP 棧,文件系
統)對以STM32 系列微控制器來說也是可用的。
Cortex-M3 還帶有一個全新調試系統CoreSight。用戶可以使用標準的JTAG 接口或者雙線串
行接口通過調試端口(Debug Access Port)實現和CoreSight 系統的對接。除了提供調試運行
控制服務之外,STM32 上的CoreSight 還提供斷點數據查看功能以及一個指令跟蹤器。指令
跟蹤器可以將用戶選擇的應用信息上傳到調試工具里。從而可以為用戶提供額外的調試信息,
并且它在軟件運行期間同樣可以使用。
更多C語言 C++、JAVA、數電模電、51單片機、PIC stm32 ARM Linux驅動 嵌入式、安卓系統 FPGA、DSP Cortex-M3學習
請咨詢:楊工, QQ3215863036北京,上海,深圳南山、民治、龍崗、西鄉、長沙、鄭州、南寧同步學習中!
|