1,365
社区成员
发帖
与我相关
我的任务
分享
本篇文章介绍的用按键的方式点亮LED灯;开发板采用的是STM32F103C8T6;原理图如下:

通过原理图我们可以知道STM32F103C8T6有两个按键,两个LED灯;现在我们通过编程来控制LED的状态。我们按下KEY1,LED1亮,再次按下,翻转LED1的状态,灭掉,按下KEY2,LED2亮,再次按下,翻转LED2的状态,灭掉。
开发方式为HAL库开发;使用STM32CubeMx:

PB8,PB9默认设置高电平;生成代码进入Keil5;我们只需要创建一个函数:
#define KEY_ON 0
#define KEY_OFF 1
uint8_t key_scan(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) //按键轮询函数
{
if(HAL_GPIO_ReadPin(GPIOx, GPIO_Pin)==GPIO_PIN_RESET){ //调用HAL_GPIO_ReadPin 这个函数读取管脚状态并判断,如果按下返回KEY_ON
/*按键按下*/
while(HAL_GPIO_ReadPin(GPIOx, GPIO_Pin)==GPIO_PIN_RESET);
return KEY_ON;
}else{
/*按键松开*/
return KEY_OFF;
}
}
我们在main函数里的while(1)循环里面调用这个函数
while (1)
{
/* USER CODE END WHILE */
//HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET);
if(key_scan(GPIOA, GPIO_PIN_0)==KEY_ON) // //调用按键轮询函数,如果按键KEY1按下,翻转LED1的状态
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
if(key_scan(GPIOA, GPIO_PIN_1)==KEY_ON) //调用按键轮询函数,如果按键KE2按下,翻转LED2的状态
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9 );
}
最后我们就可以通过按键的方式控制LED的状态了