? ? 本專欄,開始與大家共同總結使用ARMv7系列CPU的Soc開發技能。大概匯總了一下,后面再逐步完善下面的思維導圖。
??
? ? 簡單說說:與通用的ARMv7-A/R相比,以STM32F為代表的ARMv7-M架構有以下關鍵區別和重點:
無MMU,有MPU:STM32F系列沒有內存管理單元(MMU),因此無法運行像Linux這樣需要虛擬內存管理的復雜操作系統。但它可以有內存保護單元(MPU),用于在RTOS(如FreeRTOS)中保護任務之間的內存空間,防止錯誤訪問。
高度集成的NVIC:嵌套向量中斷控制器(NVIC)?是Cortex-M內核的一大亮點,它被集成在CPU內部。你對中斷的所有配置(優先級、使能、查詢狀態)都是通過訪問NVIC的存儲器映射寄存器來完成,非常高效和統一。這是STM32中斷編程的核心。
系統控制塊(SCB):這是操控CPU核心功能的模塊。對于STM32開發者來說,最常用的就是
SCB->VTOR
寄存器來重定義向量表地址(例如在IAP升級或運行OS時非常有用)。開發模式:你幾乎永遠不會用純匯編來開發整個STM32項目。通常是C語言編寫,僅在啟動文件(
.s
)中用匯編完成最基礎的棧初始化、向量表定義和時鐘初始化跳轉。理解匯編是為了更好地調試和優化。實踐核心:學習STM32F,在掌握了上述架構知識后,真正的實踐在于:
理解啟動過程:從匯編啟動文件到
main()
函數之間發生了什么。精通中斷機制:如何編寫中斷服務函數、如何配置NVIC。
熟練操作外設:本質上就是讀寫那些定義好的內存地址(寄存器)。
使用CMSIS:這是一個由ARM制定的硬件抽象層標準,ST(意法半導體)提供的庫都基于此。它定義了訪問NVIC、SCB等內核寄存器的標準方式,讓你的代碼可以在不同Cortex-M廠商的芯片間移植。
? ? 總結:學習STM32F的ARMv7-M架構,重點是理解中斷機制(NVIC)、掌握存儲映射(知道外設寄存器在哪)、會配置核心功能(SCB)、掌握啟動流程、掌握程序運行原理、掌握片設片成技巧,并最終通過C語言和標準庫來高效地控制整個芯片。