STM32F103X datasheet学习笔记---Interrupts and events 1.前言 2.NVIC  3. 外部中断/事件控制器(EXTI) 4.相关寄存器说明

本章主要介绍STM32中断和事件相关的内容

2.NVIC

NVIC管理着包括内核异常等中断

  • 主要特性

68个外部中断源(不包含16个内部中断线)

可编程优先级为16级

低延迟异常和中断处理

电源管理控制

系统控制寄存器的实现

嵌套向量中断控制器(NVIC)和处理器核的接口紧密相连,可以实现低延迟的中断处理和高效地处理晚到的中断

2.1 systick校准值寄存器

系统嘀嗒校准值固定为9000,当系统嘀嗒时钟设定为9MHz(HCLK/8的最大值),产生1ms时间基准。???

2.2 中断和异常向量

STM32F103X datasheet学习笔记---Interrupts and events
1.前言
2.NVIC
 3. 外部中断/事件控制器(EXTI)
4.相关寄存器说明

STM32F103X datasheet学习笔记---Interrupts and events
1.前言
2.NVIC
 3. 外部中断/事件控制器(EXTI)
4.相关寄存器说明

STM32F103X datasheet学习笔记---Interrupts and events
1.前言
2.NVIC
 3. 外部中断/事件控制器(EXTI)
4.相关寄存器说明

图 非互联STM3210XXX中断向量表

 3. 外部中断/事件控制器(EXTI)

STM32F103X datasheet学习笔记---Interrupts and events
1.前言
2.NVIC
 3. 外部中断/事件控制器(EXTI)
4.相关寄存器说明

图 外部中断/事件控制器框图

  • 主要特性

对于非互联产品,EXTI有19个边沿检测器组成

每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。

每个输入线都可以独立地被屏蔽。

挂起寄存器保持着状态线的中断请求

检测脉冲宽度低于APB2时钟宽度的外部信号

  •  唤醒事件管理

STM32F10xxx可以处理外部或内部事件来唤醒内核(WFE)。唤醒事件可以通过下述配置产生:

● 在外设的控制寄存器使能一个中断,但不在NVIC中使能,同时在Cortex-M3的系统控制寄存器中使能SEVONPEND位。

    当CPU从WFE恢复后,需要清除相应外设的中断挂起位和外设NVIC中断通道挂起位(在NVIC中断清除挂起寄存器中)。

● 配置一个外部或内部EXTI线为事件模式,当CPU从WFE恢复后,因为对应事件线的挂起位没有被置位,不必清除相应外设的中断挂起位或NVIC中断通道挂起位

  • 硬件中断选择

通过下面的过程来配置20个线路做为中断源:

 配置20个中断线的屏蔽位(EXTI_IMR)

配置所选中断线的触发选择位(EXTI_RTSR和EXTI_FTSR);

 配置对应到外部中断控制器(EXTI)的NVIC中断通道的使能和屏蔽位,使得20个中断线中的请求可以被正确地响应。

  • 硬件事件选择

通过下面的过程,可以配置20个线路为事件源

配置20个事件线的屏蔽位(EXTI_EMR)

配置事件线的触发选择位(EXTI_RTSR和EXTI_FTSR)

  • 软件中断/事件的选择

20个线路可以被配置成软件中断/事件线。下面是产生软件中断的过程:

配置20个中断/事件线屏蔽位(EXTI_IMR, EXTI_EMR)

设置软件中断寄存器的请求位(EXTI_SWIER)

  • 外部中断/事件线映射

112通用I/O端口以下图的方式连接到16个外部中断/事件线上:

STM32F103X datasheet学习笔记---Interrupts and events
1.前言
2.NVIC
 3. 外部中断/事件控制器(EXTI)
4.相关寄存器说明

图 外部中断通用IO映像

注:1. 通过AFIO_EXTICRx配置GPIO线上的外部中断/事件,必须先使能AFIO时钟

       2. 另外四个EXTI线的连接方式如下:

          ● EXTI线16连接到PVD输出 ● EXTI线17连接到RTC闹钟事件 ● EXTI线18连接到USB唤醒事件 ● EXTI线19连接到以太网唤醒事件(只适用于互联型产品)

4.相关寄存器说明

中断屏蔽寄存器(EXTI_IMR):使能/屏蔽20路中断请求线

事件屏蔽寄存器(EXTi_EMR): 使能/屏蔽20路事件请求线

上升沿选择寄存器(EXTR_RTSR):使能/禁用20路上升沿触发线

下降沿选择寄存器(EXTR_FTSR):使能/禁用20路下降沿触发线

软件中断/事件寄存器(EXTR_SWIER):如果在EXTI_IMR和EXTI_EMR中允许产生该中断,当该位为’0’时,写’1’将设置EXTI_PR中相应的挂起位。则此时将产生一个中断

pending寄存器(EXTI_PR):是否有triger请求发生