STM32
直播中

杨万富

7年用户 1486经验值
擅长:526774
私信 关注
[问答]

如何利用STM32CubeMX按键实现外部中断控制LED灯亮灭?

如何利用STM32CubeMX按键实现外部中断控制LED灯亮灭?

回帖(1)

庄雪昕

2021-11-17 10:36:11
硬件平台:正点原子STM32MINI开发板(STM32RCT6)
软件平台:STM32CubeMX
KEIL5
实现功能:按键实现外部中断控制LED灯亮灭
硬件连接: KEY_0 ->PC5
PA8 ->LED0
说明:有时候程序下载后不实现,可试着复位一下,也可在魔术棒配置中打开下载后复位。
(仅仅写了外部中断部分,其余初始化未做说明)





1、由图可知,KEY0会是由下降沿触发外部中断





2、将PC5配置成外部中断





3、点击PC5,配置模式为外部中断下降沿触发。内部上拉





4、点击NVIC,使能外部中断





5、在NVIC界面,选择分组方式,以及配置优先级,所有配置完成后,生成代码





6、在stm32f1xx_it.c中有此外部中断的服务函数





7、点击HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_5);转到定义处,可看到其函数定义,__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);为外部中断的回调函数,是一个虚函数,可由用户重新定义。





8、在main.c文件中可重新定义该回调函数,并写关于外部中断的内容,该段代码作用是如果触发中断的是引脚5,翻转电平。
在用回调函数时,发现外部中断只会有一个回调函数,不同外部中断触发后调用的是同一个函数,这对有时候想要在不同文件中写不同的外部中断文件来说可能不太方便,如果有这方面需求,可按照以下方案配置





1、在NVIC的Code generation中,将外部中断线的Generate IRQ handler取消选中,然后生成代码,记得中断还是要使能,只是不生成中断服务函数代码。





2、自己编写中断服务函数代码,记得清除外部中断标志。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分