【STM32+HAL库】---- GPIO按键控制LED

硬件开发板:STM32G0B1RET6
软件平台:cubemax+keil+VScode

1 新建cubemax工程

1.1 配置系统时钟RCC

时钟树配置如下,16M的HSI经PLL锁相环倍频分频处理后得到PLLCLK,以提供64M的SYSCLK,再得到64M得HCLK
image

1.2 配置相关GPIO引脚

image
LED选择PA5引脚,GPIO_Output模式
image
image

按键开关由PC13引脚控制
image
选择PC13引脚,GPIO_Input模式
image
标签命名为BUTTON
image

1.3 导出工程

...略

2 代码

int main(void)
{
  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();

  while (1)
  {
    if (HAL_GPIO_ReadPin(BUTTON_GPIO_Port,BUTTON_Pin)==0)    /*判断按键是否按下*/
    {
      HAL_Delay(50);  /*延时*/
      if (HAL_GPIO_ReadPin(BUTTON_GPIO_Port,BUTTON_Pin)==0)   /*再次判断*/
      {
        HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
        while (HAL_GPIO_ReadPin(BUTTON_GPIO_Port,BUTTON_Pin)==0);  /*等待按键松开,才能跳出while*/
      }
    }
  }
}
缺点:按键松开之前程序一直卡在while循环里,按键松开之后才能处理其他的程序,降低了CPU的效率
posted @ 2024-01-10 22:43  晚风也温柔  阅读(60)  评论(0编辑  收藏  举报