硬汉嵌入式论坛

 找回密码
 立即注册
查看: 311|回复: 3
收起左侧

[Keil Studio] 关于STM32按钮检测的很奇怪的问题

[复制链接]

4

主题

10

回帖

22

积分

新手上路

积分
22
发表于 2025-6-12 11:26:25 | 显示全部楼层 |阅读模式
采用keli进行开发,MCU是STM32F103C8T6 ,按钮配置了10K上拉电阻 ,100nf消抖电容,按钮接到了STM32的PB12,PB12配置为GPIO_MODE_INPUT     GPIO_NOPULL   ,在代码中如果写
while (1)
{
if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12) == GPIO_PIN_RESET) {
           handleButton1();
        }
}

即便按钮松开后,因为这段代码是在 while循环中,会导致程序不停的重复执行handleButton1(),也就是说马上松开按钮,(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12) == GPIO_PIN_RESET)检测的状态始终保持为真,但是如果这样写

while (1)
{

if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12) == GPIO_PIN_RESET)
    {
      // LED
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
    }
    else
    {
      // LED
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
    }
}


通过按钮则能正常控制灯的状态,按下按钮灯亮,松开按钮灯灭,也就是HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12) == GPIO_PIN_RESET正确检测到了按钮的释放,不像上面那个if,按钮松开后状态仍为真,不知道是什么原因导致的,请大家指点指点


按钮接线图

按钮接线图
回复

使用道具 举报

4

主题

192

回帖

204

积分

高级会员

积分
204
发表于 2025-6-12 12:03:41 | 显示全部楼层
万用表测下电压就知道了。在原理图和代码没错的情况下,可能3号角 接到地了,也可能电容击穿了
回复

使用道具 举报

4

主题

10

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2025-6-12 12:05:55 | 显示全部楼层
fyyxxm 发表于 2025-6-12 12:03
万用表测下电压就知道了。在原理图和代码没错的情况下,可能3号角 接到地了,也可能电容击穿了

万用表测过了,引脚电压是正确的,按钮未按下3.3V  按钮按下0V
回复

使用道具 举报

4

主题

10

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2025-6-12 15:11:42 | 显示全部楼层
fyyxxm 发表于 2025-6-12 12:03
万用表测下电压就知道了。在原理图和代码没错的情况下,可能3号角 接到地了,也可能电容击穿了

测量电压是正常的,按钮按下0V  按钮释放3.3V
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 06:13 , Processed in 0.043518 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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