STM32F407学习记录(七)Cortex-M3/M4权威指南:第三章
2026/7/17 5:00:14 网站建设 项目流程

前言:本文章相当于学习笔记,摘录总结。推荐自行观看相关书籍(权威指南),不足之处,请指点。

3.1Cortex--M3和Cortex-M4处理器的一般信息

3.1.1处理器类型

ARM Cortex-M为32位RISC(精简指令集)处理器,其具有:32位处理器、32位内部数据通路、32位总线接口。

Coretx-M处理器还可以高效处理8位和16位数据。Cortex-M3/M4处理器还支持涉及64位数据的多种运算。

Cortex-M3/M4都具有三级流水线(取指、译码和执行),它们都基于哈佛总线架构,取指令和数据访问可以同时执行。

三级流水线:在执行第一条指令的同时,解析第二条指令,读取第三条指令。

哈佛总线架构:CPU内部物理上有两条独立的总线通道。

取指令和数据访问同时进行:取指单元走指令总线去Flash(闪存)取指令,同时执行单元走数据总线去SRAM(静态随机存取存储器)读数据。

存储器系统使用32位寻址,地址空间最大为4GB。存储器空间包括程序代码、数据、外设以及处理器内的调试支持部件。

Cortex-M处理器基于一种加载-存储架构。例如,要增加SRAM中存储的数据值。处理器第一条指令从SRAM中读出数据,并将数据放在处理器的寄存器中;第二条指令增加寄存器中的数据值;第三条指令将数据写回SRAM。

处理器内部的寄存器细节一般被称为编程模型

编程模型特指在编写汇编语言或底层C语言时,程序员需要关心的、可见的所有寄存器和操作规则的总和。举个例子,在编程模型里,你根本看不到“取指”“译码”这些阶段,也看不到“指令总线”和“数据总线”。你在代码里写LDR R0, [R1](读内存),编程模型告诉你“读完了,数据放进R0里”;至于CPU是靠哈佛总线同时取指取数,还是靠冯诺依曼排队取,只要最终结果正确,编程模型丝毫不会改变

3.1.2处理器架构

对于ARM处理器,架构一般指两个方面:

(1)架构。指令集架构(ISA)、编程模型、调试方法。

(2)微架构。接口信号、指令执行时序以及流水线阶段等实现相关的细节,微架构与处理器设计相关。

1个指令集架构可以包含多个微架构设计,如不同数量的流水线阶段和不同类型的总线接口。

3.1.3指令集

Cortex-M处理器使用的指令集名为Thumb(包含16位的Thumb指令和更新的32位Thumb指令)

Cortex-M3/M4处理器用到了Thumb-2技术,它允许16位和32位指令混合使用。

ARM7TDMI等经典的ARM处理器有两种操作状态:

(1)32位的ARM状态,可以执行32位ARM指令,进行复杂的操作。

(2)16位的Thumb状态,可以得到很好的代码密度。

处于Thumb状态,如果需要处理复杂操作,就要切换到ARM状态,这就会带来状态切换的开销。

Thumb-2技术的引入,处理器可以直接执行16位和32位的Thumb指令。

事实上,Cortex-M处理器不支持ARM指令,它只有16位和32位的Thumb指令。

经典的ARM处理器,在中断处理时,是一定会进入ARM状态的。

Thumb-2的优势:

(1)无状态切换开销,节省执行时间和指令空间。

(2)无须指定源文件中的ARM状态或Thumb状态,开发软件也更容易

(3)在获得最佳代码密度和效率的同时,还能很容易地达到高性能。

不同处理器的Thumb指令集的子集也不同。

3.1.4模块框图

3.1.5存储器系统

Cortex-M3/M4处理器本身不包含存储器(没有程序存储器、SRAM或缓存),它具有通用的片上总线接口。微控制器商通过这个接口,将存储器系统集成到系统中。

3.1.6中断和异常支持

Cortex-M3/M4处理器中有一个名为“嵌套向量中断控制器(NVIC)”,可编程且其寄存器经过了存储器映射。NVIC的地址固定,且编程模型对于所有Cortex-M处理器一致。

NVIC除了外设和其他外部输入的中断外,还支持多个系统异常,其中包括不可屏蔽中断(NMI)和处理器内部的其他异常源。

微控制器供应商能够决定NVIC设计实际支持的可编程中断优先级的数量。

3.2Cortex-M3和Cortex-M4处理器的特性

3.2.1性能

三级流水线结构,并且运行频率一般可以超过100Mhz。

多总线接口,指令和数据访问可以同时执行。

流水线结构的总线接口使得存储器系统可以运行较高的时钟频率。

指令集高效,执行复杂运算可以使用较少的指令。

每次取指令都是32位的,但是多数指令是16位的,因此可以一次取两条指令。

3.2.2代码密度

高代码密度

3.2.3低功耗

处理器中存在一个名为唤醒中断控制器(WIC)的可选硬件单元

3.2.4存储器系统

可寻址存储器空间共为4GB,且以32位寻址,无须将存储器分页。

所有的Cortex-M处理器的存储器映射定义都是一致的,预定义的存储器映射使得处理器设计可以为哈佛总线架构进行优化,而且访问处理器内经过存储器映射的外设(如NVIC)也非常容易。

流水线结构的AHB Lite总线接口可以提供高速且低等待的传输,AHB Lite接口支持32位、16位和8位数据的高效传输。总线协议还允许插入等待状态、支持总线错误条件及允许多个总线主控共用总线。

可选的位段特性。SRAM和外设空间中存在两个可位寻址的区域,通过位段别名地址修改的位数值会被自动转换为位段区域的读---修改---写的原子操作(参考6.7节)。

多处理器系统设计的排他访问,使用于多处理器系统中的信号量操作。

支持小端大端的存储器系统。Cortex-M3/M4处理器既可以运行在小端模式,也可以运行在大端模式。

可选的存储器保护单元

3.2.5存储器保护单元

MPU为Cortex-M3/M4处理器中的可选特性,微控制器厂商可以决定是否使用MPU。

作用:监控总线传输的可编程设备,需要通过软件配置。有MPU,应用程序可以将存储器空间分为多个部分,并设置访问权限。违反规则,产生异常错误。

应用场景:

保护OS内核和其他特权任务使用的数据,防止被破坏。

可以选择将不同用户任务的存储器隔离开。

将系统配置为只读,防止意外擦除SRAM中的数据或覆盖指令代码。

MPU默认禁止。

3.2.6中断处理

嵌套向量中断控制器(NVIC):

支持最多240个中断输入、不可屏蔽中断(NMI)输入和多个系统异常。每个中断(NMI除外)都可以被单独使能或者禁止。

中断和多个系统异常具有可编程的优先级。对于Cortex-M3/M4优先级可以在运行是动态修改(Cortex-M0/M0+不行)。

嵌套中断/异常以及中断/异常按照优先级自动处理

向量中断/异常。处理器会自动取出中断/异常向量,无需软件确定产生的是哪个中断/异常。

向量表可以重定位

中断/异常可以屏蔽。

向量表:系统存储器的一部分,其中存有中断和系统异常的起始地址。向量表默认位于存储器空间的开头,若需要,可以重定向至其他位置。

Cortex-M3/M4设备实际支持的中断数量由微控制器供应商设置。

3.2.7OS支持和系统级特性

Cortex-M3/M4支持嵌入式OS,内部具有一个系统节拍器SysTick,可以为OS定时提供周期性定时中断。

Cortex-M3/M4具有两个栈指针:OS内核和中断用的主栈指针(MSP)和任务用的进程栈指针(PSP)。OS内核和应用任务栈分离开,提高可靠性。裸机开发可以只使用MSP。

Cortex-M3/M4支持独立的特权和非特权操作模式,启动后默认处于特权模式。

应用场景:当使用OS执行用户任务时,任务可以在非特权模式执行,可以限制行为,比如访问NVIC寄存器。再加上MPU,可以防止非特权任务访问某些重要的存储器区域,破坏OS内核和数据。

Cortex-M处理器具有一些错误处理,当检测到错误(访问非法存储器地址),错误异常被触发。

3.2.8Cortex-M4的特殊特性

DSP扩展:

8位和16位单指令多数据(SIMD)指令。这些指令允许多个数据操作并行执行,主要用在音频处理,左右声道的计算可以同时执行。

支持多个饱和运算指令。

单周期16位、双16位以及32位乘累加(MAC)。

可选的浮点单元(FPU):

符合IEEE754标准的单精度浮点单元。

浮点单元支持融合MAC运算,可以提高MAC结果精度。

不需要浮点单元,可以关闭,降低功耗。

为了发挥DSP的作用,ARM提供了一个CMSIS-DSP库。

3.2.9易于使用

一般情况下,C语言就够了。

3.2.10调试支持

Flash补丁和断点单元(FPB)

通过“指令比较器”,当FPB捕获到对某个Flash地址(如一个有Bug的函数)的访问时,它不是触发断点,而是将访问重定向到RAM或Flash中另一段准备好的、正确的代码。这个功能特别适合用于修复已部署产品中无法重新烧录的Flash或ROM里的Bug。开发者可以将补丁代码放入RAM,然后配置FPB完成“偷梁换柱”。

通过调试器设置FPB的“指令比较器”,让其监视CPU发出的特定Flash地址。当CPU要执行该地址的指令时,FPB会“中途拦截”,并返回一条BKPT(断点)指令。CPU执行该指令便会触发断点,暂停运行,将控制权交给调试器。

数据监视点和跟踪单元(DWT):

DWT内部有4个比较器,你可以配置它们去监视特定的内存地址。一旦CPU对该地址进行读、写或执行操作,DWT就可以触发预定义的动作,例如:产生一个硬件观察点调试事件,让CPU进入调试模式(停机或进入调试监视器)。触发ETM(嵌入式跟踪宏单元)产生一个跟踪数据包。应用场景:这在调试数据异常时非常有用。例如,你可以监视一个关键全局变量,一旦它被意外修改,CPU会立即停下,方便你定位问题。

DWT可以生成各种硬件事件跟踪包,并通过系统的跟踪接口(如TPIU)输出,供调试器或分析工具捕获和解码。集成开发环境(IDE)中的调试器可以将数据值和其他信息呈现出来,并将数据值的改变图像化。DWT可用于产生异常事件跟踪和基本概况信息,也通过跟踪接口输出。

3.2.11可扩展性

支持多处理器系统:

排他访问指令。在多核系统中,如果两个核心同时修改同一个变量(比如对一个全局计数器执行+1操作),可能会因为“读-改-写”操作被打断,导致最终结果错误。通过总线架构中增加的硬件支持,处理器可以确定对一个共享数据存储器区域的访问是否成功执行(例如,在操作期间没有其他的处理器访问同一区域)。

可扩展的调试支持。多个处理器,可共享一个调试连接和跟踪接口。

事件通信接口。在多处理器系统中,可以让一些处理器进人休眠模式以降低功耗,而在某个处理器中的信号量操作完成等事件发生时,则可以将处理器唤醒。

3.2.12兼容性

其实就是不同处理器,代码兼容,只需稍微修改。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询