STM32 HAL库 CubeMx 按键中断控制LED

依旧是使用Clion和CubeMx开发

实现功能

以中断的方式,通过按键控制 led灯的亮灭

按一下,灯亮。再按一下,灯灭。

一 新建工程

查看原理图

按键    PA15
LED灯    PA8

打开CubeMx,先使能串口线,让我们可以通过仿真器往单片机里下载程序。
在这里插入图片描述
找到PA15,选择为GPIO_EXTI15 中断模式
在这里插入图片描述
GPIO mode设置为 上升沿中断
在这里插入图片描述
我们的GPIO默认是3.3V高电平,当按下按键,GPIO变为低电平,此过程是下降沿。松开按键,GPIO又变为高电平,此过程为上升沿。我是设置的是上升沿中断,也就是松开按键的时候,灯会变化。
在这里插入图片描述
PA8 LED引脚配置,默认设为高电平,处于熄灭状态
在这里插入图片描述
在这里插入图片描述
开启中断,将优先级降低一点,设为1。数字越小优先级越高。
上面的都是一些系统的中断,为了不影响系统的运行,我们要将外设的中断优先级设置的低一些。
在这里插入图片描述
时钟的话,36M就够用了。
在这里插入图片描述

然后生成工程

代码编写

在gpio.c文件中可以找到,中断服务函数

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)

当捕获到上升沿,触发中断,就会进入到这个函数里面,
在这里插入图片描述
然后就会执行HAL_GPIO_EXTI_Callback(GPIO_Pin);函数
此函数为回调函数,我们进去看看。
前面的 __weak 表示此函数为虚函数,需要用户重写的。
那就重写呗

__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(GPIO_Pin);
  /* NOTE: This function Should not be modified, when the callback is needed,
           the HAL_GPIO_EXTI_Callback could be implemented in the user file
   */
}

在主函数的上面随便找个空地
在这里插入图片描述
输入如下代码

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    /* Prevent unused argument(s) compilation warning */
    HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_8);  //翻转电平
    /* NOTE: This function Should not be modified, when the callback is needed,
             the HAL_GPIO_EXTI_Callback could be implemented in the user file
     */
}

就像下面这样
松开按键,进入回调函数,LED电平翻转一次。这样就实现了按键控制LED灯的亮灭。
在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值