【单片机学习之旅】(2-2)stm32F4中断系统及寄存器

中断系统及寄存器

  • 1.F4xx中断系统结构
  • 2.EXTI 寄存器

1.F4xx中断系统结构

STM32F4xx的中断系统将中断分为了两个类型:内核异常和外部中断。并将所有中断通过一个表编排起来,下面是stm32中断向量表的部分内容:
【单片机学习之旅】(2-2)stm32F4中断系统及寄存器_第1张图片
上图-3到6这个区域就是内核异常。内核异常不能够被打断,不能被设置优先级。常见的内核异常有以下几种:复位(reset),不可屏蔽中断(NMI),硬错误(Hardfault)。从位置0往下都是外部中断,包括各种外设的中断,可配置优先级。外部中断的优先级分为两种:抢占优先级和响应优先级
抢占优先级
抢占优先级高的,能够打断优先级低的任务,等优先级较高的任务执行完毕后,再回来继续执行之前的任务。所以当存在多个抢占优先级不同的任务时,很有可能会产生任务的嵌套。
响应优先级
响应优先级被称为次优先级,若两个任务的抢占优先级一样,那么响应优先级较高的任务则先执行,且在执行的同时不能被下一个响应优先级更高的任务打断。
中断控制器(NVIC)
● STM32F405xx/07xx 和 STM32F415xx/17xx 具有 82 个可屏蔽中断通道
● 16 个可编程优先级(使用了 4 位中断优先级)
● 低延迟异常和中断处理
● 电源管理控制
● 系统控制寄存器的实现
因为stm32的中断系统比较复杂,所以在内核中有一个专门管理中断的控制器:NVIC
NVIC负责除了SYSTICK之外的所有中断的控制,十分重要!
在标准库中,提供了一套通过NVIC来控制中断的API,用来管理中断。
外部中断/事件控制器 (EXTI)
● 每个中断/事件线上都具有独立的触发和屏蔽
● 每个中断线都具有专用的状态位
● 支持多达 23 个软件事件/中断请求
● 检测脉冲宽度低于 APB2 时钟宽度的外部信号。
【单片机学习之旅】(2-2)stm32F4中断系统及寄存器_第2张图片
要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置 2 个触发寄存器,同时在中断屏蔽寄存器的相应位写“1”使能中断请求。当外部中断线上出现选定信号沿时,便会产生中断请求,对应的挂起位也会置 1。在挂起寄存器的对应位写“1”,将清除该中断请求。
要产生事件,必须先配置好并使能事件线。根据需要的边沿检测设置 2 个触发寄存器,同时在事件屏蔽寄存器的相应位写“1”允许事件请求。当事件线上出现选定信号沿时,便会产生事件脉冲,对应的挂起位不会置 1。
通过在软件中对软件中断/事件寄存器写“1”,也可以产生中断/事件请求。
硬件中断选择
要配置 23 根线作为中断源,请执行以下步骤:
● 配置 23 根中断线的屏蔽位 (中断屏蔽寄存器)
● 配置中断线的触发选择位(上升沿触发选择寄存器和下降沿的)
● 配置对应到外部中断控制器 (EXTI) 的 NVIC 中断通道的使能和屏蔽位,使得 23 个中断线中的请求可以被正确地响应。
硬件事件选择
要配置 23 根线作为事件源,请执行以下步骤:
● 配置 23 根事件线的屏蔽位 (事件屏蔽寄存器)
● 配置事件线的触发选择位(上升沿触发选择寄存器和下降沿的)
软件中断/事件选择
可将这 23 根线配置为软件中断/事件线。以下为产生软件中断的步骤。
● 配置 23 根中断/事件线的屏蔽位(中断屏蔽寄存器、事件屏蔽寄存器)
● 在软件中断寄存器设置相应的请求位 (软件中断事件寄存器)
外部中断/事件线映射
【单片机学习之旅】(2-2)stm32F4中断系统及寄存器_第3张图片

2.EXTI 寄存器

中断屏蔽寄存器 (EXTI_IMR)
偏移地址:0x00
复位值:0x0000 0000
【单片机学习之旅】(2-2)stm32F4中断系统及寄存器_第4张图片

	对应到23根中断线,从外部中断/事件控制器框图中可以看出
	如果该寄存器对应位没有置1,是不会发生对应的中断请求的

事件屏蔽寄存器 (EXTI_EMR)
偏移地址:0x04
复位值:0x0000 0000
【单片机学习之旅】(2-2)stm32F4中断系统及寄存器_第5张图片
上升沿触发选择寄存器 (EXTI_RTSR)
偏移地址:0x08
复位值:0x0000 0000
【单片机学习之旅】(2-2)stm32F4中断系统及寄存器_第6张图片
下降沿触发选择寄存器 (EXTI_FTSR)
偏移地址:0x0C
复位值:0x0000 0000
【单片机学习之旅】(2-2)stm32F4中断系统及寄存器_第7张图片

外部唤醒线配置为边沿触发时,在这些线上不能出现毛刺信号。
如果向边沿触发选择寄存器写入值的同时外部中断线上产生跳变沿,挂起位不会被置位。
在同一中断线上,可以同时设置上升沿和下降沿触发。即任一边沿都可触发中断。

软件中断事件寄存器 (EXTI_SWIER)
偏移地址:0x10
复位值:0x0000 0000
【单片机学习之旅】(2-2)stm32F4中断系统及寄存器_第8张图片
挂起寄存器 (EXTI_PR)
偏移地址:0x14
复位值:未定义

【单片机学习之旅】(2-2)stm32F4中断系统及寄存器_第9张图片

我们所说的清除中断标志位就是把该寄存器对应位清0
NVIC控制器会判断该寄存器对应位是否为1而发生中断(进入中断函数)

你可能感兴趣的:(单片机,stm32,学习)