用的HAL_GPIO_WritenPin和while循环怎么实现点一下灯亮,再点一下灯灭
时间: 2024-03-11 22:49:57 浏览: 19
您可以使用以下代码来实现您的需求:
```
#include "stm32f4xx_hal.h"
int main(void)
{
// 初始化GPIO
HAL_Init();
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// 初始化变量
int flag = 0;
while (1)
{
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) == GPIO_PIN_RESET)
{
if (flag == 0)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
flag = 1;
}
else
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
flag = 0;
}
while (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) == GPIO_PIN_RESET)
{
// 等待按键松开
}
}
}
}
```
这个代码使用了一个变量flag来记录当前灯的状态,初始值为0,表示灯是灭的。当按下按键时,程序会判断flag的值,如果为0,则将灯亮起来,并将flag的值改为1;如果为1,则将灯熄灭,并将flag的值改为0。在每次按下按键后,程序会等待按键松开,然后再进入下一次循环。这样就可以实现您所需的功能了。