中断
中断概念程序中断是指在计算机执行现行程序的过场中,出现某些急需处理的异常情况或特殊请求,CPU暂停中断现行程序,而专区对这些异常情况或特殊情况进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。
中断源,即引起中断的事件或原因,或发出中断申请的来源。
中断向量是中断服务程序的入口地址,在计算机中中断向量的地址存放一条跳转到中断服务程序的跳转指令。
目录
1.stm32中断系统
理解中断、中断源、中断向量、中断优先级、中断服务函数…等基础概念。
中断源,即引起中断的事件或原因,或发出中断申请的来源。
STM32的中断通道可能会由多个中断源共用。这就意味着,某一个中断服务函数也可能被多个中断源所共用。所以,在中断服务函数的入口处,需要有一个判断机制,用以辨别是那个中断触发了中断。
STM32微处理器的内核中有一个NVIC(嵌套向量中断控制器)的设备,它对中断进行统一的协调和控制,其中最主要的工作就是控制中断通道的使能和确定中断的优先级。
STM32中有2个优先级的概念:抢占优先级和响应优先级,每个中断都需要指定这两种优先级。
如果两个抢占优先级相同的中断同时到达,NVIC会根据他们的响应优先级高低来决定先处理哪一个。如果两个同时到达的中断的抢占优先级和响应优先级都相等,则根据中断的自然排位顺序来决定响应哪一个。
2.外部中断介绍
外部中断EXTI是STM32微处理器实时处理外部事件的一种机制,由于中断请求主要来自GPIO端口的引脚,所以称为外部中断。
STM32F013微处理器有19个能产生事件/中断请求的边沿检测器,每个输入线可以独立地配置成输入类型(脉冲或挂起)和对应的触发事件(上升沿、下降沿或双边沿触发),也可以独立地屏蔽。
EXTI0~EXTI15:GPIO端口引脚。
EXTI16:PVD输出,可编程电压监测。
EXTI17:RTC闹钟。
EXTI18:USB唤醒。
3.外部中断程序设计思路
1)传统STM32外部中断设计步骤:
【1】将GPIO初始化为输入端口。
【2】配置相关I/O引脚与中断线的映射关系。
【3】设置该I/O引脚对应的中断触发条件。
【4】配置NVIC,并使能中断。
【5】编写中断服务函数。
2)基于STM32CubeMX的外部中断设计步骤:
【1】在STM32CubeMX中指定引脚,配置中断初始化参数。
选择GPIO引脚的功能,设置中断信号触发条件,使能NVIC对应的中断通道。
0.1新建工程
0.2配置时钟源和时钟树
0.3选择调试方式
0.4配置led
1.配置按键中断
选择pa0为外部中断,配置引脚为低电平触发,默认上拉,引脚重定义为KEY
2.选择pa0口为外部中断,选择下降沿触发。
3.设置NVIC(嵌套向量中断控制器)
在EXTI lin0 interrupt 后打上对勾。设置优先级,并开启外部中断
在EXTI lin0 interrupt 后打上对勾。
4.生成工程并打开
【2】重写该I/O引脚对应的中断回调函数
5.找到外部中断回调函数
将此函数在主函数内重新定义,_weak(弱定义)
6.在中断回调函数内编写服务函数
/* USER CODE BEGIN 0 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == KEY_PIN)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_13);
}
}
外部中断的初始化函数由STM32CubeMX辅助生成,用户只需要重写中断回调函数。