【STM32开发指南】STM32F103内核Cortex-M3详解

目录

【前言】

Cortex-M3内核概述

Cortex-M3内核架构

​编辑

总线架构

系统外设

寄存器组

通用寄存器

特殊功能寄存器

Cortex-M3内核的工作模式

线程模式(Thread Mode)

异常模式(Handler Mode)

特权级别

Cortex-M3内核的异常与中断

异常(Exception)与中断(Interrupt)

中断与异常的处理流程

中断优先级与嵌套

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

STM32F103与Cortex-M3的结合

高性能处理

丰富的外设资源

低功耗设计

强大的调试支持

总结


【前言】

在嵌入式系统领域,STM32F103系列微控制器因其高性能、丰富的外设资源以及低功耗特性而备受青睐。其核心部分采用了ARM公司的Cortex-M3处理器内核,本文将详细解析这一内核的架构、特性及其在STM32F103中的应用。

如果大家对ARM公司还不太了解,可以通过这篇博文先了解下什么是ARM。

【ARM入门指南】一文搞懂什么是ARM-CSDN博客文章浏览阅读567次,点赞11次,收藏10次。在单片机与嵌入式系统的浩瀚宇宙中,ARM架构犹如一颗耀眼的星辰,持续引领着技术创新的潮流。对于刚刚踏入这一领域的初学者而言,深入了解ARM是迈入嵌入式开发大门的关键一步。ARM,这个名字背后,不仅代表着一家在半导体设计领域举足轻重的公司,更象征着一种高效能、低功耗的处理器架构,本文将引领你一同探索ARM的世界。https://blog.csdn.net/debug602/article/details/141504704?spm=1001.2014.3001.5502

Cortex-M3内核概述

Cortex-M3是ARM公司专为微控制器(MCU)设计的32位RISC处理器内核,属于ARMv7-M架构。该内核旨在满足嵌入式系统对低成本、低功耗、高性能以及实时性的要求。Cortex-M3不仅具备强大的计算性能,还拥有先进的中断系统和丰富的调试接口,使得其在嵌入式应用中表现出色。

Cortex‐M3处理器内核是单片机的中央处理单元(CPU)。完整的基于CM3的MCU还需要很多其它组件。在芯片制造商得到CM3处理器内核的使用授权后,它们就可以把CM3内核用在自己的硅片设计中,并添加其它外设功能模块。因此不同厂家设计出的单片机会有不同的配置,包括存储器容量、类型、外设等都各具特色。

Cortex-M3内核架构

总线架构

Cortex-M3内核采用了哈佛结构,拥有独立的指令总线数据总线,允许取指和数据访问并行进行,从而提高了处理性能。其主要总线包括:

  • AHB(Advanced High-performance Bus):用于高性能系统模块的连接,支持突发数据传输和单个数据传输方式,最大速度可达72MHz。
  • APB(Advanced Peripheral Bus):分为APB1和APB2,APB1速度限于36MHz,而APB2则可达72MHz,用于连接较低性能的外设。

系统外设

Cortex-M3内核集成了多种系统外设,包括中断控制、内存保护以及系统调试和跟踪功能。这些外设极大地增强了处理器的功能性和易用性。

寄存器组

通用寄存器

Cortex-M3内核拥有13个32位通用寄存器(R0-R12),这些寄存器在处理器执行指令时起到关键作用,用于存储操作数、地址等。其中,R0-R7也被称为低组寄存器,因为它们可以被所有指令访问;而R8-R12则被称为高组寄存器,它们的访问受到指令类型的限制,但支持更广泛的32位操作。

特殊功能寄存器

除了通用寄存器外,Cortex-M3内核还包括几个特殊功能寄存器,它们在处理器的工作过程中扮演着重要角色:

  • R13(SP):栈指针寄存器,用于实现栈的访问。实际上,Cortex-M3提供了两个栈指针——主栈指针MSP和进程栈指针PSP。MSP在复位后或处理器处于特权模式(如进中断)时会被使用,而PSP则用于线程模式,特别是在支持任务或线程切换的实时操作系统(RTOS)中。

  • R14(LR):链接寄存器,也称为返回地址寄存器。在函数或子程序调用时,返回地址(即调用指令后面那条指令的地址)会被保存到LR寄存器中,以便在函数或子程序结束时能够返回到正确的地址继续执行。

  • R15(PC):程序计数器,用于存储当前执行的指令地址。对PC的写操作会引起程序的跳转,而不会更新LR寄存器。

  • xPSR(程序状态寄存器):这是一个包含多个状态标志的寄存器,用于指示处理器的当前状态。xPSR可以分解为应用PSR(APSR)、执行PSR(EPSR)和中断PSR(IPSR)三个部分,分别用于表示应用状态、执行状态和中断/异常状态。这些状态标志对于控制程序流程、处理中断和异常至关重要。

  • PRIMASK、FAULTMASK和BASEPRI:这些是中断/异常屏蔽寄存器,用于控制中断和异常的优先级和屏蔽状态。PRIMASK用于禁止所有可屏蔽异常,FAULTMASK用于禁止所有Fault异常(包括HardFault、MemManage、BusFault和UsageFault),而BASEPRI则用于设置处理器可响应的最低异常优先级阈值。

  • CONTROL寄存器:该寄存器用于控制处理器的一些特殊功能,如栈指针的选择(MSP或PSP)、是否允许在特权级别下访问FPU(浮点单元)等。

Cortex-M3内核的工作模式

Cortex-M3内核支持两种主要的工作模式,这些模式用于区分处理器在执行不同类型的代码时的行为。这两种模式分别是线程模式(Thread Mode)和异常模式(Handler Mode),它们也常被称为代码执行模式。

线程模式(Thread Mode)

  • 定义:线程模式用于执行非异常代码,即用户编写的应用程序代码。在这种模式下,处理器运行用户定义的任务,处理常规的业务逻辑。
  • 特性
    • 可以访问非特权资源和特权资源(取决于处理器的当前特权级别)。
    • 支持任务切换和上下文保存,特别是在使用RTOS时。
    • 在复位后,处理器默认进入线程模式。

异常模式(Handler Mode)

  • 定义:异常模式用于执行异常代码,如中断服务程序(ISR)。当外部事件(如定时器溢出、外部中断触发等)或内部事件(如指令执行错误)发生时,处理器会进入异常模式以处理这些事件。
  • 特性
    • 总是运行在特权级别,确保异常处理程序能够访问所有系统资源。
    • 处理器在执行异常处理程序时,会自动保存当前的程序计数器(PC)、程序状态寄存器(xPSR)和链接寄存器(LR)的值,以便在异常处理完成后能够恢复到异常发生前的状态。
    • 支持嵌套中断,即一个中断处理过程中可以被另一个更高优先级的中断打断。

特权级别

与这两种工作模式紧密相关的是处理器的特权级别。Cortex-M3内核支持两种特权级别:特权级(Privilege)和用户级(User)。

  • 特权级:能够访问所有硬件资源,包括所有寄存器和内存地址空间,能够执行所有指令。这是处理器处理异常代码时的默认级别,也是操作系统内核代码运行的级别。
  • 用户级:对用户代码的限制较多,通常禁止使用MSR和MRS指令访问特殊功能寄存器(APSR除外),不能执行CPS指令修改控制寄存器,对系统控制空间的访问也有限制。这是为了保护系统资源不被用户程序意外修改。

在STM32F103的应用中,我们需要理解这些工作模式和特权级别的概念,以便正确编写和调试中断服务程序,以及在使用RTOS时合理管理任务和资源。

Cortex-M3内核的异常与中断

异常(Exception)与中断(Interrupt)

在Cortex-M3内核中,异常和中断是处理器响应系统中突发事件的一种机制。它们允许处理器暂停当前正在执行的程序,转而处理更高优先级的任务,处理完毕后再返回原程序继续执行。虽然异常和中断在概念上有所不同,但在Cortex-M3内核中,它们通常被统一处理。

  • 异常:异常通常是由处理器内部事件引起的,如指令执行错误(如除零错误)、调试事件或系统请求(如SVC指令)。异常具有固定的优先级,并且总是被处理器立即响应。
  • 中断:中断则是由外部设备或系统事件引起的,如定时器溢出、外部引脚电平变化等。中断具有可编程的优先级,允许开发者根据应用需求设置中断的响应顺序。

 在Cortex-M3内核中,异常和中断的数量是固定的,并且由内核的架构决定。具体来说,Cortex-M3内核支持多达256个中断,这些中断包括内核异常和外部中断。然而,在实际应用中,并不是所有的STM32F103系列微控制器都会使用到Cortex-M3内核支持的全部中断,它实际支持的中断数量包括16个内核异常(也被称为系统异常)和一定数量的可屏蔽外部中断。这些内核异常包括复位(RESET)、硬错误(HardFault)等,它们是固定的,且优先级不可编程。而外部中断的数量则根据具体的STM32F103型号而有所不同,STM32F103系列通常支持60个外部中断

中断与异常的处理流程

当异常或中断发生时,Cortex-M3内核会执行以下处理流程:

  1. 保存上下文:处理器会自动将当前的程序计数器(PC)、程序状态寄存器(xPSR)、链接寄存器(LR)以及部分通用寄存器(R0-R3、R12)的值保存到堆栈中,以便在异常或中断处理完毕后能够恢复到异常发生前的状态。

  2. 获取向量地址:处理器通过读取中断向量表(IVT),找到与异常或中断号对应的向量地址。向量地址指向了异常或中断服务程序(ISR)的入口点。

  3. 执行ISR:处理器跳转到ISR的入口点开始执行。ISR是开发者编写的用于处理特定异常或中断的代码段。

  4. 恢复上下文:ISR执行完毕后,处理器会执行出栈操作,恢复异常或中断发生前的上下文,并返回到被中断的程序继续执行。

中断优先级与嵌套

Cortex-M3内核支持可编程的中断优先级,允许开发者根据应用需求设置中断的响应顺序。中断优先级分为抢占优先级和子优先级(也称为响应优先级):

  • 抢占优先级:决定了中断是否可以嵌套。抢占优先级高的中断可以打断抢占优先级低的中断处理函数,先执行高优先级的中断处理函数,待其执行完毕后再继续执行被打断的低优先级中断处理函数。
  • 子优先级:在抢占优先级相同的情况下,决定了中断的响应顺序。子优先级高的中断会先于子优先级低的中断被响应。

STM32F103系列微控制器作为Cortex-M3内核的具体实现,继承了这些中断和异常处理机制。开发者可以通过配置NVIC(嵌套向量中断控制器)来管理中断和异常,包括设置中断优先级、使能或禁用中断等。

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

NVIC是Cortex-M3内核中用于管理中断和异常的关键组件,它提供了丰富的中断控制功能,包括:

  • 中断使能与禁用:允许开发者根据需要使能或禁用特定的中断。
  • 优先级设置:允许开发者为中断设置抢占优先级和子优先级。
  • 中断挂起与解除挂起:提供了中断挂起和解除挂起的功能,允许开发者手动控制中断的触发时机。
  • 中断分组:通过中断分组功能,开发者可以灵活分配抢占优先级和子优先级的位数,以适应不同的应用需求。

STM32F103系列微控制器通过NVIC提供了强大的中断和异常处理能力,使得开发者能够轻松实现复杂的嵌入式应用。

STM32F103与Cortex-M3的结合

STM32F103系列微控制器基于Cortex-M3内核设计,集成了高性能的处理器内核和丰富的外设资源,使其成为嵌入式系统开发的理想选择。

以下是STM32F103与Cortex-M3内核结合的一些关键特性:

高性能处理

STM32F103的工作频率高达72MHz,结合Cortex-M3内核的三级流水线设计,能够在单个周期内完成绝大多数指令的执行,极大提高了处理器的吞吐率。

丰富的外设资源

STM32F103提供了包括USB、CAN、ADC、DAC、SPI、I2C、USART等多种通信接口和外设,这些外设通过APB总线与Cortex-M3内核相连,使得STM32F103能够应对各种复杂的嵌入式应用需求。

低功耗设计

Cortex-M3内核结合STM32F103的灵活电源和时钟管理功能,支持多种低功耗模式,如睡眠、停止和待机模式,以适应不同的能耗需求,延长设备的使用时间。

强大的调试支持

STM32F103支持JTAG和SWD接口调试,结合Cortex-M3内核的调试组件(如FPB、DWT、ITM、ETM等),提供了强大的调试功能,便于开发者进行程序调试和性能分析。

总结

STM32F103系列微控制器以其强大的Cortex-M3内核和丰富的外设资源,在嵌入式系统领域占据了重要地位。通过对Cortex-M3内核的深入解析,我们可以更好地理解STM32F103的高性能、低功耗和易调试等特性,从而更加高效地进行嵌入式系统开发。无论是初学者还是资深开发者,STM32F103都是一个值得深入学习和应用的优秀平台。

如果大家读完这篇文章后想深入学习下CortexM3内核,可以点个关注后台私信我获取“Cortex-M3权威指南”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值