本文主要是介绍单片机--STM中断系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【1】中断系统
1.基本概念
在处理器中,中断相当于对于突发事件的处理过程。
当遇到内部/外部的紧急事件需要处理时,暂时中止当前程序,转而去处理紧急事件,
待处理完毕后,再返回被打断的程序继续向下运行。
示例:
1 看电影 正在执行的主程序
2 来电话 中断信号
3 暂停电影 压栈
4 取快递 处理中断事件(中断处理函数)
5 继续看电影 出栈
2.中断的意义
中断能够对突发事件进行及时处理,实现程序的并行化,进而提高CPU的工作效率。
中断提高了CPU效率?
因为CPU对于没有发生的事情是在不停的在轮询(询问有没有发生?)
在计算机与外围设备之间传送数据,CPU工作速度快,外围设备工作速度慢,形成CPU等待,效率降低。如果没有使用中断,CPU的大量时间可能会浪费在等待操作上。设置中断后,完全消除了CPU在查询方式中的的等待现象,CPU不必花费大量时间等待和查询外围设备工作,就可以使CPU与外设同步工作,大提高了CPU的工作效率。
3.中断处理过程
中断处理过程
进入中断
- 处理器自动保存现场到堆栈里
- {PC, xPSR, R0-R3, R12, LR}
- 一旦入栈结束,ISR便可开始执行
退出中断
- 中断前的现场被自动从堆栈中恢复
- 一旦出栈完成,继续执行被中断打断的指令
- 出栈的过程也可被打断,使得随时可以响应新的中断而不再进行现场保存
R0 - R12
R13 栈指针 SP : 指向栈顶地址
R14 链接寄存器 LR :存放返回地址
R15 程序计数器 PC :保存要执行的指令地址
4. 中断体系结构
5.NVIC
嵌套向量中断控制器(Nested Vectored Interrupt Controller)
NVIC主要功能
负责管理中断 (CPU的小助理)
1)管理中断事件
每个中断事件都有执行或禁止两种状态,由NVIC负责将中断事件标记为清除和挂起两种状态。
(当多个中断事件同时到达时,NVIC会优先处理优先级更高的事件)
(当中断执行完成时,NVIC会将中断事件置为清除状态)
2)支持中断向量化处理
当中断事件发生时,处理器会将PC置为中断事件入口函数的地址,进而跳转到中断服务程序去执行,这就是个中断(异常)向量,因为每一个异常源或者中断事件都会对应一个服务程序的入口地址,将这些地址按照优先级进行排布后,组成的一张表就称为中断(异常)向量表。
Cortex-M0内核 可以处理15个内部异常和32个外部中断
STM32G030 只使用了6个内部异常和28个外部中断
3)支持中断嵌套
3个固定的优先级,都是负值,不能改变。
四个可编程优先级,用两个bit位表示,00,01,10,11
优先级数值越小,优先级等级越高。
注意
不同优先级的中断同时发生,优先处理优先级编号较小的那个
同样优先级的中断同时发生,中断向量号较小的那个优先响应
6.EXTI
外部事件/中断控制器
主要功能: 产生中断,产生事件。
产生中断的目的,是将信号送入NVIC,进而运行中断服务程序,实现对应功能,是软件级。
产生事件的目的,是将采集到的一个脉冲信号送到某个外设,进而驱动某些设备做出动作,是电路级别的传输,是硬件级的。
结构框图:
- 编号1是信号输入线,EXTI支持产生多达28个外部事件/中断请求。
- 编号2是边沿检测电路,用于监测上升沿或下降沿信号。它会根据上升沿触发选择寄存(EXTI_RTSR)和下降沿触发选择寄存器(EXTI_FTSR)对应位的设置来控制信号触发。
- 边沿检测电路以输入线作为信号输入端,监测是否有边沿跳变,检测到有边沿跳变输出有效信号 1 给编号 3 电路,否则输出无效信号0。
- 编号3是一个或门电路,信号来源是外部事件或者软件中断/事件寄存器产生。允许我们通过程序控制EXTI_SWIER就可以启动中断/事件线
- 编号4是一个与门电路,信号来源是编号3送来的信号和中断屏蔽寄存器的值,如果中断屏蔽寄存器为0,也不会将信号送到NVIC,只有编号3送来了中断信号且中断屏蔽寄存器允许产生中断,才会将中断信号送入NVIC.
- 接下来我们来看看红色虚线指示的电路流程。它是一个产生事件的线路,最终输出一个脉冲信号。
- 产生事件线路是在编号3电路之后与中断线路有所不同,之前电路都是共用的。
- 编号5是一个与门电路,信号来源是编号3送来的信号和事件屏蔽寄存器的值,如果事件屏蔽寄存器为0,不会将信号送到脉冲发生器,只有编号3送来了信号且事件屏蔽寄存器允许产生事件,才会将信号送入脉冲发生器(编号6), 进而产生脉冲来控制外部设备做出动作。 这样我们可以简单的控制 EXTI_EMR 来实现是否要产生事件的目的。
【2】IIC
IIC(Inter-Integrated Circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。
在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。
IIC主要特点
通常我们为了方便把IIC设备分为主设备和从设备,基本上谁控制时钟线(即控制SCL的电平高低变换)谁就是主设备。
(1)IIC主设备功能:主要产生时钟,产生起始信号和停止信号
(2)IIC从设备功能:可编程的IIC地址检测,停止位检测
(3)IIC的一个优点是它支持多主控(multimastering), 其中任何一个能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
(4)支持不同速率的通讯速度,标准速度(最高速度100kHZ),快速(最高400kHZ)
(5)SCL和SDA都需要接上拉电阻 (大小由速度和容性负载决定一般在3.3K-10K之间) 保证数据的稳定性,减少干扰。
(6)IIC是半双工,而不是全双工 ,同一时间只可以单向通信
【3】485
485通信协议是一种广泛应用于工业自动化领域的串行通信协议,其主要特点是支持多节点通信、远距离传输、高速传输和抗干扰能力强。485通信协议:
(1)物理层:485通信协议采用差分信号传输,即采用两个信号线(A、B)分别传输正向和反向的信号,而接收器则通过两个信号线的差值来判断数据的高低电平。由于采用了差分传输,485通信协议的抗干扰能力比较强,适合在电磁干扰比较强的工业环境中使用。
(2)数据链路层:485通信协议的数据链路层包括了帧同步、地址、数据、校验等部分。其中帧同步由起始位、数据位和停止位组成,地址用于标识数据帧的接收节点,数据包含了实际的数据信息,校验用于检验数据的正确性。
(3)传输速率:485通信协议支持多种传输速率,例如最常用的9600、19200、38400、115200等。传输速率越高,数据传输速度越快,但也会带来传输距离短和抗干扰能力弱的问题。
(4)多节点通信:485通信协议支持多节点通信,即多个节点可以通过同一条485总线进行通信。为了避免数据冲突,485通信协议采用了主从通信方式,即只有主机才能主动向从机发送数据,而从机只能在主机的请求下发送数据。
485就是用来通讯的。就像我们学单片机用的串口:UART、IIC、SPI等,是为了两个设备之间交换数据的。使用485因为传输数据用的是差分信号,利用两根双绞线进行传输,抗干扰能力强,这是它相对于以上通讯方式最大的优点。
可以看到左边的网络标号有RXD与TXD,它就是接UART的那两个线。不过比UART多了一个choose,其作为接受和发送的选择端,二者选其一,所以485为半双工通讯。
右边的A和B就是输出差分信号的线,与其他的485器件的A和B连接。
这篇关于单片机--STM中断系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!