一些前置知识

内部原理简介

首先信号进入输入驱动器,详情见上一篇文章。

输入驱动器

信号进入后顺序如下:

边路检测电路

边路检测电路:信号进来首先经过上升下降选择寄存器,由CubeMx进行配置。第一个即为寄存器的配置。第二个为输入信号上拉下拉的配置。

上拉下拉处理中断

接着,经过一个或门。

软件中断寄存器:模拟产生中断,用处可暂时忽略。

事件屏蔽寄存器:非相关知识,之后了解。

输入后,

请求挂起寄存器:相应位置变为’1’,即输入高电平信号。

中断屏蔽寄存器:CubeMx已配置好。

经过与门,进入NVIC。

NVIC主要掌管中断向量表。主要由抢占优先级和响应优先级。主要规则如下:

因此,如要在中断处理函数中使用HAL_DELAY,需要线配置“时钟滴答”的优先级,才可打断中断,实现延时。

设置优先级

代码实践

外部中断实现摁键控制亮灭

在stm32f103xx_it.c中进行改写,如下图所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void EXTI9_5_IRQHandler(void)
{
/* USER CODE BEGIN EXTI9_5_IRQn 0 */

HAL_Delay(10);
if(HAL_GPIO_ReadPin(KEY_GPIO_Port ,KEY_Pin)==GPIO_PIN_RESET){
HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
}//实现摁键摁下,小灯翻转亮灭

/* USER CODE END EXTI9_5_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(KEY_Pin);
/* USER CODE BEGIN EXTI9_5_IRQn 1 */

/* USER CODE END EXTI9_5_IRQn 1 */
}

一些参考资源

1.【keysking的STM32教程】 第7集 深入讲解STM32中断_哔哩哔哩_bilibili