**开发平台** :
正点原子 探索者STM32F407ZET6
cube mx:V 5.1.0
keil uVision5
项目地址:https://github.com/liliang1918/STM32LL
注意:
本教程默认读者已经对stm32和cubemx软件有一定了解;
为节省篇幅,详细配置cubemx的步骤仅在第一篇中说明,以后仅会简略介绍配置相关内容。
STM32LL库系列教程(四)——外部中断
实验目的:学会GPIO_IDR寄存器操作;
学会EXIT_PR寄存器操作;
学会外部中断的原理(重点);
了解按键消抖
实验现象:按下按键KEY_UP LED1翻转一次(红灯);
按下KEY2 LED2翻转一次(黄灯)
1. 配置cubemx
1.1 配置LED
板载的LED是PF9,PF10引脚,配置为Output即可

1.2 配置按键
配置GPIO为EXIT

注意:如下原理图
WK_UP(PA0)按下按键会接到3.3V,我们配置中断类型为上升沿中断,内部下拉,当按下按键后,GPIO电平由低变高,触发上升沿中断
KEY0(PE2)按下会接到地,我们配置中断类型为下降沿中断,内部上拉,当按下按键后,GPIO电平由高变低,触发下降沿中断


1.3 配置中断优先级
这里就选用系统默认的优先级了,不做修改,具体含义在后面再具体解释

2.编写代码
2.1 main.c
因为只对中断进行响应和操作,在这里对main函数中的while(1)中是不需要编写代码的。

2.2 stm32f4xx_it.c
stm32f4xx_it.c是存放各类中断服务函数的文件。
首先,对EXIT0的(PA0),因为正点原子的开发板并没有涉及硬件防抖,因此我们需要软件进行按键防抖,否侧,会导致按一次按键,会进入多次中断的问题。读者也可以把按键防抖的程序去掉再看一看效果如何。
在EXTI0_IRQHandler(void)函数中,LL库自身做了判断、清除标志位的操作,保证了程序不会一直卡在中断服务函数中
void EXTI0_IRQHandler(void)
{
/* USER CODE BEGIN EXTI0_IRQn 0 */
LL_mDelay(10);
if(LL_GPIO_IsInputPinSet(GPIOA,LL_GPIO_PIN_0)==SET)//按键消抖
LL_GPIO_TogglePin(GPIOF,LL_GPIO_PIN_9);//翻转LED1
/* USER CODE END EXTI0_IRQn 0 */
if (LL_EXTI

本文详细讲解了STM32F407ZET6开发平台上的外部中断配置与按键消抖处理,包括cubemx配置流程、GPIO_IDR与EXTI_PR寄存器操作、NVIC中断控制器管理、外部中断过程解析及软件消抖实现。
最低0.47元/天 解锁文章
1466





