欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > STM32 中断系统

STM32 中断系统

2025/2/1 9:10:33 来源:https://blog.csdn.net/2401_84378523/article/details/145372066  浏览:    关键词:STM32 中断系统

目录

中断

定义:

中断处理的过程:

1.中断申请:

2.中断响应:

3.中断处理:

4.中断向量 :

5.中断返回:

中断优先级

1.抢占优先级

2.响应优先级

3.自然优先级

中断嵌套

中断执行流程

中断源

NVIC

按中断源分类

1.外部中断:

设备触发型外部中断:

传感器触发型外部中断:

通讯接口触发型外部中断:

2.内部中断:

定时器/计数器中断:

指令异常中断:

电源管理中断(对于具有电源管理功能的处理器):

DMA(直接内存访问)中断:

3.软件中断:

系统调用中断(在操作系统环境下):

软件陷阱(Software Trap):

外部中断:

中断线:


中断

定义:

        中断,即CPU在正常执行程序的过程中,遇到外部(例如常见的按键中断)/内部(例如定时器中断)的紧急事件需要处理,暂时中断(中止)当前程序的执行,而转去为中断服务,待服务完毕,再返回到暂停处(断点)继续执行原来的程序。

中断处理的过程:

1.中断申请

        中断源向CPU发出中断请求信号(中断申请一般需要在程序初始化中配置相应的中断寄存器开启中断;---程序员操作

2.中断响应

         CPU检测中断申请,把主程序中断的地址保存到堆栈,转入中断向量入口地址

3.中断处理

        按照中断向量中设定好的地址,转入相应的中断服务程序;---程序员操作

4.中断向量 :

中断服务程序所在的位置

5.中断返回

中断服务程序执行完毕后,CPU执行中断返回指令,把堆栈中保存的数据从堆栈弹出,根据该信息恢复之前被打断的状态,返回原来程序继续运行。

中断优先级

        当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源

 分类 : 优先级有三种

1.抢占优先级

        高优先级可以打断较低的优先级 , 当一个具有高抢占优先级的中断事件发生时,即使 CPU 正在处理一个较低抢占优先级的中断服务程序,它也会暂停当前的处理,转而执行高优先级的中断任务。

2.响应优先级

        当多个中断同时请求服务时,CPU 会根据响应优先级来选择先处理哪一个中断。不过,与抢占优先级不同的是,一旦 CPU 开始处理一个中断服务程序,即使有更高响应优先级的中断请求到来,也不会打断当前的中断处理,除非这个新的中断具有更高的抢占优先级。

3.自然优先级

        自然优先级是中断源本身所固有的一种优先级顺序,通常是由硬件设计或者系统架构决定的。它是一种默认的优先级设定,在没有人为设置抢占优先级和响应优先级的情况下发挥作用。

中断嵌套

        当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回

中断执行流程

中断源

        中断源指的是异常的源头(异常发生的根源),中断源分为两类:内核中断 + 外部中断。对于Cortex M4内核而言,一共有256个中断源,分为16个内核中断+240个外部中断,但是STM32F407并没有这么多,有82个可屏蔽中断(可以通过代码控制 外部中断),还有10个不可屏蔽(不可以通过代码控制 内核中断),一共有92个中断源。

        在 STM32 的中断向量表中,表中的每一项(名称)实际上是中断服务函数(Interrupt Service Routine,ISR)的入口地址的标号,这些标号通常和函数名紧密相关, 一般在后面加上 xxxx_IRQHandler 。当一个中断事件发生时,硬件会根据中断向量表找到对应的中断服务函数的入口地址,然后跳转到该函数去执行相应的中断处理代码。

NVIC

        NVIC指的是嵌套向量中断控制器,作用是管理所有的中断(相当于中断的总开关),主要用于管理和处理中断请求,决定中断的优先级、是否响应中断以及处理中断嵌套等复杂情况。

        使用中断之前 , 一定要打开中断 , 并且设置好优先级

        NVIC的中断优先级由优先级寄存器的4位(0~15)决定,这4位可以进行切分,分为高n位的抢占优先级和低4-n位的响应优先级

        抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队

按中断源分类

1.外部中断:

设备触发型外部中断:

        由外部设备的物理动作产生,如按键按下或松开、鼠标点击或移动等。例如,在计算机键盘中,当一个按键被按下时,键盘控制器会发送一个中断信号给 CPU,这个信号通过计算机的中断系统触发键盘中断。这种中断使得 CPU 能够及时响应外部设备的操作,从而执行相应的程序来处理按键事件,如在文字处理软件中输入字符。

传感器触发型外部中断:

        由外部传感器检测到物理量变化而产生。

通讯接口触发型外部中断:

        在通信过程中产生,比如串口通信接收或发送数据完成时触发。

2.内部中断:

定时器/计数器中断:

        基于微处理器或单片机内部的定时器和计数器模块产生。

指令异常中断:

        包括非法指令中断和除法错误中断等。当处理器执行一条它无法识别或者不允许执行的指令(如错误的操作码、未定义的指令格式)时,会触发非法指令中断。这通常是为了防止程序出现错误或者防止恶意软件的攻击。除法错误中断是在进行除法运算时,如果除数为零,处理器会触发此中断,以防止程序因为错误的运算而出现崩溃或者产生错误的结果。

电源管理中断(对于具有电源管理功能的处理器):

        当电源状态发生变化(如电池电量过低、电源适配器插入或拔出)时触发。

DMA(直接内存访问)中断:

        DMA 控制器在完成一次数据块的传输任务(如从硬盘读取数据到内存)时,会触发中断。

3.软件中断:

系统调用中断(在操作系统环境下):

        应用程序需要请求操作系统提供某些服务(如文件读写、进程创建、内存分配等)时,会通过系统调用指令来触发中断。

软件陷阱(Software Trap):

        是一种由程序员故意设置的中断触发机制。在程序开发中,为了调试目的或者处理特殊情况,会在代码中插入特定的指令来触发中断。例如,在一些复杂的嵌入式系统程序中,当程序执行到一个可能出现错误或者需要特殊处理的位置时,程序员会插入一条软件陷阱指令。当 CPU 执行到这条指令时,就会触发中断,跳转到预先编写的中断服务程序进行错误检查、数据记录或者特殊的恢复操作。

外部中断:

        外部中断是指由微控制器(MCU)或微处理器外部的信号触发产生的中断。这些外部信号通常来自外部设备,如按键、传感器、通信接口等,用于通知 CPU 外部事件的发生,使得 CPU 能够及时响应并处理这些事件。

中断线:

        EXTI0 ~ EXTI15 是中断线

        中断线起到传递中断信号的作用,将外部设备产生的中断请求信号传送到中断控制器,以便中断控制器能够根据中断优先级等规则对中断请求进行处理。

        PA0~PI0 都挂在EXTI0的中断线上 ...... 依此类推 PA15~PI15挂在EXTI15中断线上

        SYSCFG : 用于链接GPIO和中断线的桥梁 , SYSCFG 参与中断线与外部引脚(如 GPIO 引脚)的映射关系。例如,对于外部中断(EXTI),可以通过 SYSCFG 来确定哪些 GPIO 引脚与特定的中断线相连。

    版权声明:

    本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

    我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com