你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32CubeMX+Keil5按键操控LED

[复制链接]
STMCU小助手 发布时间:2023-2-3 22:13
STM32CubeMX+Keil5按键操控LED,使用的是STM32F103ZET6

首先按键本身性质需要处理,按键按下会有信号抖动,前沿抖动和后沿抖动,一般前后沿抖动都为5-10ms,如果不消除抖动,进行处理时会出现一次按键被识别成多次

其实电路里面就可以直接硬件消抖,硬件消抖是利用RC低通滤波滤掉,额,应该是用电容,效果好不好我也不知道,好像说效果不一定好,电容的选择也有影响,而且能应用的地方有限,最重要的问题是我这个板子上没有,所以选择软件解决

因为用按键控制LED,所以先看原理图确定引脚

LED引脚,由图可得LED0和LED1为可控LED,分别接着PB5和PE5,接地那个灯是电源灯,接电源即亮

2f622180bede4088b1fb181a976832c6.png

3fa3cbefaf6748de8943ae0e32ed3156.png

b73e30b2b5dc4fe195363cabdab21233.png

按键(KEY)引脚,第一个按键(KEY_UP)连接的引脚WK_UP为PA0有唤醒功能,即可以把MCU从睡眠或低功耗模式中唤醒为正常模式,简单介绍一下,WK_UP给一个上升沿即可唤醒,在实际操作上即为按一下KEY_UP按键,至于怎么进入睡眠模式和其他更详细的,先不管,以后再说,说这么多的意思是,虽然可以用KEY_UP按键,但是我还是不用了

所以就用KEY0,KEY1,KEY2三个按键,分别连接的是PE4,PE3,PE2

很明显就和我一开始说的,根据原理图,这三个按键是直接接地,没有连接电容之类的可以硬件消抖,所以要从软件入手

5f9ccc7452fb49ff9a0ab0969a04e66b.png

806a42076864486abf5316608f5f296c.png

9dae30d53e9e4c83a1337f14df32c620.png

打开STM32CubeMX进行引脚设置,先打开时钟

288f14ea966342718eb62cfd0c98c93f.png

5c2127d4013f4358a14aea244cdd35fc.png

选择debug方式,如果是使用板子的不要选择No Debug

d55734b9c8ef41b0a379e076dccaa58c.png

设置LED的引脚PB5和PE5,设置为输出,为使LED不会接电就亮,初始电平为高

ab1b6f6db57a41c4b470ca3fe5aa7180.png

设置按键引脚PE4,PE3,PE2,设置为输入,因为按键另一边接地,所以按下按键就为低电平,所以内部上拉,设置为高电平,反之,如果按键接高电平的话,内部需要设置下拉,设置为低电平

904856ae10b54300afa4bcd674a7e873.png


判断一次按键电平然后延时一小会再判断一次,实现消除前沿抖动,选择导出

00c93763e84f4e85ad040bc176830bd9.png

85e7073e921c431888fcbe04bf43d7fc.png

选择HAL库

6623ff631a47430391ea3a97ebf52445.png

导出然后打开,写入,实现的功能是按KEY0改变LED0亮灭,按KEY1改变LED1亮灭,按KEY2同时改变LED0和LED1亮灭

fafd1d5b051e4df3b1fee4dcdff77dc9.png

  1. while (1)
  2.   {
  3.     /* USER CODE END WHILE */
  4.                 if(HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin) == GPIO_PIN_RESET)//检测到KEY0为低电平
  5.                 {
  6.                         HAL_Delay(10);//延时10ms
  7.                         if(HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin) == GPIO_PIN_RESET)//检测到KEY0还为低电平
  8.                         {
  9.                                 while(HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin) == GPIO_PIN_RESET);//KEY0按下后状态维持到松开
  10.                                 HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);//翻转LED0电平
  11.                         }
  12.                 }
  13.                 if(HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == GPIO_PIN_RESET)//检测到KEY1为低电平
  14.                 {
  15.                         HAL_Delay(10);//延时10ms
  16.                         if(HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == GPIO_PIN_RESET)//检测到KEY1还为低电平
  17.                         {
  18.                                 while(HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == GPIO_PIN_RESET);//KEY1按下后状态维持到松开
  19.                                 HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);//翻转LED1电平
  20.                         }
  21.                 }
  22.                 if(HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == GPIO_PIN_RESET)//检测到KEY2为低电平
  23.                 {
  24.                         HAL_Delay(10);//延时10ms
  25.                         if(HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == GPIO_PIN_RESET)//检测到KEY2还为低电平
  26.                         {
  27.                                 while(HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == GPIO_PIN_RESET);//KEY2按下后状态维持到松开
  28.                                 HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);//翻转LED0电平
  29.                                 HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);//翻转LED1电平
  30.                         }
  31.                 }
  32.     /* USER CODE BEGIN 3 */
  33.   }
复制代码

然后实现出来是这样

99b882eb63f04d2c9c8ffc7604afd216.gif

————————————————
版权声明:试图摸大鱼


收藏 评论0 发布时间:2023-2-3 22:13

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版