单片机--STM中断系统

2023-10-30 11:10
文章标签 系统 中断 单片机 stm

本文主要是介绍单片机--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中断系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/307504

相关文章

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处