蓝桥杯 stm32 按键点灯 CubeMX

简介: 从图中我们可以看到有 4个按键,B1 , B2 , B3 , B4。对应的 GPIO 端口是 PB0 , PB1, PB2 ,PA0。当按键按下,IO 口读到低电平;按键弹起,IO 口读到高电平。LED 的原理图,CubeMX 配置,以及代码讲解都在我的上篇文章 里详细讲解了,这 篇文章主要为大家讲解 按键 的使用。蓝桥杯嵌入式之 LED 闪烁

前言


一、按键 原理图:


d1d54d27374c08618822c1b0a00ceb3.png


从图中我们可以看到有 4个按键,B1 , B2 , B3 , B4。


对应的 GPIO 端口是 PB0 , PB1, PB2 ,PA0。


当按键按下,IO 口读到低电平;按键弹起,IO 口读到高电平。


LED 的原理图,CubeMX 配置,以及代码讲解都在我的上篇文章 里详细讲解了,这 篇文章主要为大家讲解 按键 的使用。

蓝桥杯嵌入式之 LED 闪烁


二、按键CubeMX配置:


1c99719f611e4ba19ace87313bd5b2a.png

(1)设置 IO 端口是 PB0 , PB1, PB2 ,PA0为 输入模式。



(2)设置 RCC


dbf694e73c649e5a72f15b1ad4428d0.png


(3)设置时钟:选用内部时钟,80 MHZ.


6a8feb3e7e7cbdf972c266726a30447.png


(4)设置工程模式和版本。


bea3f3dcfebd8d6b96278c1c75378fd.png


(5)选取加入.c /.h文件(便于编写代码)


02e7c0cddc6c3b73f5478d6fa44536e.png


(6) 创建工程


51657d7f48db1d5038c5bdafbe89a6b.png

三、代码讲解


1. 读按键:( 三行代码)

Trg 代表 单次触发。

Cont 表示 长按。

KB1 ~ KB4分别对应 按键 B1 ~ B4


#

define  KB1  HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)  //B1
#define  KB2  HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)  //B2
#define  KB3  HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2) //B3
#define  KB4  HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) //B4
#define  KEYPORT   KB1 | (KB2<<1) |(KB3<<2) |(KB4<<3) | 0xf0
u8 Trg;   //全局变量,单次触发
u8 Cont;  //全局变量,长按
/* 三行代码读按键值 */
void Key_Read(void)
{
 u8 ReadData = (KEYPORT)^0xff;
 Trg = ReadData & (ReadData ^ Cont);
 Cont = ReadData;
}



2.按键消抖:

通常我们使用的都是机械弹性开关,当机械触点断开,闭合时,由于机械点的弹性作用,一个按键在按下,松开时不会马上接通,断开。



为了确保按键的一次闭合一次断开只响应一次,需要进行消抖处理。


按键的抖动是由按键的机械特性决定的,一般都会在 10 ms 以内。


按下按键,10 ms 后读取按键值。

__IO uint32_t keyTick = 0;
 while(1)
 {
  if(uwTick - keyTick < 10) //10ms 的机械消抖
   return ;
  keyTick = uwTick;  //便于下一次按下按键,读取数值
  Key_Read();   //读取按键值
 }


uwTick 是延迟函数 HAL_Delay 里面的一个计时变量。 默认是 1ms 增加一次。


按下按键后,uwTick 开始计数,10 ms 后读取按键值。


将 keyTick = uwTick,便于下一次按下读取数值。


__IO uint32_t uwTick;


1

2

3,按键点灯:

可以通过 Trg & 0x01 按位进行判断是哪个按键按下。

例如:


if(Trg & 0x01)     //按下B1
 {
  LED_Control(0x10);  //点亮 LED5 
 }
  if(Trg & 0x02)  //B2
 {
  LED_Control(0x20);  //点亮 LED6 
 }



LED_Control ( 0x10 ) ; 该函数为点亮 LED 灯的函数,前面提到了在我的上篇文章的 例程代码 中已详细讲解。蓝桥杯嵌入式之 LED 闪烁


总结

实验效果:

下一节我们讲解 ADC 功能的实现。


实验效果录制在 B 占,在下面网址:

https://www.bilibili.com/video/BV1s24y1Y7uZ/?vd_source=986c364d205fa1124b337bc665f57c4f

相关文章
|
芯片
最详细STM32,cubeMX 按键点亮 led
最详细STM32,cubeMX 按键点亮 led
205 0
|
传感器 芯片
最详细STM32,cubeMX 点亮 led
最详细STM32,cubeMX 点亮 led
183 0
|
5月前
STM32CubeMX 按键控制LED
STM32CubeMX 按键控制LED
79 0
|
5月前
stm32f407探索者开发板(八)——按键输入实验--GPIO做输入
stm32f407探索者开发板(八)——按键输入实验--GPIO做输入
|
7月前
|
C语言
【STM32 CubeMX】移植u8g2(一次成功)
【STM32 CubeMX】移植u8g2(一次成功)
760 0
STM32速成笔记(三)—按键检测
本文介绍了如何利用STM32进行按键检测,先介绍了原理,后面给出了配置步骤和应用例程。此外,本文还叙述了如何利用一个按键单独控制一个LED亮灭,以及如何检测按键长短按。
729 0
STM32速成笔记(三)—按键检测
|
7月前
|
缓存 网络协议 算法
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
|
7月前
|
传感器 开发者
【STM32基础 CubeMX】外部中断
【STM32基础 CubeMX】外部中断
260 44
|
7月前
|
存储 传感器
【STM32基础 CubeMX】uart串口通信
【STM32基础 CubeMX】uart串口通信
430 0
|
7月前
|
传感器 芯片
【STM32基础 CubeMX】从0带你点灯
【STM32基础 CubeMX】从0带你点灯
231 0
【STM32基础 CubeMX】从0带你点灯