前言
用按键控制STM32上的LED灯亮灭,可以采用轮询法和中断法。轮询法需要不断检测按键的状态,消耗MCU;而中断法只是在按下的那一刻触发中断,控制灯亮灭。轮询法相对于更常规,容易操作。因此我们这里讲的用中断法。关于中断的概述,这里不作介绍,只讲操作,分析代码,可以的话,欢迎上车。
注意: 使用HAL库,不讲标准库的使用
1、创建工程
这里我们用两个按键KEY1,KEY2和LED1,LED2.它们在单片机电路原理图上的位置如下图所示:
打开STM32CubeMX,按下图分别配置好上述引脚:
中断触发类型分为:上升沿;下降沿;上升沿和下降沿都触发三种方式,这里我们选用下降沿,即按下按键,灯灭,松开灯亮。
配好NVIC:
配好RCC:
配好SYS
配时钟(以STM32F103系列为例,8M外部晶振)
工程管理与代码生成:
2、keil5的主函数改写
进入到keil5后,只需要进行main.c的改写即可,在main主函数外加入下述代码。因为之前在STMCubeMX的配置已经生成了相关的配置代码。那具体该写些什么呢?先放上代码再做分析:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
switch(GPIO_Pin){
case GPIO_PIN_0:
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET)
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
break;
case GPIO_PIN_1:
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1) == GPIO_PIN_RESET)
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
break;
}
}
上述是一个接口重写的代码。那为什么要这样写?这里就应该提到HAL库的优势之一:提供用户友好的API函数接口。我们这里采用的是中断法,只需要找到处理中断的那部分函数配置。如下图所示:
上图1部分是处理中断请求的函数;2部分是个虚函数,我们仔细看一下上图的那个绿色字体关于这个函数的作用解释。可以理解为:检测中断发生的事件。这两个部分合起来可以理解为:2部分检测是否发生了中断,检测到了交给1部分来处理。而且2部分是个虚函数,绿色字体表明它可以作为一个回调函数。回调函数不是由该函数的实现方直接调用,而是在特定事件或条件发生时由另外的一方调用,用于对该事件或条件的响应。这就是为什么我们会在main.c里面对2部分进行了重写。另外关于上述函数体里面的代码,其实都只是调用了生成配置代码中的函数再加上C语言的语法。相关函数原型如下:
文章来源:https://www.toymoban.com/news/detail-723053.html
结语
中断点灯就此结束,上述内容由我一个人整理,难免有疏漏。有问题欢迎留言讨论!文章来源地址https://www.toymoban.com/news/detail-723053.html
到了这里,关于stm32按键控制LED灯亮灭(中断法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!