|
采用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,按钮松开后状态仍为真,不知道是什么原因导致的,请大家指点指点
|
-
按钮接线图
|