STM32的中断和异常
2017-11-17 17:51
197 查看
STM32的中断和异常
我们把能够打断当前代码执行流程的事件分为异常(expection)和中断(interrupt),把他们用一个表管理起来就是中断向量表。中断向量顾名思义就是一个地址,当发生中断的时候,系统的就会跑到这个地址中进行处理,当然实际情况要比这个更加复杂,因为还要做现场保护,堆栈指针SP和程序计数器也要做相应变化,这里既不详细展开了。我们只要明白一个概念就行,那就是中断服务函数的地址就是中断向量的地址。
中断可以分为可屏蔽中断与不可屏蔽中断,其中不可屏蔽中断包括复位(reset)、硬错误等等,这些中断一旦发生,系统必须进行响应处理。
而像定时器中断、外部中断等一些可屏蔽中断,就算中断发生,系统也可以不予理睬。
STM32中的中断非常多,为了让我们管理起来更加方便,他们开发了一个中断控制器(Nested Vector Interrupt Controller)NVIC,它是Cortex内核的一部分,当我们使用中断的时候就需要与NVIC打交道,对于库函数开发而言,我们需要使用到NVIC相关的一些函数。
在ST官方固件库当中有一个NVIC_InitTypeDef类型的结构体,这个至关重要:
NVIC结构体成员
前两个结构体成员相信大家都懂,后两个有点特殊。回想一下51单片机,它只有两个优先级,但是并没有区分是抢占优先级还是响应优先级,只要优先级高,中断发生时就会优先响应。MSP430单片机默认不具备优先级配置,这是因为它的中断一旦响应之后会默认先关闭中断标志位,这样是不支持中断嵌套的,但是用户可以手动打开,实现中断嵌套。
在STM32中抢占优先级和响应优先级共同决定了那个中断先发生,抢占优先级决定了谁先抢到机会,这个比响应优先级更加重要,如果两个中断的抢占优先级一样,那么他们就得再比一比谁的响应优先级更高,高的先响应。
抢占优先级和响应优先级的配置是通过一个4位的数字来确定的,这就决定了最多能有16种中断,这里的种类是指抢占优先级与响应优先级各不相同。
我们把能够打断当前代码执行流程的事件分为异常(expection)和中断(interrupt),把他们用一个表管理起来就是中断向量表。中断向量顾名思义就是一个地址,当发生中断的时候,系统的就会跑到这个地址中进行处理,当然实际情况要比这个更加复杂,因为还要做现场保护,堆栈指针SP和程序计数器也要做相应变化,这里既不详细展开了。我们只要明白一个概念就行,那就是中断服务函数的地址就是中断向量的地址。
中断可以分为可屏蔽中断与不可屏蔽中断,其中不可屏蔽中断包括复位(reset)、硬错误等等,这些中断一旦发生,系统必须进行响应处理。
而像定时器中断、外部中断等一些可屏蔽中断,就算中断发生,系统也可以不予理睬。
STM32中的中断非常多,为了让我们管理起来更加方便,他们开发了一个中断控制器(Nested Vector Interrupt Controller)NVIC,它是Cortex内核的一部分,当我们使用中断的时候就需要与NVIC打交道,对于库函数开发而言,我们需要使用到NVIC相关的一些函数。
在ST官方固件库当中有一个NVIC_InitTypeDef类型的结构体,这个至关重要:
NVIC结构体成员
结构体成员变量 | 描述 |
NVIC_IRQChannel | 需要配置的中断向量 |
NVIC_IRQChannelCmd | 使能或关闭相应中断向量的中断相应 |
NVIC_IRQChannelPreemptionPriority | 抢占优先级 |
NVIC_IRQChannelSubPriority | 响应优先级 |
在STM32中抢占优先级和响应优先级共同决定了那个中断先发生,抢占优先级决定了谁先抢到机会,这个比响应优先级更加重要,如果两个中断的抢占优先级一样,那么他们就得再比一比谁的响应优先级更高,高的先响应。
抢占优先级和响应优先级的配置是通过一个4位的数字来确定的,这就决定了最多能有16种中断,这里的种类是指抢占优先级与响应优先级各不相同。
相关文章推荐
- STM32中断和异常
- STM32学习--异常与中断
- STM32 异常与中断
- STM32之中断和异常
- STM32的"异常“、“中断”和“事件”区别和理解
- STM32中异常、中断、事件辨析
- stm32-中断
- 中断和异常
- stm32 外部中断
- stm32应用部分发生中断,PC跳转到IAP中断向量表处后,如何跳转到应用部分中断函数入口的
- 浅析arm的异常、中断和arm工作模式的联系
- STM32开关总中断
- STM32外部中断
- STM32串口中断
- 异常和中断处理 ARM系统开发者指南 Chapter9-1
- MM32/STM32中断和事件梳理
- STM32外部中断篇
- 计算机中的异常与中断
- uclinux中断和异常向量初始化--------4
- STM32 串口接收中断 代码