使用STM32CubeMX实现按下按键,电平反转
创始人
2024-01-31 04:00:09
0

需提前学习:使用STM32CubeMX实现LED闪烁

目录

原理图分析

按键部分原理图分析

LED部分原理图分析

STM32CubeMX配置

关于STM32CubeMXSYS的Debug忘记配置Serial Wire处理办法

GPIO配置

LED的GPIO配置

 KEY1配置

关于PA0后面这个WKUP是什么?

那么啥又是低功耗呢?

生成keil文件

关于宏定义失败问题

Keil程序编写

HAL_GPIO_ReadPin()

函数声明

GPIOx和GPIO_Pin

返回值

while(1)内容

软件消抖

按键抖动相关知识

软件消抖


我们有了上一章博客的基础之后,大概了解了STM32CubeMX的使用。现在我们先分析按键的电路图,再进行实战。

原理图分析

按键部分原理图分析

首先我们看原理图得知

按键分析

(1)如果K1没有被按下,PA0引脚是连接的GND的(这个是外部下拉,后面会介绍)。

(2)如果按键被按下,那么PA0是R4并联,此时3.3V输出的电流将会流入GND和PA0,那么此时PA0为是显示的高电平。

其他器件分析

(3)R4和R7作用,用于限流。STM32F103系列单片机,IO总输入电流不得超过25mA。

(4)C6是一个电容0.1uf的电容,用于硬件消抖。玩过51单片机的人都知道,我们进行按键行为的时候,都需要一个软件消抖。但是假如我们在按键上并联一个电容,能够做到硬件消抖,这样就不在需要麻烦软件进行软件消抖了。

LED部分原理图分析

我们看到这里的LED是外接的高电平,所以引脚需要置为低电平,LED才会亮。 我们这里配置PB0

 注意,我上一个博客,LED是外接的GND(低电平),所以才是高电平LED亮。

STM32CubeMX配置

我们这里需要让按下按键K1,电平反转。不会新建工程的建议看完STM32CubeMX新建工程并点亮一个LED;

关于STM32CubeMXSYS的Debug忘记配置Serial Wire处理办法

再次强调,需要在SYS的Debug中,将其配置为Serial Wire!!!不然你的板子变成一块砖头就不关我的事情了

如果你真的忘记选择了,怎么办呢?

(1)先将BOOT0和BOOT1引脚都直接连接3.3V(使用跳线帽或者杜邦线连接均可)

(2)烧录配置好Serial Wire的程序

(3)重新将BOOT0和BOOT1连接到GND。现在就是正常了。

GPIO配置

LED的GPIO配置

首先先是配置LED,因为我们需要点灯,所以还是设置为输出。按照下图配置即可

 KEY1配置

(1)上面看原理图我们直到KEY1对应的是PA0,所以我们需要初始化PA0为输出。

(2)我们直到,当按键按下。PA0为高电平,所以我们这里PA0需要配置为下拉输入。

拉输入的意思是,如果GPIO默认电平为什么。如果无上下拉,那么GPIO为悬空的。GPIO悬空状态我遇到的情况只有三种,第一是GPIO为输出,第二种是GPIO复用为ADC引脚,第三种就是GPIO为输入,但是有外接上下拉。

(3)我们现在PA0是有一个外接的下拉电阻的,所以可以配置为悬空输入,但是我还是建议配置为下拉输入。

 STM32CubeMX配置如下:

关于PA0后面这个WKUP是什么?

我们发现,PA0后面接了一个WKUP。但是其他的GPIO,像是PB0后面都没有接东西。这个WKUP是什么呢?

唤醒MCU,比如当MCU在低功耗状态下或者休眠之类的状态下,通过引脚的Wakeup功能可以将MCU唤醒,让MCU进入正常的工作状态。 

那么啥又是低功耗呢?

(1)低功耗你可以理解为你收集熄屏状态,他在运行,但是耗电更少。当我们按下开机键(也就是现在的PA0-WKUP),手机亮屏。

(2)很不幸的是,我们玩stm32一般不管低功耗这东西。你可以理解为,你的手机永远不会熄屏,除非电池没有电了,他的屏幕永远是亮着的。

生成keil文件

详情看:STM32CubeMX新建工程并点亮一个LED的文件生成部分

关于宏定义失败问题

我们发现我们明明设置了宏定义,但是生成的文件依旧是 GPIOB和GPIO_PIN_0。而不是LED_G_GPIO_Port和LED_G_Pin。

原因可能是因为我们设置的是PA0引脚,这个跟低功耗有关,我们设置了这个之后,会发现SYS有一个感叹号。这个感叹号可以不用管,唯一造成的影响是宏定义失败了。

Keil程序编写

HAL_GPIO_ReadPin()

这个函数作用是读取GPIO电平。

函数声明

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)

GPIOx和GPIO_Pin

这个我在上一个博客已经说过了。不再重复

返回值

GPIO_PIN_SET     //如果引脚是高电平返回这个
GPIO_PIN_RESET   //如果引脚是低电平返回这个

while(1)内容

因为初始化部分,STM32CubeMX以及帮我们做好了,所以我们只需要再死循环里面操作。

需要注意的一点是,按键需要一个循环等待松手。

  while (1){//写这个函数是因为一开始,我按下按键LED无变化,测试LED是否正常//HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);/* USER CODE END WHILE */if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_SET)  //如果按键按下为高电平{HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);  //反转电平while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_SET); //这里需要等待松手,不然会出现LED快速反转,可能导致我们看不到LED亮灭的情况}/* USER CODE BEGIN 3 */}

软件消抖

按键抖动相关知识

虽然我们野火的指南者开发板具备硬件消抖,但是正点原子的开发板好像是没有硬件消抖的。所以我还是讲解一下。

这里先推荐一篇文章:独立按键的工作原理

一般机械按键按下都会有一个5~20ms的机械抖动。

(1)对于单片机而言就是如下。因为程序运行时间很短,一个while循环很大可能1ms都不需要。

(2)当我们按下按键的时候,正常人都是需要零点几秒,也就是几百ms,这已经进行了几次while循环了。那么就会出现一个问题,我们明明只按下了一次,但是单片机会认为我们按下了很多次。

软件消抖

(1)既然存在5~20ms的按键抖动,那么我们当我们检测到高电平的时候,等待20ms,重新判断是否为高电平。如果依旧是高电平,那么此时按键被按下了。

(2)需要注意一点,按键抖动不仅按下的时候有抖动,松手的时候也有抖动啊。为什么while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_SET);之后不在进行一次20ms 的延时呢?

(3)原因很简单,如果这次死循环结束了,重新开始死循环,第一次if判断在松手的按键抖动里面检测到是高电平。那么进入第一个if语句,延时20ms,此时松手的按键抖动已经过去了,那么电平必然是低电平。所以第二个if语句无法通过。

  while (1){/* USER CODE END WHILE */if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_SET){HAL_Delay(20);  //等待按键抖动过去if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_SET) //重新判断电平HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);  //如果按键真的被按下了,反转电平while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_SET);}/* USER CODE BEGIN 3 */}

相关内容

热门资讯

*ST节能(000820)披露... 截至2025年12月26日收盘,*ST节能(000820)报收于3.36元,较前一交易日上涨0.9%...
疑电芯质量存问题,500亿巨头... 二线电池厂商欣旺达(300207.SZ)被起诉了! 12月26日盘后,欣旺达披露公告称,公司子公司欣...
央行报告:加强房地产金融宏观审... 每经AI快讯,据央行网站12月26日消息,中国人民银行近日发布了《中国金融稳定报告(2025)》。报...
济南起步区“民生政策进社区”活...   鲁网12月26日讯深冬微寒,社区里却暖意融融。在起步区崔寨街道凤凰理想社区的小广场上,一排排政策...
振芯科技召开临时股东大会 三项... 围绕振芯科技(300101)的控制权纷争已延续数年之久,如今,双方又针对多项上市公司相关治理制度修订...
吉利威睿起诉欣旺达动力:因电芯... 据悉,吉利旗下威睿电动汽车技术(宁波)有限公司起诉欣旺达动力科技股份有限公司,索赔金额高达23亿元。...
央行:将实施更加积极有为的宏观... 近日,中国人民银行发布了《中国金融稳定报告(2025)》。下一步,金融系统将实施更加积极有为的宏观政...
阳西各镇妇联开展农村妇女法律讲... 12月以来,阳西县妇联联合阳西县司法局,组织各镇开展农村妇女法律讲座系列活动,旨在深入贯彻落实法治乡...
重构人才评价体系 成都东部新区... 封面新闻记者 柴枫桔 12月26日,成都东部新区产业人才政策发布会暨2025年四季度“双招双引”投资...
“鲜”人一步!自贸试验区昆明片... 目前,中国是全球最大的榴莲进口国,占全球市场份额90%以上,云南榴莲进口量已跃居全国第二、西部第一。...