请教一个stm32程序:我写了一个按键控制LED灯翻转,调试成功的程序如下:

2024-12-02 21:39:27
推荐回答(3个)
回答1:

有问题的那个程序
u8 ReadValue=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10);
只在上面那条指令采集了一次按键数据。
等到执行到 while(!ReadValue);//等待按键被放开 这条指令时
数据仍然是上次采集到的那个值代表按键按下,(!ReadValue)这个值永远成立,所以无法代表按键断开。所以程序一直卡死在这条指令上。如果要通过就必须在判据里重新读取按键状态,像正确的程序那样用这样的指令
while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10));//等待按键被放开

另外因为你只读取了一次按键状态,所以下面那么多一堆软件消除抖动的程序白写了。

综上,正确的程序在每个判断的时刻都要重新读取下按键状态。

回答2:

函数调用错了   这个引脚是输出  

试试这个

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

回答3:

学习中