目录
外部中断的配置
一. 设置输入模式
浮空输入/上拉/下拉配置
2. 模拟功能(专门用于模拟信号输入或输出,如:ADC和DAC)
3. 输出配置
4. 复用功能配置
二. 设置EXTI与IO的映射关系
stm32f1中断控制器支持19个外部中断/事件请求
2.(1)AFIO(复用功能IO)【f1】:用于重映射和外部中断映射配置。
(2)EXTI 与 IO对应关系
3. 产生中断流程(外部中断/时间控制器)
6. 寄存器介绍
三. NVIC(嵌套向量中断控制器,属于内核)
1. 了解
2. 中断向量表
3. 相关寄存器
4. 中断优先级基本概念及其分组
5. 工作原理
6. NVIC的使用步骤
四. 外部中断配置步骤
1. EXTI配置步骤【步骤2-5使用HAL_GPIO_Init()函数一步到位】
2. EXTI的HAL库设置步骤
GPIO共分为8种模式:浮空输入、上拉输入、下拉输入、模拟功能、开漏输出、推挽输出、开漏式复用功能、推挽式复用功能
浮空输入:(1)弱上下拉电阻关闭(2)施密特触发器打开(3)双MOS管不导通
上拉输入:(1)弱上拉电阻打开,弱下拉电阻关闭(2)施密特触发器打开(3)双MOS管不导通
下拉输入:(1)弱上拉电阻关闭,弱下拉电阻打开(2)施密特触发器打开(3)双MOS管不导通
模拟功能:(1)弱上下拉电阻关闭(2)施密特触发器关闭(3)双MOS管不导通(4)读入输入数据寄存器时数值为0
开漏输出(不能输出高电平,必须有外部(或内部)上拉才能输出高电平):
(1)弱上下拉电阻关闭(2)施密特触发器打开(3)P-MOS管始终不导通(4)往ODR对应位写0,N-MOS管导通,写1则N-MOS管不导通
推挽输出(可输出高低电平,驱动能力强):
(1)弱上下拉电阻关闭(2)施密特触发器打开(3)往ODR对应位写0,N-MOS管导通,写1则P-MOS管导通
开漏式复用(不能输出高电平,必须有外部(或内部)上拉才能输出高电平,且由其他外设控制输出):(1)上拉电阻关闭(2)下拉电阻关闭(3)施密特触发器打开(4)P-MOS管始终不导通
推挽式复用(可输出高低电平,驱动能力强,且由其他外设控制输出):(1)上拉电阻关闭(2)下拉电阻关闭(3)施密特触发器打开
提供给IO口的中断线有16条,每条中断线都可以与GPIOx0~GPIOx15(x=A,B,C,D,E,F,G)一一对应,所以0-15每条中断线都会有7种(A-G)不同的连接选择。即
补:SYSCFG(系统配置控制器)【F4/F7/H7】:用于外部中断映射配置等。
AFIO_EXTICR1~4(SYSCFG_EXTICR1~4),每个寄存器控制4条中断线,共记16条。
【①边沿检测 ②软件触发 ③中断屏蔽/清除 ④事件屏蔽】
(1)配置好并使能中断线。根据需要的边沿检测设置2个触发寄存器(硬件触发),当外部中断线上发生了期待的边沿时,将产生一个中断请求,边缘检测电路输出为‘1’,则或门输出为‘1’,对应的挂起位也随之被置‘1‘,如果在挂起寄存器的对应位写’1‘,将清除该中断请求。最后在中断屏蔽寄存器的相应位写’1’便可以允许中断请求。
(2)如果需要产生事件,必须先配置好并使能事件线。根据需要的边沿检测通过设置2个触发寄存器,同时在事件屏蔽寄存器的相应位写‘1允许事件请求。当事件线上发生了需要的边沿时,将产生一个事件请求脉冲,对应的挂起位不被置’1’。
(3)通过在软件中断/事件寄存器写’1‘,也可以通过软件产生中断/事件请求。
(4)事件屏蔽寄存器、软件中断事件寄存器用的比较少。
(1)上升沿触发选择寄存器(EXTI_RTSR)
(2)下降沿触发选择寄存器(EXTI_FTSR)
(3)挂起寄存器(EXTI_PR)
(4)中断屏蔽寄存器(EXTI_IMR)
(5)软件中断事件寄存器(EXTI_SWIER)
(6)事件屏蔽寄存器(EXTI_EMR)
支持256个中断(16内核 + 240外部),支持256个优先级,且允许裁剪。
定义一块固定的内存,以4字节对齐(32位单片机),存放各个中断服务函数程序的首地址。中断向量表定义在启动文件(.s),当发生中断,CPU会自动执行对应的中断服务函数。
(1)抢占优先级:高抢占优先级可以打断正在执行的低抢占优先级中断。
(2)响应优先级:当抢占优先级相同时,响应优先级高的先执行,但是不能互相打断。
(3)抢占和响应都相同的情况下,自然优先级越高的,先执行。
(4)自然优先级:中断向量表的优先级。
(5)数值越小,表示优先级越高。
补:一个工程中,一般只设置一次中断优先级分组。
(1)设置中断分组:AIRCR[10:8],HAL_NVIC_SetPriorityGrouping()
(2)设置中断优先级:IPRx bit[7:4],HAL_NVIC_SetPriority()
(3)使能中断:ISERx,HAL_NVIC_EnableIRQ()
(1)使能GPIO时钟
(2)设置GPIO输入模式:上/下拉/浮空输入
(3)使能AFIO/SYSCFG时钟:设置AFIO/SYSCFG时钟开启寄存器
(4)设置EXTI和IO对应关系:选择PA~PK到底哪组IO对应EXTI输入线,AFIO_EXTICR/ SYSCFG_EXTICR
(5)设置EXTI对应通道的屏蔽和上升沿/下降沿触发,IMR、 RTSR/FTSR
(6)设置NVIC:分3步,设置优先级分组、设置优先级、使能中断
(7)设计中断服务函数:编写对应中断的中断服务函数,清中断标志
(1)使能GPIO时钟:__HAL_RCC_GPIOx_CLK_ENABLE()
(2)GPIO/AFIO(SYSCFG)/EXTI:HAL_GPIO_Init(),一步到位
(3)设置中断分组:HAL_NVIC_SetPriorityGrouping()
(4)设置中断优先级:HAL_NVIC_SetPriority()
(5)使能中断:HAL_NVIC_EnableIRQ()
(6)设计中断服务函数:EXTIx_IRQHandler(),清中断标志位(PR寄存器)