一、什么是STM32?
對于STM32,從字面意思上來理解,ST是意法半導(dǎo)體,M是Microelectronics的縮寫,其中32表示的是32位,那么整合起來理解就是:STM32就是指的ST公司開發(fā)的32位微控制器。在如今的32位控制器中,STM32可以說是最閃耀光彩奪目的新星,所以也造就了STM32被現(xiàn)在的大多數(shù)工程師以及市場所青睞,對它是寵愛有加啊!
STM32系列基于專門要求高性能,低成本,低功耗的嵌入式應(yīng)用專門設(shè)計的ARM Cortex-M0,Cortex-M1,Cortex-M3,Cortex-M4,Cortex-M7等。其中Cortex-M0主打的是低功耗和混合信號的處理,M3主要用來替代ARM7,重點側(cè)重能耗和性能的均衡,而M7則重點放在高性能控制運算領(lǐng)域。
二、接下來我們看一下Cortex-M0的結(jié)構(gòu)框圖
Cortex-M0 微處理器主要包括處理器內(nèi)核、嵌套向量中斷控制器(NVIC)、調(diào)試子系統(tǒng)、內(nèi)部總線系統(tǒng)構(gòu)成。Cortex-M0 微處理器通過精簡的高性能總線(AHB-LITE)與外部進行通信。
三、Cortex-M0特性
(1) Thumb 指令集,高效、高代碼密度;
(2) 高性能,使用ARMv6-M的體系架構(gòu);
(3) 中斷數(shù)量可配置(1~32 個),4 級中斷優(yōu)先級,低中斷切換時延,提供不可屏蔽中斷(NMI)輸入保障高可靠性系統(tǒng);
(4) 門電路少,低功耗,處理器可在休眠狀態(tài)下掉電以降低功耗,還可被 WIC 喚醒;
(5) 與 Cortex-M1 處理器兼容,向上兼容 Cortex-M3 和 Cortex-M4 處理器,可以很容易地升級到 Cortex-M3。Cortex-M3 和 Cortex-M4 移植到 Cortex-M0 也非常簡單。
(6) 支持多種嵌入式操作系統(tǒng),也被多種開發(fā)組件支持,包括 MDK(ARM Keil 微控制器開發(fā)套件)、RVDS(ARM RealView 開發(fā)組件)、IAR C 編譯器等。
四、Cortex-M0工作模式
Cortex-M0有兩種工作模式和兩種工作狀態(tài),分別如下:
(1) 線程模式(Thread Mode):
芯片復(fù)位后,即進入線程模式,執(zhí)行用戶程序;
(2) 處理模式(Handler Mode)。
當(dāng)處理器發(fā)生了異常或者中斷,則進入處理模式進行處理、處理完成后返回線程模式。
(3) Thumb狀態(tài):正常運行時處理器的狀態(tài)
(4) 調(diào)試狀態(tài):調(diào)試程序時處理器的狀態(tài)
五、Cortex-M0寄存器組——通用寄存器
Cortex-M0 處理器內(nèi)核有 13 個通用寄存器以及多個特殊寄存器,如圖 所示。具體介紹如下:
(1) R0-R12:通用寄存器。其中 R0-R7 為低端寄存器,可作為 16 位或 32 位指令操作數(shù),R8-R12 為高端寄存器,只能用作 32 位操作數(shù)
(2) R13:堆棧指針 SP,Cortex-M0 在不同物理位置上存在兩個棧指針,主棧指針 MSP,進程棧指針 PSP。在處理模式下,只能使用主堆棧,在線程模式下,可以使用主堆棧也可以使用進程堆棧,這主要是由 CONTROL 寄存器控制完成。系統(tǒng)上電的默認(rèn)棧指針是MSP
(3) R14:連接寄存器(LR),用于存儲子程序或者函數(shù)調(diào)用的返回地址
(4) R15:程序計數(shù)器(PC),存儲下一條將要執(zhí)行的指令的地址。
六、Cortex-M0異常和中斷
Cortex-M0 處理器最多支持 32 個外部中斷(通常稱為 IRQ)和一個不可屏蔽中斷(NMI),
另外 Cortex-M0 還支持許多系統(tǒng)異常(Reset、HardFault、SVCall、PendSV、SysTick),它們主要用于操作系統(tǒng)和錯誤處理,參見下表
七、Cortex-M0指令集
ARM處理器支持兩種指令集:ARM 和 Thumb。
EPSR寄存器的T標(biāo)志位負(fù)責(zé)指令集的切換,Cortex-M0只支持Thumb指令。
ARM指令集
32位精簡指令集;
指令長度固定;
降低編碼數(shù)量產(chǎn)生的耗費,減輕解碼和流水線的負(fù)擔(dān);
Thumb指令集
Thumb指令集是ARM指令集的一個子集;
指令寬度16位;
與32位指令集相比,大大節(jié)省了系統(tǒng)的存儲空間;
Thumb指令集不完整,所以必須配合ARM指令集一同使用。
注:Thumb 與 ARM 相比,代碼體積小了 30%,但性能也低了 20%。2003 年,ARM 公司引入了 Thumb-2 技術(shù),具備了一些 32 位的 Thumb 指令,使得原來很多只有 ARM 指令能夠完成的功能,用 Thumb 指令也可以完成了。Cortex-M0 基于的 ARMv6-M 體系結(jié)構(gòu),該體系結(jié)構(gòu)的處理器只是用了16位Thumb指令和部分32位Thumb指令
八、STM32的應(yīng)用
九、STM32產(chǎn)品命名規(guī)范
十、總結(jié)
通過本篇幅的整理的在學(xué)習(xí)STM32之前我們應(yīng)該先去做的一些預(yù)備工作,從Cortex-M0先入手,去一步步的深入到最終的STM32學(xué)習(xí)旅途中去,希望可以通過本篇的分享與學(xué)習(xí),可以從根本上解決大家對于STM32要學(xué)習(xí)什么能夠有一個清晰的認(rèn)知。