




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 TheInsidersTo TheSTM32uide一个工程师对STM32系列的介绍ARMBased M翻译:xi_liang 百为技术官方网店 技术支持论坛 前言 很久以前看到这篇文档,看到里面对 STM32 的介绍,发现了不少在 STM32 技术手册也找不到的答案。正如文档题目所说的,这可以说是一份 STM32 的技术资料。看到很多网友说学不会 STM32,其实不难怪,因为 STM32 的内容实在是太多了,一个 LED 流水灯也需要了解 Corte
2、x-m3 技术手册和 STM32 数据手册的内容,还有 Thumb-2 指令集,甚至 Keil 开发环境,和下载工具的使用。但和 ARM+linux 相比还是挺容易的。这篇文档对 Cortex-m3 和 STM32 的介绍浅显易懂,只有一百多页没有太多的废话,却介绍了 Cortex-m3 和 STM32 的绝大部分细节。于是从 2012-12 月开始我着手翻译,前后也花了不少时间,终于可以在今天完成了。 这篇文档主要研究 Cortex-m3 和STM32 的架构和实现细节。Cortex-m3 技术手册里面除了介绍编程相关内容外,可能还介绍了 Cortex-m3 芯片设计的相关内容,而这里只介绍
3、一些Cortex-m3 的主要特性和软件编程需要关注的内容。STM32 作为一个基于 Cortex-m3 的处理器,有着 Cortex-m3 的共同特性,同时也有着一些差异,例如中断优先级寄存器,Cortex-m3 定义了 8 位,而STM32 只实现了 4 位。 虽然在 ARM7,ARM9 时代研究汇编有时也很有必要,因为有不少工作需要在启动时需要用汇编来完成,如代码从 NOR 搬运到 SDRAM 等。虽然我也有一定的汇编功底,但 Thumb-2 指令集太复杂了,对于常用的编程来说研究价值并不大。 当然你不要期望这篇文章能给你的 STM32 编程水平有很大的提高,这只是作为入门的一篇文档,如
4、果你已经用过 STM32 进行编程,但还对里面的某些架构或具体实现细节不太清楚,也许这篇文章能给你带来意外收获。 2 百为技术官方网店 技术支持论坛 目录1.简介81.1 什么是 Cortex?81.2 一起来看看 STM3291.2.1 复杂性101.2.2 系统安全性111.2.3 代码安全性111.2.4 软件开发111.2.5 STM32 系列112Cortex 概述132.1 ARM 体系结构版本132.2 Cortex 处理器和 Cortex CPU142.3 Cortex CPU142.3.1
5、 流水线142.3.2 编程模型 XPSR152.3.3 CPU 工作模式162.3.4 Thumb-2 指令集172.3.5 存储器映射182.3.6 非对齐的内存访问192.3.7 位带192.4 Cortex 处理器222.4.1 总线222.4.2 总线矩阵222.4.3 系统定时器222.4.4 中断处理232.4.5 嵌套向量中断控制器 NVIC 操作异常的进入和退出 高级中断处理模式.1 中断抢占253 百为技术官方网店 技术支持论坛 www.stm32
6、.2 尾链.3 迟来2 NVIC 的配置和使用2.1 异常向量表272.5 电源管理模式312.5.1 进入低功耗模式312.5.2 CoreSight 调试支持3 指令跟踪332.6 Cortex 微控制器软件接口标准343让它工作363.1 封装类型和 PCB 封装363.2 电源363.3 复位电路373.3.1 基本硬件原理图373.4 振荡器383.4.1 外部高速振荡器383.4.2 外部低速振荡器383.4.3 时钟输出383.4.4 启动引脚和在线编程393.4.6 调试端口394.
7、STM32 的系统架构404.1 的内存布局414.1.1 寄存器地址查阅434.2 最大化性能444.2.1 锁相环4 总线配置474.2.2 FLASH 缓冲区494.2.3 直接内存访问495外设555.1 通用外设554 百为技术官方网店 技术支持论坛 5.1.1 通用 IO5 复用功能5输出605.1.2 外部中断605.1.3 ADC6 转换时间和转换组6 模拟看门狗6 基本 ADC 配置655.1.
8、3.4 双转换模式6.1 注入同步模式和常规同步模式6 常规/注入混合同步模式6 快速交叉模式和慢速交叉模式6 交替触发模式6 混合常规同步和交替触发模式6 混合注入同步和交替触发模式685.1.4 数字到模拟转换器6 DMA 支持70 转换电压和转换时间70 噪声和三角波信号发生器705.1.5 通用定时器和高级定时器7 通用定时器7.1 捕获比较单元7.2 捕获单元7.3 PWM 输入模式
9、7.4 编码器接口7.5 输出比较7.6 PWM 模式7.7 单脉冲模式7 高级定时器7.1 中断功能765 百为技术官方网店 技术支持论坛 .2 霍尔传感器接口7 定时器同步7 基本定时器785.1.6 RTC 和备份寄存器785.1.7 备份寄存器和侵入引脚795.1.8 循环冗余校验计算单位。795.2 互联性805.2.1 SPI805.2.2 内部集成音频
10、I2S 外设815.2.3 I2C825.2.4 USART835.3 CAN 和 USB 控制器855.3.1 CAN 控制器855.4 USB886低功耗工作896.1 运行模式896.1.1 预取缓冲器和半周期模式896.2 低功耗模式896.2.1 SLEEP 模式896.2.2 STOP 模式906.3 Standby 模式926.4 备份域功耗926.5 调试支持927安全特性937.1 复位控制937.2 电源电压检测947.3 时钟安全系统947.4 看门狗957.4.1 窗口看门狗957.4.2 独立看门狗976 百为技术官方网店 http:/baiweijishu.taob
11、技术支持论坛 7.5 外设特点987.5.1 GPIO 端口锁定987.5.2 模拟看门狗987.5.3 中断插入988内存区域998.1 FLASH 模块998.1.1 内部 FLASH 的安全性和编程998.1.2 擦除与写入操作1008.1.3 选项字节100 写保护10 读保护10 配置字节1018.1.4 灵活的静态存储器控制器10 NAND 和 PC 卡10 PC Card1048.1.5 SDIO 接口10 命令和数据传输10
12、SDIO 外设10.1 内部结构10.2 数据交易10.3 可用的文件系统1079开发工具1089.1 评估工具1089.2 库和协议栈1089.3 RTOS10910.结束注10911.参考书目1097 百为技术官方网店 技术支持论坛 1. 简 介在过去的六,七年里,微控制器设计领域里的主要发展趋势之一是采用 ARM7 和 ARM9 CPU 作为通用型微控制器。今天,已经有范围广泛的制造商提供大约240 个基于ARM 的微控制器。现在,ST 微电子已经推出了
13、 STM32,他们的第一个基于新的 ARM Cortex-M3 微控制器内核的 微控制器。该控制器在性能和成本,以及低功率操作和硬实时控制方面设定了新的标准。 1.1 什么是 Cortex?ARM Cortex 系列是新一代的,一个为广泛的技术需求提供标准架构的处理器。与其他的ARM 处理器不同,Cortex 系列是一个完整的处理器核心,一个标准的 CPU 和系统架构。Cortex 系列有三个主要的配置系列:A 为高端应用系列,R 为实时应用系列,M 为成本敏感和微控制器应用系列。STM32 属于M 配置系列,专为高系统性能与低功耗相结合设计的。它有足够低的成本,足以挑战传统的 8 位和 16
14、 位微控制器。 虽然 ARM7 和 ARM9 的CPU 已经被成功地集成到标准的微控制器,但它们的结构还是不尽相同的。尤其在异常和中断处理方面,这个是特别明显的,因为每一个特定制造商都在设计 自己的解决方案。Cortex-M3 提供了一个超越了 CPU 的标准的微控制器核心(包括中断系统的整个心脏,SysTick 定时器,调试系统和内存映射)。 Cortex-M3 的 4Gbyte 地址空间被分成明确定义的区域:代码区,SRAM 区,外设区和系统外设区。与 ARM7 不同的是,Cortex-M3 是一个哈佛结构的处理器,所以有多条总线,允许执行并行操作,提高其整体性能。与早期 的 ARM 架构
15、不同,Cortex 系列允许未对齐的数据访问。这将确保最有效地利用内部 SRAM。Cortex 系列还有一个称为位带的方法,支持在两个 1M byte 的内存区域里进行位设置和清除。这样可以有效地访问位于 SRAM 存储器的外设寄存器和标志,而不需要一个完整的布尔 处理器。 STM32 的核心是 Cortex-M3 处理器。Cortex M3 处理器是一个标准化的微控制器,包括 32 位CPU,总线结构, 嵌套的中断单元,调试系统和标准内 存布局。 8 百为技术官方网店 技术支持论坛 Cortex-M3 核
16、心的关键部件之一是嵌套向量中断控制器(NVIC)。NVIC 为所有基于 Cortex的微控制器提供了一个标准的中断结构和异常中断处理。NVIC 提供专用的中断向量多达 240 个中断源,其中每个中断源都可以设置独立的优先级。 NVIC 已被设计为可以极其快速地处理中断。所花费的时间从接收到中断到进入中断服务程序的第一行代码只有 12 个周期。这其中一部分是通过在 CPU 内的微代码的自动堆栈处理实现的。在连续中断的情况下,NVIC 使用“尾链”的方法,使连续中断服务只有 6 个周期的延迟。在中断嵌套阶段,一个高优先级的中断可以抢占低优先级的中断而不产生任何额外的 CPU 周期。中断结构还紧密耦
17、合到Cortex-M3 内核的低功耗模式内。这使得配置 CPU 从一个中断退出时自动进入一种低功耗模式是可能的。然后核心保持休眠,直到另一个异常或中断的到来。 尽管 Cortex-M3 作为一种低成本的核心设计,但它也还是一个 32 位的 CPU,因此支持两个操作模式:线程模式和处理程序模式,每种模式可以配置自己的栈。这使得它支持更复 杂的软件设计和更多的实时操作系统。 Cortex 核心还包括一个 24 位自动重装定时器,可以为RTOS 内核提供一个周期性的中断。ARM7 和 ARM9 CPU 具有两个指令集(ARM 32 位 Thumb 16 位指令集),Cortex 系列支持 ARM T
18、humb-2 指令集。这种混合 16 位和 32 位的指令,为客户提供 32 位的 ARM 指令集的性能和 16 位 Thumb 指令集的代码密度。Thumb-2 指令集是一个丰富的指令集,被设计作为 C / C + +编译器的目标。这意味着在 Cortex 应用程序完全可 以用 C 编码。 1.2 一起来看看 STM32ST 已经有四个 ARM7 和 ARM9 微控制器系列,但 STM32 的性价比有着显著的提升。批量 1 欧元多一点的价格, STM32 对现有的 16 位微控制器来说是一个严峻的挑战。在写作本文的时候,STM32 已经发布了超过 75 个不同的型号。这些被分成四组:CPU
19、时钟高达 36Mhz 的基本型,CPU 时钟高达 72MHz 的增强型,增加 USB device 外设并且运行在时钟速度为 48MHz 的USB 型,称为互联型的第四组型号已经发布。互联型增加的先进通信外设包括以太网 MAC 和USB HOST/ OTG 控制器。所有组的型号的引脚和软件兼容,并且提供 FLASH ROM 容量高达 512K 和64K SRAM。由最初的版本到现在,STM32 已经可以扩展到包括更大的 RAM 和 FLASH,以及 更复杂外设的设备。 低密度型设备;增强型和基本型9 百为技术官方网店 技术支持论坛 www
20、.中密度型设备;增强型和基本型高密度设备;增强型和基本型1.2.1 复杂性乍一看,STM32 外设集看起来像一个典型的小型微控制器,具有外围设备如双 ADC,通用定时器,I2C,SPI,CAN,USB 和一个实时时钟等等。不过这些外设的功能是非常丰富的。例如12 位 ADC,具有一个集成的温度传感器和多个转换模式,并且双 ADC 可以主从组合成ADC 的九种转换模式。同样地,四个定时器每个有四个捕捉比较单元,每个定时器模块,也可以与其他定时器模块组合,构建复杂的定时器阵列。高级定时器能支持更复杂的电机控制, 有 6 个带有可编程死区时间和中断输入线的 PWM 输出,可强
21、制 PWM 信号到一个预先编程好的 安全状态。SPI 外设有一个 8 位和 16 位硬件 CRC 发生器用来支持 SD 和MMC 卡接口。 令人惊讶的是,STM32 的小型微控制器还包括多达 12 通道的 DMA 单元。每通道可以用来传输 8/16/32 位数据到任何内存位置的外设寄存器,或从任何内存位置的外设寄存器接收数据。每一个外围设备都可以是一个的 DMA 流控制器,根据需要发送或接收数据。内部总线仲裁器和总线矩阵,最大限度地减少了 CPU 的数据访问和 DMA 通道之间的仲裁。这意味着, DMA 单元在微控制器内是灵活的,易于使用,真正实现自动化数据流的。 STM32 是一款低功耗和高
22、性能的微控制器。它可以以 2V 电压供电运行在 72MHz,所有功 10 百为技术官方网店 技术支持论坛 能跑起来仅消耗 36mA。结合 CORTEX 低功耗模式,STM32 待机功耗仅为 2A。一个内部 8MHz RC 振荡器,使得该芯片能够在外部振荡器仍然处于启动的情况下,迅速退出低功耗模式下。 这种快速的进入和退出低功耗模式,进一步降低了整体功耗。 1.2.2 系统安全性在要求更多的处理能力和更先进的外围设备的同时,越来越多的现代应用程序要求工作 在安全重要的环境。考虑到这一点,STM32 有很多的硬
23、件特性帮助支持高度集成的应用。其中包括一个低功耗电压检测器,时钟安全系统和两个独立的看门狗。第一个看门狗是一个窗 口看门狗。这个看门狗,必须在规定的时间内刷新。如果你处理太早,或者太晚,看门狗会 触发。第二个看门狗是一个独立的看门狗,拥有自己的独立于主系统时钟的外部振荡器。进 一步的时钟安全系统可以检测到外部主振荡器的故障,然后从故障安全地返回到内部 8MHz RC 振荡器上。 1.2.3 代码安全性现代设计的其他不幸的要求之一是需要代码的安全性,以防止软件盗版。这里的 STM32 FLASH 可以通过调试端口锁定对 Flash 读的访问。可以读保护的同时,Flash 存储器还有写保护功能,以
24、防止不受信任的代码从中断向量表插入。进一步的写保护功能,可以在剩余FLASH存储器部分启用。STM32 还有一个实时时钟和一个小面积电池供电的 SRAM。此区域具有防篡改输入,可以在状态变化时触发中断。此外,防篡改的内容。 将自动清除电池备份 SRAM 1.2.4 软件开发如果你已经在使用基于 ARM 的微控制器,有个好消息是,你的开发工具已经支持 Thumb-2 指令集和 Cortex 系列。最坏的情况是需要软件升级,以获得必要的支持。 ST 还提供了外设驱动程序库,USB 开发库作为一个 ANSI C 库,源代码与先前他们公布的 STR7 库和 STR9 微控制器的库兼容。这些库的移植已经
25、支持流行的编译器工具。同样,许多开源和商业的RTOS 和中间件(TCP/ IP,文件系统等)可用于 Cortex 系列。在 Cortex-M3 还配备了一个全新的调试系统 CoreSight。访问 CoreSight 系统是通过一个支持标准 JTAG 的接口或串行线(2 线) 接口来访问。STM32 的 CoreSight 系统提供调试运行控制的同时,还提供了一个数据观察点和一个指令跟踪功能。该指令跟踪模块可以发送指定的应用程序信息到调试工具。 这可以提供扩展的调试信息,可以用来在软件测试期间调试。 1.2.5 STM32 系列STM32 系列有四个不同的分支。这些被归类为增强型,基本型和 U
26、SB 型设备.ST 也宣布了第四组型号被称为互联型。在用户手册中,增强型,USB 型和基本型也被称为高,中,低密度设备。在增强型,基本型和 USB 型设备中,内存大的比内存小的嵌入外设更丰富。因此, 有三个内存容量范围和相应的外设集。低密度设备的 FLASH 容量大小为 16KB 到 32KB 并有最小的存储集。中密度设备的 Flash 存储器容量大小为 64KB 到 128KB,而高密度器件 FLASH 容量大小为 256KB 到 512KB,并且具有最丰富的外设集。 11 百为技术官方网店 技术支持论坛 www.stm32bbs.co
27、m基本型是入门级的 STM32 系列产品线,运行在 36MHz 并具有简单的外设集。增强型运行在 72MHz,并提供更多的外围设备。 USB 型添加一个 USB device,用于对成本敏感的 USB 应用程序。 ST 还宣布STM32 系列的一个新的分支称为互联型。该系列给 STM32 带来了先进的通信外设包括一个双重角色的 USB 控制器和以太网 MAC。这个双重角色 USB 可以作为 USB 设备控制器或 USB 主机/ OTG 控制器。以太网 MAC 还包括 IEEE1588,支持实时以太网协议。重要的是,所有不同型号之间的封装类型和引脚布局是兼容的。这使得不同型号的 STM32 互换
28、,只需要较少的软件工作量,而无需重画 PCB。 12 百为技术官方网店 技术支持论坛 2Cortex 概述正如我们在简介中所看到的,Cortex 处理器是从 ARM 继承的下一代嵌入式核心。和早期的 ARM CPU 有点不同的是,Cortex 是一个完整的处理器核心,由 Cortex CPU 和周围的一整套系统外设组成,提供了一个嵌入式系统的核心。为了满足各种各样的嵌入式系统的需求, Cortex 处理器提供了各种应用配置系列。这些系列由 Cortex 后的字母名称表示。这三个系列如下: Cortex-A
29、系列,支持复杂的操作系统和用户应用的应用处理器系列。支持 ARM,Thumb 和Thumb-2 指令集。 Cortex-R 系列,实时系统应用系列。支持 ARM,Thumb 和Thumb-2 指令集。 Cortex-M 系列,为低成本应用进行了优化的控制器系列。 仅支持 Thumb-2 指令集。 Cortex 名称后面的数字是指对应的性能水平,1 为最低,而 8 是最高的。目前在 Cortex-M 系列中性能水平最高的级别是 3。STM32 是基于 Cortex-M3 处理器的基础上的。 2.1 ARM 体系结构版本ARM 也表示对自己的处理器与体系结构的版本有点混乱。 (这里用于 ARMv6
30、,ARMv7 体系等)Cortex M3 的体系结构版本是 ARMv7 M. Cortex-M3 处理器是基于 ARMv7 体系结构并能够执行 Thumb-2 指令集的。 因此, Cortex-M3 的文档包括 Cortex-M3 技术参考手册和 ARMv7 体系结构参考手册。 这些文件可以从 ARM 网站 上下载。 13 百为技术官方网店 技术支持论坛 2.2 Cortex 处理器和 Cortex CPU在整个这本书的其余部分中,术语 Cortex 处理器和 Cortex CPU
31、将被用来区分完整的Cortex 嵌入式内核(STM32)和内部 RISC CPU。在下一节中,我们将着眼于 Cortex CPU 的关键特性,然后再 Cortex 处理器(STM32)的系统外围设备。 2.3 Cortex CPU在 Cortex 处理器的核心,是一个 32 位的RISC CPU。该 CPU 具有一个简化版本的 ARM7 / 9 编程模型,但具有更丰富的指令集,具有良好的整数支持,更好的位操作和硬实时性能。 2.3.1 流水线Cortex CPU 可以在一个周期内执行大多数指令。和 ARM7 和 ARM9 的 CPU 一样,这是由一个三级流水线来实现的。 当一条指令在被执行时,
32、下一条指令被译码和第三条指令被从存储器中取出。这在正常 顺序执行的情况下工作得非常好,但是当遇到分支时,流水线必须进行刷新和重填,才可以 继续执行代码。在 ARM7 和 ARM9 CPU 中,分支在代码的性能上是非常耗费的。在 Cortex CPU 中三级流水线效率是通过分支预测来增强的。这意味着达到,条件分支指令到来时,预测取 指动作被执行,使两个分支的指令都可以被执行,而不会导致性能的下降。最坏的情况是一 个间接分支的预测取指不能被执行,而这时唯一的办法是,冲洗流水线。虽然流水线是 Cortex CPU 的整体性能的关键,但在应用程序代码上没有什么特别需要考虑的。 2.3.2 编程模型Co
33、rtex CPU 是一个有加载和存储体系结构的 RISC 处理器。为了执行数据处理指令,操作数必须被加载到一个中央寄存器,数据操作必须在这些寄存器上执行,并且把结果回存到 内存上。 14 百为技术官方网店 技术支持论坛 因此,所有的程序活动重点围绕 CPU 寄存器。这些寄存器包括 16 个 32 位寄存器。寄存器 R0-R12 是简单的寄存器可以用来存放程序变量。寄存器 R13-R15 在Cortex CPU 内具有特殊的功能。寄存器 R13 用作堆栈指针。这个寄存器是分块的,它允许在 Cortex CPU
34、 有两种操作模式(线程模式和处理模式),每种操作模式都有自己独立的栈空间。这通常用于 RTOS中,即可以在保护模式下运行“系统”代码。Cortex CPU 有两个堆栈称为主堆栈和进程堆栈。接下来的寄存器 R14 是链接寄存器。该寄存器是用来存储程序调用时的返回地址。这使得Cortex CPU 可以快速地进入和退出程序。如果你的代码调用几级子程序,编译器将自动把R14 存储在栈上。最后的寄存器R15 是程序计数寄存器,因为它也是中央寄存器的一部分, 所以它也可以像其他寄存器一样进行读写操作。 XPSR除了中央寄存器之外,还有有一个单独的寄存器,程序状态寄存器。它不是中央寄存器的一
35、部分,它仅能够通过两个专用的指令 MRS 和MSR 进行操作。xPSR 包含了一些影响 Cortex CPU 执行的字段。 xPSR 的寄存器也可以通过三个特殊的别名 APSR、IPSR 和 EPSR,对 xPSR 子范围内的位进行访问。前 5 位是条件代码标志,别名是应用程序状态寄存器(Application Program Status Register)。前四个条件代码标志 N,Z,C,V(负数,零,进位和溢出)将根据数据处理指令的结果被设置或清零。Q 位是由 DPS 饱和数学指令使用,用来表明变量已经达到它的最大值或最小值。和 ARM 32 位指令集一样,某些 Thumb-2 指令仅当
36、满足应用程序状态寄存器的条件码标志状态时才被执行。如果该指令条件码不匹配,则该指令通过流水线时作 为 NOP 指令处理。这将保证指令顺利通过流水线,并最大限度地减少流水线冲洗。在 Cortex CPU 中, 执行程序状态寄存器(Execution Program Status Register)使得这一技术得以扩展。这个是位 26 - 8 的 xPSR 的别名。这包含三个区:“IF then”区,“中断-可继续指令区”,和Thumb 指令状态区。Thumb-2 指令集在执行小块的“IF then”块指令时,有一个有 效的方法。当条件测试为真,它可以在“IF then”位设置一个值,告诉 CPU
37、 可以执行到下 百为技术官方网店 技术支持论坛 面四个指令。如果条件测试为假,这些指令会在通过流水线时作为 NOP 指令处理。因此,一个典型的流水线 C 将被编码如下: If (r0 =0)CMP r0,#0 ITTEE EQThen r0 = *r1;compare r0 to 0;if true execute the next two instructions+2;LDR r0,r1ADDr0,#2;load contents of memory location into r0;add 2大多数 T
38、humb-2 指令在一个周期内被执行,而有些指令(如多寄存器加载和存储指令) 却需要多个周期。因此,Cortex CPU 可以有一个明确的中断响应时间,这些指令必须是可以被中断的。当一条多寄存器加载/存储指令被提前终止时,中断继续指令区将存储将要作的下一个寄存器的编号。因此,一旦中断服务程序完成后,多寄存器加载/存储指令可 以继续执行。最后的 Thumb 指令状态区是继承自早期的 ARM 处理器的。此区表示,目前正在被 CPU 执行的是 ARM 指令集还是 Thumb 指令集。在 Cortex-M3,该位始终设置为 1。最后, 中断状态寄存器(Interrupt Status Register
39、s)包含当前被激活的中断编号。 2.3.3 CPU 工作模式虽然 Cortex 处理器是一个低门数,速度快,易于使用的微控制器核心,但它已被设计为支持使用实时操作系统。 Cortex 处理器有两种操作模式:线程模式和处理模式。当 CPU 在非中断背景模式执行时,它将运行在线程模式下,当执行异常时,它将切换到处理模式。 此外,Cortex CPU 可以在或非模式下执行代码。在模式下,CPU 可以访问完整的指令集。在非模式下某些指令将被禁用(如允许访问 xPSR 和它的别名的 MRS 和 MSR 指令)。此外, Cortex 处理器系统控制空间的大部分寄存器也将被禁用。堆栈的使用也可以被配置。主堆
40、栈(R13)可以用在线程模式和处理模式这两种模式。另外,处理模式模式 也可以被配置为使用进程堆栈(R13 bank 寄存器)。 Cortex-M3 可用在一个“平”的简单模式。它也被设计为支持实时操作系统。它具有处理模式和线程模式,可以被配置为使用主栈或进程栈并有Cortex 系统控制寄存器。 访问 16 百为技术官方网店 技术支持论坛 复位后 Cortex 处理器将运行在一个“平”的配置。线程模式和处理模式这两种模式都是运行在模式下,所以对任何处理器资源的访问都没有任何限制。线程模式和处理模式 都可以使用
41、主堆栈。为了开始执行,只需要对 Cortex 处理器的复位向量和堆栈的开始地址进行配置,然后你就可以开始执行你的应用程序 C 代码了。但是,如果你使用的是 RTOS 或正在开发一种安全攸关的应用程序,该芯片可以被用在高级模式配置,即处理模式(异常和RTOS)运行在模式下,使用主堆栈,而在非访问的线程模式下运行应用程序代码, 使用进程堆栈。这种系统代码和应用程序代码进行分区的方式使得应用程序代码中的错误不 会导致 RTOS 。 2.3.4 Thumb-2 指令集ARM7 和 ARM9 CPU 可以同时执行两个指令集:32 位的 ARM 指令集和 16 位的 Thumb 指令集。这允许开发人员通过
42、选择不同的指令集来优化其程序:32 位指令的速度和 16 位指令的代码压缩。Cortex CPU 执行Thumb-2 指令集,这是一个混合的 16 位和 32 位指令。Thumb-2 指令集提供了32 位ARM 指令集26代码密度的提高和16 位Thumb 指令集25性能的提升。Thumb2 指令集具有一些改进的可以在一个单周期内执行的乘法指令和大约需要 2 - 7 周期 的硬件除法器。 Cortex 处理器 benchmarks 提供 1.2 DMIPS / MHz 的性能水平,即是每指令1.2 个时钟周期。 17 百为技术官方网店 技
43、术支持论坛 Thumb-2 指令集也有改进的分支指令,包括测试和比较,IF then 条件执行块和数据操作的字节顺序和字节和半字提取指令。作为一个 RISC 处理器,Cortex CPU 还具有丰富的专门为 C 编译器目标设计的指令集。 Cortex-M3 的一个典型项目,将完全由 ANSI C 编写,使 用最少的非 ANSI 关键字,并且只有异常向量表是由汇编语言编写的。 2.3.5 存储器映射Cortex-M3 处理器 一个标准的微控制器核心,并具有一个明确定义的内存映射。尽管有多个内部总线,这个内存映射是线性的 4G 字节的地址空间。 Cortex-M3
44、定义了一个固定的 4GB 内存映射,指定了代码区、SRAM 区、外设区、外部存储器或设备和 Cortex 系统寄存器的区域范围。此内存映射适用于所有基于 Cortex 的设备。 第一个 1GB 的内存空间被分为代码区和SRAM 区。代码空间被优化为从I-Code 总线执行。同样,SRAM 由 D-Code 总线访问。虽然代码可以从 SRAM 加载和执行,但指令从系统总线提取,这将会产生额外的等待状态。这很可能是因为从 SRAM 上运行,比从位于代码区的片上FLASH 存储器上运行代 速度要慢。接下来的 0.5GB 的存储空间是片上外设区。所有由微控制器供应商提供的用户外设将设在这个区域。SRA
45、M 和外设区中的第一个 1M 字节是可位寻址的, 使用的技术称为位带技术。由于 STM32 所有的 SRAM 和所有用户外设位于这些区域,STM32所有的内存位置都可以用一个字或位的方式进行操作的。接下来的 2GB 的地址空间被分配给 外部 SRAM 和外部设备。最后的 0.5 GB 被分配给内部的 Cortex 处理器外设 一个给供应商 百为技术官方网店 技术支持论坛 自定义 Cortex 处理器增强功能的区。所有 Cortex 处理器的寄存器在所有基于 Cortex 的微控制器中有固定地址。这使得代码很
46、容易被移植到不同的 STM32 型号之间以及其他厂商的Cortex 微控制器上。只需要学习一个处理器,只需要投资一种工具集,就有大量的代码可 以在广泛的微控制器中重用。 2.3.6 非对齐的内存访问ARM7 和ARM9 的指令集能够访问字节,有符号和无符号半字和字变量。这使得 CPU 自然地支持整数变量,而不需要那种通常在 8 位和 16 位微控制器上需要的软件库的支持。但是, 早期的 ARM 处理器的缺点是,他们只能做字或半字对齐访问。这限制了编译连接器将数据存放到SRAM 的能力和一些有效的 SRAM 空间将被浪费。 (这可以是高达 25的,取决于所使 用的变量的组合。) Cortex-M
47、3 可以使用未对齐的内存访问,这确保 SRAM 是被有效使用的。 Cortex CPU 有字,半字和字节寻址模式,但能够对非对齐的内存进行访问。这使得编译链接器可以完全自由地在内存中安排程序数据。Cortex CPU 额外的位带支持允许程序的 标志被包装成一个字或半字变量,而不是每个标志使用一个字节。 2.3.7 位带早期的ARM7 和 ARM9 的CPU 只能在 SRAM 和外设存储器位置上通过使用 AND 和 OR 指令执行位操作。这需要一个读-修改-写操作,在设置和清除位需要的周期数量和对每一个位操作 所需的整体代码空间方面来说,这是很昂贵的。 19 百为技术官方网店 http:/bai
48、技术支持论坛 为了克服这个限制,将有可能引入一个专用的位设置和清除指令,或者一个完整的布尔 处理器,但是这将会增加 Cortex CPU 的大小和复杂性。取而代之的是,一个叫位带的技术允许直接位操作外设区和 SRAM 区内存空间,而不需要其他任何特别指令的介入。Cortex 存储器映射中的位寻址区域是由位带区(容量高达 1M byte 的实际存储器或外设寄存器)和占用内存映射32M byte 的位带别名区组成的。位带技术把位带区域中的一个位映射到别名区中的一个字地址。因此,通过设置和清除别名区字地址,我们可以设置和清除真正内
49、存中的 位。 位带支持 SRAM 区和外设区的第一个 1M 字节。这涵盖了 STM32 的所有资源。 这使得我们能够执行独立的位操作,而不需要特别的指令,并使 Cortex 核心保持了尽可能小的整体尺寸。在实践中,我们需要计算一个在外设区或 SRAM 区中指定内存位置的位 带别名地址。计算别名地址的公式如下: 位带别名区的地址位带字偏移 =位带别名区的基地址+位带字偏移位带基地址偏移*32+位号*4 这比一开始看起来要容易得多。对于一个实际的例子,GPIO 输出数据寄存器被设计为可以设置和清除单个 IO 线。端口 B 输出寄存器的物理地址是 0x40010C0C。在这个例子中, 我们可以使用上
50、面的公式来设置和清除这个字的第 8 位。 字地址 外设位带基地址 外设位带别名基地址位带基地址偏移 位带字偏移 位别名地址 =0x40010C0C 0x40000000 0x42000000 0x40010C0C-0x40000000=10C0C (0x10C0C*32)+(8*4)=0x2181A0 0x42000000+0x2181A0=0x422181A0 现在,我们可以用下面的 C 代码来创建一个指针指向这个地址:#definePortBbit8 (*(volatile unsigned long *) 0x422181A0 )然后,可以使用这个指针来设置和清除IO端口位: PortB
51、bit8 = 1;对应产生下面的汇编指令: /led onMOVSLDRr0,#0x01r1,pc,#10420 百为技术官方网店 技术支持论坛 STRr0,r1,#0x00熄灭指示灯: PortBbit8 = 0;对应生成下面的汇编指令: /led offMOVS LDRSTRr0,#0x00 r1,pc,#88r0,r1,#0x00设置和清除操作占用3 个16 位指令,STM32 运行在72 MHz 时这些指令的执行时间为80ns。在外设和 SRAM 位带区域的任何字,也可以直接字存取,这样我们就可以使
52、用更传统的 AND 和 OR 方法进行同样的设置和清除操作: GPIOB-ODR|= 0x00000100;/LED onLDR ADDS LDR ORR LDRSTRr0,pc,#68 r0,r0,#0x08 r0,r0,#0x00 r0,r0,#0x100 r1,pc,#64r0,r1,#0xC0CGPIOB-ODR&=!0x00000100;/LED offLDR ADDS LDR MOVS LDRSTRr0,pc,#40 r0,r0,#0x08 r0,r0,#0x00 r0,#0x00 r1,pc,#40r0,r1,#0xC0C这种情况下每个设置和清除操作需要一个混合的 16 位和 3
53、2 位操作,每个操作至少需要14 个字节,并且在相同的时钟频率下最少要 180ns。如果你考虑在一个典型的嵌入式应用程序中设置和清除大量外设寄存器的位,并在 SRAM 上使用信号量和标志时位带带来的影响, 你会很清楚要明显节省代码空间和执行时间,而这些都在 STM32 的头文件帮你处理好了。 库函数例程中相关代码: 位带别名地址计算公式为: bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number x 4) 其中 bit_word_addr 是位带别名地址,bit_band_base 是位带别名区基地址,byte_offs
54、et 是在位带区的偏移 = 位带区地址 - 位带区基地址,bit_number 表示位带区地址中的第几位。 #define Var_ResetBit_BB(VarAddr, BitNumber) (*(vu32 *) (RAM_BB_BASE | (VarAddr(BitNumber) 2) = 0)- RAM_BASE) 5)|#define Var_SetBit_BB(VarAddr, BitNumber) (*(vu32 *) (RAM_BB_BASE | (VarAddr(BitNumber) 2) = 1)- RAM_BASE) 5)|#define Var_GetBit_BB(Va
55、rAddr, BitNumber)21 百为技术官方网店 技术支持论坛 (*(vu32 *) (RAM_BB_BASE | (VarAddr - RAM_BASE) 5) |(BitNumber) 2)2.4 Cortex 处理器2.4.1 总线Cortex-M3 处理器具有一个哈佛架构,具有独立的代码和数据总线。这些分别被称为ICode 总线和 DCode 总线。这些总线都可以访问地址范围 0X00000000 - 0x1FFFFFFF 的代码和数据。另外,系统总线是用来访问地址范围为 0x200000000 - 0xDFFFFFFF 和 0xE0100000 - 0xFFFFFFFF 的 Cortex 系统控制空间的。Cortex 的片上调试系统另外有一个总线结构称为 专用外设总线。 2.4.2 总线矩阵系统总线和数据总线是通过一组由高速总线排列组成的一个总线矩阵来连接到外部微控制器的。这使得 Cortex 总线和其他外部总线主设备(如 DMA),到片上资源(如 SRAM 和外设)之间有多个并行的路径。如果两个主机(即 Co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 鹤壁市一模高三数学试卷
- 湖北武汉小升初数学试卷
- 淮南高一数学试卷
- 云南省石林彝族自治县民族中学2025年物理高一下期末学业水平测试试题含解析
- 中国硅酸盐水泥行业发展监测及投资战略研究报告
- 氨压力表阀行业深度研究分析报告(2024-2030版)
- 2025年中国套锅行业发展潜力分析及投资方向研究报告
- 2025年中国电液舵机行业发展前景预测及投资规划建议报告
- 2024年金属基超硬材料项目资金筹措计划书代可行性研究报告
- 藁城区早婚管理办法细则
- 安保人员考试题目及答案
- 供水生产培训
- 颊间隙感染护理课件
- 声发射技术裂纹监测
- 2025年河南省中考物理试卷及答案
- 钻孔工安全培训试题
- 宪法讲解课件
- 机械CAD-CAM技术课件
- 2025年山西省中考英语试卷真题(含答案详解)
- 2025-2030年环氧丙烷产业市场深度调研及发展趋势与投资战略研究报告
- 2024年河南省渑池县卫生局公开招聘试题带答案
评论
0/150
提交评论