STM32中断刨析
一直以来,学习了 stm32 和 freertos 但在思考 rtos 的任务调度时,涉及到 stm32 的中断就感觉糊里糊涂。本篇记录刨析 stm32 的中断系统。
中断和异常
在STM32微控制器中,中断(Interrupt)和异常(Exception)是两种处理器响应外部事件的机制。它们的区别和联系如下:
区别:
- 中断(Interrupt):中断是外部事件(例如外部IO的状态变化、定时器溢出等)引起处理器正常执行流程的中断。当一个中断事件发生时,处理器会停止当前正在执行的程序,保存当前的执行环境(比如寄存器状态),然后转移到一个预先定义的中断服务函数(Interrupt Service Routine,ISR)去处理中断。处理完成后,再回到原来的执行流程。
- 异常(Exception):异常是由于处理器内部的一些特定条件触发的事件,通常表示了处理器无法继续执行当前指令的情况。异常可以分为两种类型:硬件异常(比如除法零、非法指令等)和软件异常(例如系统调用、断言失败等)。当异常发生时,处理器会类似中断一样,暂停当前执行流程,转移到一个特定的异常处理程序(Exception Handler)去处理该异常。
联系:- 中断和异常都是处理器对外部或内部事件的响应机制,都会导致当前执行流程被中断,然后转移到一个特定的处理程序去处理。
- 在STM32中,中断和异常都可以通过中断向量表(Interrupt Vector Table)来确定相应的处理程序入口地址。
- 在处理中断和异常时,通常需要保存一些关键的状态信息(比如寄存器状态),以便在处理完后能够恢复原来的执行流程。
F103 在内核水平上搭载了一个异常响应系统, 支持为数众多的系统异常和外部中断。其中系统异常有 8 个(如果把 Reset
和 HardFault
也算上的话就是 10 个),外部中断有 60个。除了个别异常的优先级被定死外,其它异常的优先级都是可编程的。
图中灰色部分为系统异常(数了数一共10个),
标签:中断,刨析,STM32,处理器,Interrupt,异常 From: https://www.cnblogs.com/likkoliu/p/18050224