【ARMv7】开篇:掌握ARMv7架构Soc开发技能
本专栏,开始与大家共同总结使用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语言和标准库来高效地控制整个芯片。