STM32CubeMX按键模块化 点灯

简介: 我们继续讲解 stm32 f103,这篇文章将详细 为大家讲解 如何 使用 按键点亮 RGB 灯。

前言


我们继续讲解 stm32 f103,这篇文章将详细 为大家讲解 如何 使用 按键点亮 RGB 灯。


一、按键原理图


参考手册:


可以 看到 板子有 4 个按键 :KEY1, KEY2, KEY3, KEY4。


对应的 io 端口分别是 :PA0, PG15, PC13, PE3.


2a1c1fca5b9379fa9352e7a0c98af1c.png

以 KEY1 为例 分析:


该电路接了一个 3V 的电压。

当 按键 按下时,电流 流向按键,然后接地,则 PA0 为 低电平 0。

当按键 松开时,电流流向 PA0 ,则 PA0 是 高电平 1。


所以:

当 PA0 为 低电平 0 时,按键 按下。

当 PA0 为 高电平1 时,按键 松开。


二、CubeMX 创建工程


选择芯片。

e669bc1e373ef0f9bffe5d3285d5089.png

选择 Debug 模式。

25733cfeff366f3b43a097e2cfb9577.png

选择外部时钟。

f8390224d2ac66af5737df78dd82143.png

配置系统时钟,在 红框中输入 72 ,然后点击 回车 两次,即可配置好。

a2f4ab2fb094216e468bd12de876a74.png

配置 io 引脚 为 输入引脚。

67d0ee152694223e000bcb6b0b058b2.png

d5cabe2824b213447b45a94eabfa629.png

配置引脚。

9bd0ef6c32ed5325fe795bfebbbd682.png

设置工程模式和版本。

28aeca8d790fe61ce035c83b4c3f5af.png

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

4dde0a7caad98711ecdcd72729923d3.png

创建工程。

77ba89925c613335211acf1c451659c.png

三、代码讲解:


由于我们采用 封装的方法来写程序,所以 我们将 key 程序用一个.c .h文件封装起来,这样便于我们对代码进行修改与移植。


对于 led 的代码可以参考我之前的文章:STM32f103 CubeMX封装 led程序


1. GPIO的输入HAL库函数:

功能:读取一个GPIO引脚的电平。


GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

1

例如: 读取 K1 的电平,将其重定义。


#define  K1   HAL_GPIO_ReadPin(K1_GPIO_Port, K1_Pin)

1

2. 消抖:

a69331e4c9ab3e6593adcc768693575.png


抖动产生原因: 按键按下的 瞬间 引脚的 电平 不是马上 从 高电平 变为 低电平 或者从 低电平 变成 高电平,而是有一个抖动。


解决方法: 可以使用加 延时 判断的办法消除这个抖动。


例如:按下 K1 点亮 led


 

#define  K1   HAL_GPIO_ReadPin(K1_GPIO_Port, K1_Pin)
    #define Red_ON()  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET)
  if(K1 == 0)  
  {
  HAL_Delay(100);  //消抖,延时 100 ms
  if(K1 == 0)     //如果按键 真的 按下
  {
    Red_ON();  //led 亮
  }
  else Red_OFF();   //led 熄灭
  }
1


3. 详细代码

key.h 文件:


#include "main.h"
#define  K1   HAL_GPIO_ReadPin(K1_GPIO_Port, K1_Pin)  //读取 K1 电平
#define  K2   HAL_GPIO_ReadPin(K2_GPIO_Port, K2_Pin) //读取 K2 电平
#define  K3   HAL_GPIO_ReadPin(K3_GPIO_Port, K3_Pin) //读取 K2 电平
void Key(void);



key.c 文件:


#include "key.h"
#include "led.h"
void Key(void)
{
  if(K1 == 0)
  {
  HAL_Delay(100);
  if(K1 == 0)
    Red_ON();
  else Red_OFF();
  }
  else if(K2 == 0)
  {
  HAL_Delay(100);
  if(K2 == 0)
    Green_ON();
  else Green_OFF();
  }
  else if(K3 == 0)
  {
  HAL_Delay(100);
  if(K3 == 0)
    BlUE_ON();
  else BlUE_OFF();
  }
}



四,实验现象:


对于按键 让 RGB 闪烁的实验结果我发在了 B占,有兴趣的可以看看:


实验现象


总结

下一篇 讲 OLED 显示。


相关文章
|
芯片
最详细STM32,cubeMX 按键点亮 led
最详细STM32,cubeMX 按键点亮 led
193 0
|
4月前
STM32CubeMX 按键控制LED
STM32CubeMX 按键控制LED
71 0
|
4月前
stm32f407探索者开发板(八)——按键输入实验--GPIO做输入
stm32f407探索者开发板(八)——按键输入实验--GPIO做输入
STM32速成笔记(三)—按键检测
本文介绍了如何利用STM32进行按键检测,先介绍了原理,后面给出了配置步骤和应用例程。此外,本文还叙述了如何利用一个按键单独控制一个LED亮灭,以及如何检测按键长短按。
668 0
STM32速成笔记(三)—按键检测
|
6月前
|
数据安全/隐私保护 芯片
【STM32基础 CubeMX】按键的检测
【STM32基础 CubeMX】按键的检测
169 0
No.6 STM32F429IGT6 LED按键检测 按键点灯 (STM32F429/F767/H743)
No.6 STM32F429IGT6 LED按键检测 按键点灯 (STM32F429/F767/H743)
使用STM32CubeMX实现按下按键,电平反转
使用STM32CubeMX实现按下按键,电平反转
216 0
使用STM32CubeMX实现按下按键,电平反转
|
C语言
STM32矩阵按键
STM32矩阵按键
|
5月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
441 2