依旧是使用Clion和CubeMx开发
实现功能
以中断的方式,通过按键控制 led灯的亮灭
按一下,灯亮。再按一下,灯灭。
一 新建工程
查看原理图
按键 PA15LED灯 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灯的亮灭。
依旧是使用Clion和CubeMx开发
实现功能
以中断的方式,通过按键控制 led灯的亮灭
按一下,灯亮。再按一下,灯灭。
一 新建工程
查看原理图
按键 PA15LED灯 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灯的亮灭。
举报