研究生
最后登录1970-1-1
在线时间 小时
注册时间2021-1-8
|
本帖最后由 何小峰 于 2021-6-8 08:35 编辑
我用的是STM32H743的一个开发板,没有带硬件消抖,所以想用软件延时的方式消抖,电路原理图在最下方:
初始化的代码如下:
- /* 按键引脚初始化 */
- void KEY_GPIO_Init(void)
- {
- GPIO_InitTypeDef GPIO_Init;
-
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOG_CLK_ENABLE();
-
- GPIO_Init.Mode = GPIO_MODE_INPUT;
- GPIO_Init.Pin = KEY1_PIN;
- GPIO_Init.Pull = GPIO_PULLDOWN;
-
- HAL_GPIO_Init(KEY1_PORT,&GPIO_Init);
-
- GPIO_Init.Pin = KEY2_PIN;
- GPIO_Init.Pull = GPIO_PULLUP;
-
- HAL_GPIO_Init(KEY2_PORT,&GPIO_Init);
- }
复制代码 检测函数如下:
- /* 两个按键扫描函数,返回KEY_ON说明有键确实被按下 */
- uint8_t KEY1_Scan(void)
- {
- if(HAL_GPIO_ReadPin(KEY1_PORT,KEY1_PIN) == 1)
- {
- HAL_Delay(15);
- if(HAL_GPIO_ReadPin(KEY1_PORT,KEY1_PIN) == 1)//确实被按下
- {
- while(HAL_GPIO_ReadPin(KEY1_PORT,KEY1_PIN) == 1);
- return KEY_ON;
- }
- }
- return KEY_OFF;
- }
- uint8_t KEY2_Scan(void)
- {
- if(HAL_GPIO_ReadPin(KEY2_PORT,KEY2_PIN) == 0)
- {
- HAL_Delay(15);
- if(HAL_GPIO_ReadPin(KEY2_PORT,KEY2_PIN) == 0)//确实被按下
- {
- while(HAL_GPIO_ReadPin(KEY2_PORT,KEY2_PIN) == 0);
- return KEY_ON;
- }
- }
- return KEY_OFF;
- }
复制代码 然后main函数如下:
- int main(void)
- {
- /* 系统时钟初始化成480MHz */
- SystemClock_Config();
- /* 在这里添加你的代码^_^. */
- LED_GPIO_Init();
- KEY_GPIO_Init();
-
- LED1_ON;
- while(1)
- {
- if(KEY1_Scan() == KEY_ON)
- {LED1_TOGGLE;}
- if(KEY2_Scan() == KEY_ON)
- {LED2_TOGGLE;}
- }
- }
复制代码 结果:下载程序并复位后,按任意按键时前几次会取反状态,然后再按任意按键都没有任何反应了,经过调试:发现会卡死在HAL_GetTick()这里
疑问:这是什么原因呢,我在F1的板子上这样用没有任何问题啊
|
-
|