历史上的今天
返回首页

历史上的今天

今天是:2025年03月11日(星期二)

正在发生

2021年03月11日 | STM32经典概述,纯干货

2021-03-11 来源:eefocus

首先,在学习Cortex-M3时,我们必须要知道必要的缩略语。 整理如下:AMBA:先进单片机总线架构 ADK:AMBA设计套件AHB:先进高性能总线 AHB-AP:AHB访问端口APB:先进外设总线 ARM ARM:ARM架构参考手册ASIC:行业领域专用集成电路 ATB :先进跟踪总线BE8:字节不变式大端模式 CPI:每条指令的周期数DAP:调试访问端口 DSP:数字信号处理(器)DWT:数据观察点及跟踪 ETM:嵌入式跟踪宏单元FPB:闪存地址重载及断点 FSR:fault状态寄存器HTM:Core Sight AHB跟踪宏单元ICE:在线仿真器 IDE:集成开发环境IRQ:中断请求(通常是外中断请求)ISA:指令系统架构 ISR:中断服务例程ITM:仪器化跟踪宏单元 JTAG:连接点测试行动组(一个关于测试和调试接口的标准)LR:连接寄存器LSB:最低有效位MSB:最高有效位LSU:加载存储单元MCU:微控制器单元MPU:存储器保护单元MMU:存储器管理单元MSP:主堆栈指针NMI:不可屏蔽中断NVIC:嵌套向量中断控制器PC:程序计数器PPB:私有外设总线同时,还要如下规定: 数值:1. 4''hC , 0x123 都表示16进制数


2. #3表示数字3 (e.g., IRQ #3 就是指3号中断)


3. #immed_12表示一个12位的立即数


4. 寄存器位。通常是表示一个位段的数值,例如


bit[15:12] 表示位序号从15往下数到12,这一段的数值。


寄存器访问类型


1. R 表示只读


2. W表示只写


3. RW 表示可读可写(前3条好像地球人都知道)


4. R/Wc 表示可读,但是写访问将使之清 0Cortex-M3芯片简介


1、芯片的基本结构如下图:


2、关于ARMv7的知识--了解


在这个版本中,内核架构首次从单一款式变成3种款式:


款式A:设计用于高性能的“开放应用平台”——越来越接近电脑了


款式R:用于高端的嵌入式系统,尤其是那些带有实时要求的——又要快又要实时。


款式M:用于深度嵌入的,单片机风格的系统中


介绍A:用于高性能的“开放应用平台”,应用在那些需要运行复杂应用程序的处理器。支持大型嵌入式操作系统


R:用于高端的嵌入式系统,要求实时性的


M:用于深度嵌入的、单片机风格的系统中


3、Cortex-M3处理器的舞台


高性能+高代码密度+小硅片面积,使得CM3大面积地成为理想的处理平台,主要应用在以下领域:


(1)低成本单片机


(2)汽车电子


(3)数据通信


(4)工业控制


(5)消费类电子产品


4、Cortex-M3概览(1)简介 Cortex-M3是一个 32位处理器内核。内部的数据路径是 32位的,寄存器是 32位的,存储器接口也是 32 位的。CM3 采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,从而提升了性能。为实现这个特性, CM3内部含有好几条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一方面,指令总线和数据总线共享同一个存储器空间(一个统一的存储器系统)。 比较复杂的应用可能需要更多的存储系统功能,为此CM3提供一个可选的MPU,而且在需要的情况下也可以使用外部的 cache。另外在CM3中,Both小端模式和大端模式都是支持的。


(2)Cortex-M3的简化图


(3)寄存器组


处理器拥有R0-R15的寄存器组,其中R13最为堆栈指针SP,SP有两个,但是同一时刻只能有一个可以看到,这就是所谓的“banked”寄存器。



a、R0-R12都是 32位通用寄存器,用于数据操作。但是注意:绝大多数 16位Thumb指令只能访问R0-R7,而 32位 Thumb-2指令可以访问所有寄存器。 b、Cortex-M3拥有两个堆栈指针,然而它们是 banked,因此任一时刻只能使用其中的一个。


主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)


进程堆栈指针(PSP):由用户的应用程序代码使用。---堆栈指针的最低两位永远是0,这意味着堆栈总是4字节对齐的。--- c、R14:连接寄存器--当呼叫一个子程序时,由R14存储返回地址 d、R15:程序计数寄存器--指向当前的程序地址,如果修改它的值,就能改变程序的执行流(这里有很多高级技巧) e、Cortex-M3还在内核水平上搭载了若干特殊功能寄存器,包括程序状态字寄存器组(PSRs)中断屏蔽寄存器组(PRIMASK, FAULTMASK, BASEPRI)


控制寄存器(CONTROL)


Cortex-M3处理器支持两种处理器的操作模式,还支持两级特权操作。


两种操作模式分别为:处理者模式和线程模式(thread mode)。引入两个模式的本意,是用于区别普通应用程序的代码和异常服务例程的代码——包括中断服务例程的代码。


Cortex-M3 的另一个侧面则是特权的分级——特权级和用户级。这可以提供一种存储器访问的保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及到要害的操作。处理器支持两种特权级,这也是一个基本的安全模型。



在 CM3 运行主应用程序时(线程模式),既可以使用特权级,也可以使用用户级;但是异常服务例程必须在特权级下执行。复位后,处理器默认进入线程模式,特权极访问。在特权级下,程序可以访问所有范围的存储器(如果有 MPU,还要 在MPU规定的禁地之外),并且可以执行所有指令。


在特权级下的程序可以为所欲为,但也可能会把自己给玩进去——切换到用户级。一旦进入用户级,再想回来就得走“法律程序”了——用户级的程序不能简简单单地试图改写 CONTROL寄存器就回到特权级,它必须先“申诉”:执行一条系统调用指令(SVC)。这会触发SVC异常,然后由异常服务例程(通常是操作系统的一部分)接管,如果批准了进入,则异常服务例程修改 CONTROL寄存器,才能在用户级的线程模式下重新进入特权级。


事实上,从用户级到特权级的唯一途径就是异常:如果在程序执行过程中触发了一个异常,处理器总是先切换入特权级,并且在异常服务例程执行完毕退出时,返回先前的状。



通过引入特权级和用户级,就能够在硬件水平上限制某些不受信任的或者还没有调试好的程序,不让它们随便地配置涉及要害的寄存器,因而系统的可靠性得到了提高。进一步地,如果配了 MPU,它还可以作为特权机制的补充——保护关键的存储区域不被破坏,这些区域通常是操作系统的区域。


(4)内建的嵌套向量中断控制器 Cortex-M3 在内核水平上搭载了一颗中断控制器——嵌套向量中断控制器 NVIC(Nested Vectored Interrupt Controller)。它与内核有很深的“亲密接触”——与内核是紧耦合的。


NVIC提供如下的功能:


可嵌套中断支持


向量中断支持


动态优先级调整支持


中断延迟大大缩短


中断可屏蔽 可嵌套中断支持: 可嵌套中断支持的作用范围很广,覆盖了所有的外部中断和绝大多数系统异常。外在表现是,这些异常都可以被赋予不同的优先级。当前优先级被存储在 xPSR 的专用字段中。当一个异常发生时,硬件会自动比较该异常的优先级是否比当前的异常优先级更高。如果发现来了更高优先级的异常,处理器就会中断当前的中断服务例程(或者是普通程序),而服务新来的异常——即立即抢占。 向量中断支持: 当开始响应一个中断后,CM3会自动定位一张向量表,并且根据中断号从表中找出 ISR的入口地址,然后跳转过去执行。不需要像以前的 ARM那样,由软件来分辨到底是哪个中断发生了,也无需半导体厂商提供私有的中断控制器来完成这种工作。这么一来,中断延迟时间大为缩短。


(5)存储器映射Cortex-M3支持4G存储空间,具体分配如下图:


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


指令存储区总线(两条)


系统总线


私有外设总线


有两条代码存储区总线负责对代码存储区的访问,分别是 I-Code 总线和 D-Code 总线。前者用于取指,后者用于查表等操作,它们按最佳执行速度进行优化。


系统总线用于访问内存和外设,覆盖的区域包括 SRAM,片上外设,片外 RAM,片外扩展设备,以及系统级存储区的部分空间。


私有外设总线负责一部分私有外设的访问,主要就是访问调试组件。它们也在系统级存储区。


(7)存储器保护单元(MPU) Cortex-M3有一个可选的存储器保护单元。配上它之后,就可以对特权级访问和用户级访问分别施加不同的访问限制。当检测到犯规(violated)时,MPU 就会产生一个 fault 异常,可以由fault异常的服务例程来分析该错误,并且在可能时改正它。


MPU 有很多玩法。最常见的就是由操作系统使用 MPU,以使特权级代码的数据,包括操作系统本身的数据不被其它用户程序弄坏。MPU在保护内存时是按区管理的。它可以把某些内存 region设置成只读,从而避免了那里的内容意外被更改;还可以在多任务系统中把不同任务之间的数据区隔离。一句话,它会使嵌入式系统变得更加健壮,更加可靠(很多行业标准,尤其是航空的,就规定了必须使用 MPU来行使保护职能——译注) 。


(8)Cortex-M3的简评1、高性能许多指令都是单周期的——包括乘法相关指令。并且从整体性能上,Cortex-M3比得过绝大多数其它的架构。


指令总线和数据总线被分开,取值和访内可以并行不悖


Thumb-2的到来告别了状态切换的旧世代,再也不需要花时间来切换于 32位 ARM状态和16位Thumb状态之间了。这简化了软件开发和代码维护,使产品面市更快。


Thumb-2指令集为编程带来了更多的灵活性。许多数据操作现在能用更短的代码搞定,这意味着 Cortex-M3的代码密度更高,也就对存储器的需求更少。


取指都按 32位处理。同一周期最多可以取出两条指令,留下了更多的带宽给数据传输。


Cortex-M3的设计允许单片机高频运行(现代半导体制造技术能保证 100MHz以上的速度)即使在相同的速度下运行,CM3的每指令周期数(CPI)也更低,于是同样的 MHz下可以做更多的工作;另一方面,也使同一个应用在 CM3上需要更低的主频。


2、先进的中断处理功能内建的嵌套向量中断控制器支持240条外部中断输入。向量化的中断功能大大减少了中断延迟,因为不在需要软件去判断中断源。中断的嵌套也是在硬件水平上实现的,不需要软件代码来实现。


Cortex-M3在进入异常服务例程时,自动压栈了 R0-R3, R12, LR, PSR 和PC,并且在返回时自动弹出它们,这多清爽!既加速了中断的响应,也再不需要汇编语言代码了


NVIC支持对每一路中断设置不同的优先级,使得中断管理极富弹性。最粗线条的实现也至少要支持 8级优先级,而且还能动态地被修改。


优化中断响应还有两招,它们分别是“咬尾中断机制”和“晚到中断机制”。


有些需要较多周期才能执行完的指令,是可以被中断-继续的——就好比它们是一串指令一样。这些指令包括加载多个寄存器(LDM),存储多个寄存器(STM),多个寄存器参与的PUSH,以及多个寄存器参与的 POP。


除非系统被彻底地锁定,NMI(不可屏蔽中断)会在收到请求的第一时间予以响应。对很多安全-关键(safety-critical)的应用,NMI都是必不可少的(如化学反应即将失控时的紧急停机)。


推荐阅读

史海拾趣

Bergquist Company公司的发展小趣事

随着导热材料技术的不断进步,其应用领域也在不断扩展。Bergquist Company紧跟市场需求,将导热产品应用于汽车、家用电器、电脑、散热器、电源供应器及电马达控制等多个领域。这些产品的广泛应用不仅提升了人们的生活品质,还为公司的持续发展注入了强大动力。

FUJITSU(富士通)公司的发展小趣事

70年代,随着电子技术的飞速发展,导热材料行业迎来了前所未有的机遇。Bergquist Company敏锐地捕捉到了这一机遇,开始涉足导热材料领域。公司投入大量资金进行研发,成功开发出了一系列具有创新性的导热产品。这些产品不仅性能卓越,而且价格合理,深受市场欢迎。凭借这些优势,Bergquist Company逐渐在导热材料行业崭露头角,成为了行业的领军企业。

ENPIRION公司的发展小趣事

ENPIRION公司的成立源于其创始人对于电源管理技术的深刻理解和独到见解。在2001年,该创始人凭借在贝尔实验室的器件及工艺发明,决定在美国创办ENPIRION公司,致力于开发创新的电源管理解决方案。这一决定标志着ENPIRION公司的诞生,也为其后续的快速发展奠定了坚实的基础。

AIC [Analog Intergrations Corporation]公司的发展小趣事

经过数年的研发和技术积累,ENPIRION公司在2004年推出了其首款革命性的产品——将电感集成的DCDC芯片。这款产品的问世引起了业界的广泛关注,因为它极大地减小了负载点稳压所需要的PCB面积和高度,实现了最高功率密度和最小外形封装。这一创新不仅获得了EDN 2004年度全球电源IC最佳产品奖,还赢得了其他众多国际大奖,为ENPIRION公司赢得了业界的广泛认可。

HCC Industries公司的发展小趣事

近年来,随着全球对环境保护和可持续发展的重视,HCC Industries积极响应号召,制定了绿色可持续发展战略。公司加大了对环保技术和绿色产品的研发投入,推出了一系列符合环保标准的微电子部件产品。同时,HCC还通过优化生产工艺和节能减排措施,降低了生产过程中的能源消耗和污染排放。这一战略不仅赢得了客户和消费者的广泛赞誉,也为公司带来了更加可持续的发展前景。

振华(CEC)公司的发展小趣事

振华深知企业文化和员工激励对于企业发展的重要性。因此,公司注重企业文化的建设和传承,形成了具有振华特色的企业文化体系。同时,公司还采取多种措施激励员工积极投入工作,提高员工的工作积极性和创造力。通过员工培训和晋升机制等制度的完善和实施,振华不仅吸引了大量优秀人才加入企业,还为企业的发展提供了坚实的人才保障。

问答坊 | AI 解惑

单片机工具自制系列2

自制K149BC PIC专用USB接口编程器的完整资料…

查看全部问答>

PLD设计技巧——消除组合逻辑产生的毛刺

PLD设计技巧——消除组合逻辑产生的毛刺…

查看全部问答>

Linux面试题,看你能得多少分?

一.填空题 1. 在Linux系统中,以 方式访问设备 。 2. Linux内核引导时,从文件 中读取要加载的文件系统。 3. Linux文件系统中每个文件用 来标识。 4. 全部磁盘块由四个部分组成,分别为 。 5. 链接分为: 和 。 6. 超级块包含了 和 等重要的 ...…

查看全部问答>

stepldr引导eboot不成功

     根据datasheet (nand flash controller)The S3C2416 is equipped with an internal SRAM buffer called ‘Steppingstone’. This supports NAND flash boot loader. When you use IROM boot and select nand flash as boo ...…

查看全部问答>

为什么我在evc中输出只有emulator可选,没有设备可选?

为什么我在evc中输出只有emulator可选,没有设备可选? 这样我就没法把程序download到wince设备上了?为什么? 是不是少装了什么?请各位帮帮忙.…

查看全部问答>

求一完整程序~关于EVC4.0下的UDP编程

求一完整程序~关于EVC4.0下的UDP编程!有的大大请加我QQ 41368886 还有哪个大大有Pocket PC 2002一Win32 (WINCE X 86) Debug 的开发环境也发给我!  求~~跪求这两个 …

查看全部问答>

寻迹小车

各位大哥,跪求:寻迹小车原理图和程序,要详细的谢谢了!!…

查看全部问答>

SRAM的A0与FSMC_A1相连,这样怎么操作呢?

                                 求大侠指导一下…

查看全部问答>

symbol referencing errors 怎么办

我写了一个sdram的测试小程序,compile通过,没有错误,但是build的 时候给出 \\"c:\\\\ti\\\\c6000\\\\cgtools\\\\bin\\\\cl6x\\" -@\\"Debug.lkf\\" undefined               &nbs ...…

查看全部问答>