分享

STM32有一颗什么样的“心”?

 龙之吻6iinxl8c 2018-05-15

STM32有一颗什么样的“心”?

如果说MCU是一块开发板的核心,那么内核就是MCU的核心。作为世界上最大的开源硬件厂商ARM的拳头产品,STM32成为了市面上应用最广泛的嵌入式系统开发平台。在ARM众多的内核(如ARM V系列内核、ARM Cortex-M系列内核)中,STM32搭载的是哪款内核呢?今天,小编就向您介绍一下STM32的内核——Cortex-M3。

MCU的主要组成有:内核、储存器、外设。大部分刚接触MCU的人员一般是从关注外设的使用开始,但对于要深入理解MCU工作原理,了解MCU的内核、储存器这两部分内容是很有必要的。本文将以Cortex-M3内核为例对MCU的内核做一个简要分析。主要关注以下三个问题:

定义:Cortex-M3内核是什么?

结构:Cortex-M3架构是怎么样的?

功能:Cortex-M3架构各模块各有什么用?

下面我们来通过解答以上三个问题来初步认识Cortex-M3内核。

一、Cortex-M3内核是什么(定义)?

Cortex-M3内核是单片机的中央处理器单元CPU。

Cortex-M3内核与基于Cortex-M3的MCU区别:

基于Cortex-M3的MCU:Cortex-M3+存储器+外设等。Cortex-M3内核通过接口总线的形式挂载了储存器、外设、中断等组成一个MCU。

STM32有一颗什么样的“心”?

二、Cortex-M3架构是怎么样的(结构)?

特点:

1、Cortex-M3是一个32位处理器内核。内部的数据路径是32位,寄存器是32位,存储器接口是32位。

2、Cortex-M3采用哈佛架构。拥有独立的指令总线和数据总线,取指与数据访问可以同时进行。

3、支持小端模式、大端模式。

组成介绍:

Cortex-M3内核的架构如下图所示,本文我们主要关注架构图中标了序号的模块。有:

寄存器组、NVIC、中断和异常、储存器映射、总线接口、调试支持、指令集(注:数字序号与图中序号对应)。

STM32有一颗什么样的“心”?

三、Cortex-M3架构各模块各有什么用(功能)?

1、寄存器组

STM32有一颗什么样的“心”?

1、R0-R12:通用寄存器

R0-R12都是32位通用寄存器,用于数据操作。绝大多数16位Thumb指令只能访问R0-R7,32位Thumb-2指令可以访问所有寄存器。

2、R13:两个堆栈指针。

CM3拥有两个堆栈指针,都是banked,因此任一时刻只能使用其中一个。

主堆栈指针MSP:复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程。

进程堆栈指针PSP:由用户的应用程序代码使用。

堆栈指针的最低两位永远是0,意味着堆栈总是4字节对齐。

3、R14:连接寄存器

当调用一个子程序时,由R14存储返回地址。不像大多数其他处理器,ARM为了减少访问内存的次数,把返回地址直接存储在寄存器中。这样足以使很多只有1级子程序调用的代码无需访问内存(堆栈内存),从而提高子程序调用的效率。如果多于1级,则需要把前一级的R14值压到堆栈里。

4、R15:程序计数寄存器

指向当前的程序地址,如果修改它的值,就能改变程序的执行流。

5、特殊功能寄存器

PSRs:程序状态字寄存器组

PRIMASK,FAULTMASK,BASEPRI:中断屏蔽寄存器组

CONTROL:控制寄存器

特殊功能寄存器的功能描述如下图所示。

STM32有一颗什么样的“心”?

STM32有一颗什么样的“心”?

2、NVIC嵌套向量中断控制器

1、可嵌套中断支持。可嵌套中断支持,覆盖所有的外部中断和绝大多数系统异常。这些异常可以赋予不同的优先级。当前优先级被存储在xPSR的专用字段。当一个异常发生时,硬件会字段比较该异常是否与当前的异常优先级更高,如果发现来了更高优先级的异常,处理器就会中断当前的中断服务程序,而服务新来的异常。

2、向量中断支持。当开始响应一个中断后,Cortex-M3会自动定位一张向量表,并且根据中断号从表中找出ISR的入口地址,然后跳转过去执行。

3、动态优先级调整。软件可以在运行时期更改中断的优先级,如果在某ISR中修改了自己所对应中断的优先级,而且这个中断又有新的实例处于悬起中,也不会自己打断自己,从而没有重入风险。

4、中断延迟大大缩短。Cortex-M3为了缩短中断延迟,引入了几个新特性,包括自动的现场保护和恢复,以及其它的措施,用于缩短中断嵌套时的ISR间延迟。

5、中断可屏蔽。既可以屏蔽优先级低于某个阈值的中断/异常(设置BASEPRI寄存器),也可以全体封杀(设置PRIMASK和FAULTMASK寄存器)。这是为了让时间关键的任务能在死线到来前完成,而不被干扰。

3、中断和异常

Cortex-M3的所有中断机制都由NVIC实现。除了支持240条中断之外,NVIC还支持16-4-1=11个内部异常源(4+1个为保留),可以实现fault管理机制。结果,Cortex-M3有了256个预定义的异常类型。

虽然Cortex-M3支持240个外中断,但具体使用了多少个是由芯片生产商决定。Cortex-M3还有一个NMI(不可屏蔽中断)输入脚,当它被置为有效时,NMI服务函数会无条件地执行。

4、存储器映射

Cortex-M3支持4GB存储空间。

不像其它的ARM架构,它们的存储器映射由半导体厂商说的算。Cortex-M3预先定义了“粗线条的”存储器映射。通过把片上外设的寄存器映射到外设区,就可以简单地以访问内存的方式来访问这些外设的寄存器,从而控制外设的工作。不要每学一种不同的单片机就要熟悉一种新的存储器映射。

各个分区存储器映射如下图,有Code区(Flash区)、片上SRAM区、片上外设区、片外RAM区、片外外设区、Cortex-M3私有外设区。

STM32有一颗什么样的“心”?

5、总线接口

Cortex-M3内部有若干个总线接口,以使Cortex-M3能同时取址和访内(访问内存):

1、指令存储区总线(两条):有两条代码存储区总线负责对代码存储区的访问,分别是I-Code总线和D-Code总线。前者用于取指,后者用于查表等操作。(对应架构图中的数字序号⑴)

2、系统总线用于访问内存和外设。覆盖的区域包含SRAM、片上外设、片外RAM、片外扩展设备,以及系统级存储区的部分空间。(对应架构图中的数字序号⑵)

3、私有外设总线负责一部分私有外设的访问,主要是访问调试组件。它们也在系统级存储区。(对应架构图中的数字序号⑶)

6、调试支持

Cortex-M3在内核水平上搭载了若干种调试相关的特性。最主要的就是程序执行控制,包括停机(halting)、单步执行(stepping)、指令断点、数据观察点、寄存器和存储器访问、性能速写以及各种跟踪机制。

目前可用的DPs包括SWJ-DP,既支持传统的JTAG调试,也支持新的串行线调试协议SWD。

7、指令集

Cortex-M3只使用Thumb-2指令集,它允许32位指令和16位指令水乳交融,代码密度和处理性能两手抓。

在过去,做ARM开放必须处理好两个状态。32位的ARM状态和16位的Thumb状态,这两个状态是井水不犯河水。当处理器在ARM状态下时2,所有的指令均是32位的,那怕是NOP指令,此时性能相当高。在Thumb状态下,所有的指令均是16位的,代码密度提高了一倍。但是,Thumb状态下的指令功能是ARM下的一个子集,结果可能需要更多条的指令区完成相同的工作,导致处理性能下降。

为了取长补短,很多应用程序都混合使用ARM和Thumb代码段。这种混合使用有额外开销,时间和空间上都有,主要发生在状态切换时,另一方面,ARM代码和Thumb代码需要以不同的方式编译,这也增加了软件开发管理的复杂度。

如下图为ARM7处理的状态切换图。

STM32有一颗什么样的“心”?

Cortex-M3只使用Thumb-2指令集,使Cortex-M3有几个方面比传统ARM处理器更先进:

1、消灭了状态切换的额外开销,节省了执行时间和指令空间。

2、不需要把源代码分成ARM编译和Thumb编译,软件开发的管理大大减少。

3、无需再反复求证和测试:究竟在何时何地切换到何种状态,程序才最有效率。

即使小编说得再好,也不能详尽叙述STM32之冰山一角。但有人可以,那就是我们的杜洋老师。如果您想尽快掌握基于STM32的嵌入式系统开发详细知识,那就快来了解一下我们的嵌入式系统开发培训吧,杜洋老师会详细讲述您想知道的关于STM32开发的那些事。填写答卷,还有机会获得我们的好书哦!赶快行动吧!

STM32有一颗什么样的“心”?

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多