Cortex-M3培训讲义
Cortex-M3寄存器等基础知识

Cortex-M3寄存器等基础知识1.寄存器 CM3拥有R0~R15通⽤寄存器和⼀些特殊功能寄存器 R0~R12这些通⽤寄存器,复位初始值都是不可预料的2.CM3有R0到R15的通⽤寄存器组注:绝⼤部分的16位thumb只能访问R0到R7,⽽32位thumb-2可以访问全部寄存器3.特殊功能寄存器3.1程序状态寄存器组(应⽤程序PSR+中断号PSR+执⾏PSR)3.2中断屏蔽寄存器组:⽤于控制异常的除能和使能3.3控制寄存器:⽤于定义特权级别和当前使⽤哪个堆栈指针4.操作模式和特权级别:两种操作模式(处理器模式):Handler模式和线程模式(⽤于区分异常服务例程的代码和普通程序的代码)两种特权等级:特权级和⽤户级(是指在硬件层⾯上对存储器访问权限的设置)注:CM3在运⾏主程序(即线程模式)可以使⽤特权级别和⽤户级别;但是异常服务例程(即handler模式)只能使⽤特权级别。
当处于线程+⽤户模式时⼀些访问权限将被禁⽌将代码区分成⽤户级和特权级,有利于程序架构的稳定,如某⼀个⽤户代码出问题,不会使其成为害群之狗,因为⽤户级别的代码是禁⽌对⼀些要害寄存器操作的。
5.异常处理5.1CONTROL[0]=0;5.2CONTROL[0]=1;CONTROL[0]只有在特权级别下可以访问,若在⽤户级别想访问先通过"系统服务呼叫指令(SVC)"来触发SVC异常,然后在该异常的服务例程中可以修改CONTROL[0]。
6.下⾯是各操作模式的转换7.异常和中断可以有11个系统异常和最多240个外部中断(IRQ),具体芯⽚使⽤了多少要看芯⽚制造⼚商。
作为中断功能的强化,NVIC 还有⼀条NMI输⼊信号线,具体做什么由芯⽚制造商决定,NMI(not masked interrupted)8.向量表:当⼀个异常被CM3内核接受。
对应的异常Handler就会执⾏,向量表⽤来决定Handler的⼊⼝地址。
02010202通用Cortex-M3处理器结构与工作原理-PPT课件

• 什么是字:字的宽度由CPU的数据(功能)总线宽度来决定。 STM32就表示它的字宽是4个字节32位。
ØCM3的存储器组织 • CM3的地址空间是4GB, 程序可以在代码区, 内部SRAM区以及外部RAM区中执行。 • 但是因为指令总线与数据总线是分开的, 最理想的是把程序放到代码区,从而使取 指和数据访问各自使用自总线 • 具体4GB的粗线条划分如下图:
存储格式
• Cortex-M3 处理器将存储器看作从 0开始向上编号的字 节的线性集合。例如: • 字节 0-3 存放第一个被保存的字 • 字节 4-7 存放第二个被保存的字 • Cortex-M3 处理器能够以小端格式或大端格式访问存储 器中的数据字,而访问代码时始终使用小端格式。
• 注意: • 小端格式是 ARM 处理器默认的存储器格式。 • 在小端格式中,一个字中最低地址的字节为该字的最 低有效字节,最高地址的字节为最高有效字节。存储 器系统地址 0 的字节与数据线 7-0 相连。 • 在大端格式中,一个字中最低地址的字节为该字的最 高有效字节,而最高地址的字节为最低有效字节。存 储器系统地址 0的字节与数据线 31-24 相连。
• 调试接口
• 硬件调试解决方案,通过一个传统的JTAG口或一个适合小 封装器件的2线串行调试口(SWD),可以获得很高的处理 器系统可视度。 • 对于系统跟踪,处理器在数据观察点基础上集成了一个可 选的ETM(嵌入式跟踪宏单元),它可以被配置为特定的系 统事件触发。 • 为了简化这些系统事件的处理,一个串行观测器(Serial Wire Viewer,SWV)可以通过一个引脚输出标准的ASCII数 据流。 • Flash修补技术,使器件和系统开发者在调试或运行过程中, 可以修补从ROM到SRAM或Flash的代码错误,可避免昂贵的 重定制
高教社嵌入式系统实现(Cortex-M3基础与提高)(第二版)知识点课件05

STM32中断优 先级分组
第6讲 STM32F103的外部中断控制
STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响 应优先级,也把响应优先级称作“亚优先级”或“副优先级”,每个 中断源都需要被指定这两种优先级。
4. 优先级冲突的处理 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处
个异常向量表管理起来,编号为0~15的称为内核异常,而16
以上的则称为外部中断。
➢ STM32向量表,优先级从-3至6的中断向量称为系统异常,优 先级为负的不能设置优先级,如复位RESET、不可屏蔽中断
NMI、硬错误HARDFAULT。
➢ 从优先级7开始的称为外部中断,优先级可自行设置。
STM32中的 中断源
认识几个中断 相关的函数
第6讲 STM32F103的外部中断控制
宏定义
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin)
功能描述 清除EXTI的线挂起位.
参数
__EXTI_LINE__:指定要清除的EXTI线.这个参数可以是 GPIO_PIN_x的任意组合,其中x可以是(0..15)
操作演示 与训练
第6讲 STM32F103的外部中断控制
STM32CubeMX和Keil软件在STM32F103系列单 片机开发中的应用——使用中断实现按键功能
实操演示:按键中断控制LED为例
步骤:
➢ STM32CubeMX设置输入和输出管脚、系统时钟、Jlink仿真器(5pin) ➢ STM32CubeMX设置中断与优先级分组等 ➢ 生成Keil项目代码 ➢ Keil项目中代码补充。
IRQn: 外部中断号。该参数可以是IRQn_Type枚举类型的枚举值
第三讲 Cortex-M3基础

在复位后,该寄存器的值为0。因此,在地址0 处必须包 含一张向量表,用于初始时的异常分配。
举例
如果发生了异常11(SVC),则NVIC 会计算出偏移 移量是11x4=0x2C,然后从那里取出服务程序的入口 地址并跳入。
程序代码也可以主动请求进入异常状态的(常用于系统调 用)。
CM3 的所有中断机制都由NVIC 实现。除了支持240 个外 中断之外,NVIC 还支持16‐4‐1=11 个内部异常源。
虽然CM3 是支持240 个外中断的,但具体使用了多少个 是由芯片生产商决定。
NMI
CM3 还有一个NMI(不可屏蔽中断)输入脚。
R13: 堆栈指针
Cortex‐M3 拥有两个堆栈指针,任一时刻只能使用其中的 一个。 主堆栈指针(MSP):复位后缺省使用的堆栈指针,用 于操作系统内核以及异常处理。
进程堆栈指针(PSP):由用户的应用程序代码使用。
R14:连接寄存器
当调用一个子程序时,为了减少访问内存的次数,由R14 存储返回地址,把返回地址直接存储在寄存器中,这与其 他大多数其它处理器都不一样。
当它被置为有效时,NMI 服务程序会无条件地执行,NMI 究竟被拿去做什么,还要视处理器的设计而定。
在多数情况下,NMI 会被连接到一个看门狗定时器,有时 也会是电压监视功能块,以便在电压掉至危险级别后警告 处理器。NMI 可以在任何时间被激活。
向量表
当一个发生的异常被CM3 内核接受,对应的异常handler (处理程序) 就会执行。为了决定handler(程序) 的入 口地址,CM3 使用了“向量表机制”。这里使用一张向 量表。
微机原理与嵌入式接口技术课件:Cortex-M3 的指令系统与汇编程序设计

Cortex-m3的指令系统与汇编程序设计
可用的移位操作如下: ·LSL: 逻辑左移, 寄存器中数据位低端空出的位补 0。 ·LSR: 逻辑右移, 寄存器中数据位高端空出的位补 0。 ·ASR: 算术右移, 移位过程中保持符号位不变, 即 若源操作数为正数, 则数据位的高端空出的位补 0, 否则 补 1。 ·ROR: 循环右移(Rotate Right), 从数据位低端移 出的位填入数据位高端空出的位。 ·RRX: 带扩展的循环右移, 操作数右移一位, 高端 空出的位用原 C 标志值填充。
Cortex-m3的指令系统与汇编程序设计 例程 3.4 立即寻址应用示例。
说明: 前缀“#”表示立即数, “0x”表示 16 进制数 值。
从表 3.2 可以看出, ARM 将 32 位指令分为两个部分。
Cortex-m3的指令系统与汇编程序设计
Cortex-m3的指令系统与汇编程序设计
立即数要满足一定的生成规则: 即每个立即数由一个 8 位的常数循环右移偶数位得到,其中循环右移的位数用一个 4 位二进制数的两倍表示。 如果立即数记作<immediate>, 8 位常数记作 immed_8, 4 位的循环右移值记作 rotate_imm, 则有
Thumb-2 技术改善了 Thumb 指令集的性能, 它在原 有的 Thumb 指令的基础上进行了如下的扩充: 增加了一些 新的 16 位 Thumb 指令来改进程序的执行流程, 增加了一 些新的32 位 Thumb 指令以实现一些 ARM 指令的专有功能, 解决了之前 Thumb 指令集不能访问协处理器、 特权指令和 特殊功能指令的局限。 Thumb-2 指令集可以实现所有的功 能, 这样就不需要在 ARM/ Thumb 状态之间反复切换了, 代码密度和性能得到了显著的提高, 但值得注意的是 Thumb-2 并不支持 32 位 ARM 指令集。
高教社嵌入式系统实现(Cortex-M3基础与提高)(第二版)知识点课件11

主要应用于驱动DAC
定时器概述
定时器时钟布局
TIM1和TIM8是高级控制 定时器,时钟由APB2的 输出产生。 TIM2~TIM5是通用定时器, TIM6和TIM7是基本定时 器器,时钟由APB1输出 产生。
第9讲:定时器应用
定时器概述
功能引脚分布
➢ 因为TIMx_PSC控制寄存器具有缓冲,可以在运行过程中改变 它的数值,新的预分频数值将在下一个更新事件时起作用。
第9讲:定时器应用
时钟源 时间基
预分频系数从1变到2
预分频系数从1变到4
基本定时器
功能特点描述
第9讲:定时器应用
计数器从0累加计数到自动重装载数值(TIMx_ARR寄存器),产生一个溢出,并重新从0开始计数。 每次计数器溢出可以产生更新事件UEV。(通过软件或使用从模式控制器)设置TIMx_EGR寄存器的
• 【影子寄存器的预装载特性】
通用定时器
功能特点描述
第9讲:定时器应用
STM3 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定时器功能特点包括:
位于低速的APB1总线上 16 位向上、向下、向上/向下(中心对齐)计数模式,自动装载计数器(TIMx_CNT)。 16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数 为 1~65535 之
寄存器特色
第9讲:定时器应用
定时器中的PSC/ARR/RCR/CCR寄存器具有预装载功能,即每类寄存器具有双寄 存器机制,分别由各自的影子寄存器和预装载寄存器组成;
影子寄存器是真正起作用的寄存器,预装载寄存器为影子寄存器提供缓冲,提 前做数据或指令准备;因为定时器工作往往具有一定周期性,如果每次我们的 参数修改都直接作用于实际寄存器,往往不可避免会影响到当前周期的正常计 数以及相关的输出动作。
高教社嵌入式系统实现(Cortex-M3基础与提高)(第二版)知识点课件04
中的一个 ➢ PinState:指定要写入所选位的值。这个参数可以是GPIO_PinState枚举值之一:
● 输出缓冲器被激活 ─ 开漏模式:输出寄存器上的‘0’激活N-MOS,而输出寄存器上的 ‘1’将端口置于高阻状态(PMOS从不被激活)。 ─ 推挽模式:输出寄存器上的‘0’激活N-MOS,而输出寄存器上的 ‘1’将激活P-MOS。
● 施密特触发输入被激活 ● 弱上拉和下拉电阻被禁止 ● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器 ● 在开漏模式时,对输入数据寄存器的读访问可得到I/O状态 ● 在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值。
STM32CubeMX和Keil软件在STM32F103系列 单片机开发中的应用——再操作演示
实操演示:按键控制LED为例
步骤:
➢ STM32CubeMX设置输入和输出管脚 ➢ STM32CubeMX设置系统时钟 ➢ STM32CubeMX设置Jlink仿真器(5pin) ➢ 生成Keil项目 ➢ Keil项目中代码补充。
隔内生成中断。 ➢ “__weak”函数:“弱函数”,用户可以在用户文件中重新定义一个同名函数,
最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函 数,那么编译器就会执行__weak 声明的函数
第5讲 STM32F103的GPIO输入控制
STM32F10XXX
I/O端口位基 本结构
第4讲 STM32F103的GPIO输出控制
STM32F10XXX
5-CORTEX-M3指令系统PPT课件
Rm,ASR #n
功能:将寄存器Rm中的内容向右移动n位,左端用第31位的值来填充。 算术右移n位相当于将Rm除以2n。
例:MOV R1,R2 ,ASR #2
逻辑左移LSL
Rm,LSL #n
功能:将寄存器Rm中的内容向左移动n位,低位用0填充。 逻辑左移n位相当于将无符号数据做乘以2n 的操作。
例如:SUBNES R0,R1,#2
2021/4/9 .
4
Cortex-M3指令结构
❖指令条件码
条件码 助记符后缀
标志
含义
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101
EQ
Z置位
相等
NE
Z清零
不相等
CS
C置位
2021/4/9 .
3
Cortex-M3 指令结构
❖Cortex-M3指令的格式
Cortex-M3指令书写格式
<opcode>[<cond>][s]<Rd>, <Rn>[, <op2>]
<opcode>表示指令的操作码 <cond>表示指令执行的条件码 [s]用于决定指令执行结果是否影响程序状态寄存器PSR的值。 <Rd>表示目的寄存器 <Rn>表示第一源操作数,该操作数必须是寄存器数。 <op2>表示第二源操作数,该操作数可以是立即数、寄 存器或寄存器移位。
❖寄存器寻址
寄存器寻址指的是将寄存器中存放的数作为操作数,即在 指令中用寄存器名表示操作数。
例如:
MOV R0, #2
第2章 Cortex-M3处理器-1
周期1 周期2 周期3 周期4 周期5 周期6
处理器执行一条 取指 译码 执行 指令的三个阶段
取指 译码 执行 取指 译码 执行 取指 译码 执行
3 在第3个周期,PC指向指令3,此时指令 1进入三级流水线的执行阶段,指令2进入译
码阶段,取出指令3。
21/47
三级流水线结构的指令执行顺序
9/47
(4)32位单周期乘法,硬件除法指令 (5)具有分组的堆栈指针 ( 6 ) 处 理 模 式 ( handler mode ) 和 线 程 模 式 ( thread mode) (7)Thumb状态和调试状态 (8)功耗低 (9)具有门数目少 (价格低)、调试成本低 (10)支持非对齐访问
10/47
寄存器(LR)、程序计数器(PC)、程序状态寄存器 (xPSR)、两个分组的SP寄存器。 6. 内存保护单元(MPU,可选) 7. 低成本调试解决方案 8. ROM表
16/47
三、总线结构
基于哈佛体系结构,有专门的数据总线和指令总线,使得数 据访问和指令存取可以并行进行,效率大大提高。
AMBA片上总线包括: (1)AHB(Advanced High performance Bus)系统总线:主 要用于高性能模块(如CPU、DMA等)之间的连接。 (2)APB(Advanced Peripheral Bus)外设总线:主要用于 低带宽的外设之间的连接。
AHB-AP
Cortex-M3处理器的结构
总线 矩阵
I-code 总线 D-code 总线
系统总线
11/47
2. 嵌 套 向 量 中 断 控 制 器 ( Nested Vector Interrupt Controller,NVIC)
高教社嵌入式系统实现(Cortex-M3基础与提高)(第二版)教学课件2-1
GPIO_PinState
HSPPTMSC|Wuxi
IOT1|3 WXIC
具体操作1:选用外部高速晶振
14
HSPPTMSC|Wuxi
IOT1|4 WXIC
配置下载器
HSPPTMSC|Wuxi
15
IOT1|5 WXIC
配置引脚
HSPPTMSC|Wuxi
16
IOT1|6
Keil中的引脚初始化
每个端口有16个引脚。所有的GPIO引脚都可以配置成输入或输出模式 。输入模式又分为模拟输入、浮空输入、上拉输入、下拉输入;输出模 式又分为推挽输出、开漏输出、推挽式复用功能、开漏复用等。
HSPPTMSC|Wuxi
IOT|5 WXIC
1、GPIO简介
大部分GPIO为推挽输出,具有完整 I2C功能的是开漏结构;
HSPPTMSC|Wuxi
端口配置寄存器
IOT|WXIC
GPIO简介
8
I/O引脚可通过端口配置寄存器设置成不同的功能。
四种输入模式(结构图上半部分):
上拉输入与下拉输入:与VDD相连的为上拉电阻,与VSS相连的为下拉 电阻。再经施密特触发器就把信号转化为0、1存储在输入数据寄存器。
浮空输入:不接上拉与下拉电阻,直接由触发器输入,由于其输入阻 抗较大,一般把这种模式用于标准的通讯协议如I2C、USART的接收端。
HSPPTMSC|Wuxi
IOT|WXIC
引脚配置
确定端口?打开端口时钟 确定是输入还是输出? 确定速率
HSPPTMSC|Wuxi
4
IOT|4 WXIC
引脚配置模式之输入输出
5
STM32F103RCT6共有64个引脚
STM32F103RCT6 有 常 用 GPIO(GPIO: General-Purpose Input /Output Ports , 通 用 的 输入 输 出 端 口 ) 端 口 3 个 , 分 别 是 GPIOA 、 GPIOB、GPIOC