野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 23959|回复: 0

STM32H743按键问题

[复制链接]
发表于 2021-6-8 08:30:35 | 显示全部楼层 |阅读模式
本帖最后由 何小峰 于 2021-6-8 08:35 编辑

我用的是STM32H743的一个开发板,没有带硬件消抖,所以想用软件延时的方式消抖,电路原理图在最下方:
初始化的代码如下:
  1. /* 按键引脚初始化 */
  2. void KEY_GPIO_Init(void)
  3. {
  4.         GPIO_InitTypeDef GPIO_Init;
  5.         
  6.         __HAL_RCC_GPIOA_CLK_ENABLE();
  7.         __HAL_RCC_GPIOG_CLK_ENABLE();
  8.         
  9.         GPIO_Init.Mode = GPIO_MODE_INPUT;
  10.         GPIO_Init.Pin  = KEY1_PIN;
  11.         GPIO_Init.Pull = GPIO_PULLDOWN;
  12.         
  13.         HAL_GPIO_Init(KEY1_PORT,&GPIO_Init);
  14.         
  15.         GPIO_Init.Pin  = KEY2_PIN;
  16.         GPIO_Init.Pull = GPIO_PULLUP;
  17.         
  18.         HAL_GPIO_Init(KEY2_PORT,&GPIO_Init);
  19. }
复制代码
检测函数如下:
  1. /* 两个按键扫描函数,返回KEY_ON说明有键确实被按下 */
  2. uint8_t KEY1_Scan(void)
  3. {
  4.         if(HAL_GPIO_ReadPin(KEY1_PORT,KEY1_PIN) == 1)
  5.         {
  6.                 HAL_Delay(15);
  7.                 if(HAL_GPIO_ReadPin(KEY1_PORT,KEY1_PIN) == 1)//确实被按下
  8.                 {
  9.                         while(HAL_GPIO_ReadPin(KEY1_PORT,KEY1_PIN) == 1);
  10.                         return KEY_ON;
  11.                 }
  12.         }
  13.         return KEY_OFF;
  14. }

  15. uint8_t KEY2_Scan(void)
  16. {
  17.         if(HAL_GPIO_ReadPin(KEY2_PORT,KEY2_PIN) == 0)
  18.         {
  19.                 HAL_Delay(15);
  20.                 if(HAL_GPIO_ReadPin(KEY2_PORT,KEY2_PIN) == 0)//确实被按下
  21.                 {
  22.                         while(HAL_GPIO_ReadPin(KEY2_PORT,KEY2_PIN) == 0);
  23.                         return KEY_ON;
  24.                 }
  25.         }
  26.         return KEY_OFF;
  27. }
复制代码
然后main函数如下:
  1. int main(void)
  2. {
  3.         /* 系统时钟初始化成480MHz */
  4.         SystemClock_Config();
  5.         /* 在这里添加你的代码^_^. */
  6.         LED_GPIO_Init();
  7.         KEY_GPIO_Init();
  8.         
  9.         LED1_ON;
  10.         while(1)
  11.         {
  12.                 if(KEY1_Scan() == KEY_ON)
  13.                 {LED1_TOGGLE;}
  14.                 if(KEY2_Scan() == KEY_ON)
  15.                 {LED2_TOGGLE;}
  16.         }                        
  17. }
复制代码
结果:下载程序并复位后,按任意按键时前几次会取反状态,然后再按任意按键都没有任何反应了,经过调试:发现会卡死在HAL_GetTick()这里
疑问:这是什么原因呢,我在F1的板子上这样用没有任何问题啊
QQ截图20210608082028.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-6 21:01 , Processed in 0.039209 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表