自学内容网 自学内容网

【STM32CubeMX开发】-1-GPIO:点亮一个LED,以及按键KEY的捕获

案例背景:

我们将实现这样一个效果:按下按键KEY,点亮LED灯;松开按键KEY,熄灭LED灯。

  • KEY需配置为上拉输入;
  • LED需配置为推挽输出。

目录

1 STM32CubeMX中配置 – GPIO

1.1 PIN引脚配置

1.2 GPIO配置

1.2.1 GPIO – DI输入模式

1.2.1 GPIO – DO输出模式

2 生成代码

结尾


1 STM32CubeMX中配置 – GPIO

1.1 PIN引脚配置

依次选择Pinout&Configuration -- > Pinout view,配置如下:

GPIO设置:

  • PA1 Pin:配置为GPIO_Input,用于捕获KEY的动作;
  • PB4 Pin:配置为GPIO_Ouput,用于控制LED灯。

1.2 GPIO配置

1.2.1 GPIO – DI输入模式

依次选择Pinout&Configuration -- > System Core -- > GPIO,参数配置如下:

GPIO mode:Input mode为输入模式。

GPIO Pull-up/Pull-down

  • No Pull-up and no Pull-down表示引脚未连接到电源或地,引脚浮空输入时,读取结果是不确定的;
  • Pull-up表示引脚上拉输入模式(引脚电平拉高至VDD,引脚与VDD之间存在一个高电阻);
  • Pull-down表示引脚下拉输入模式(引脚电平拉低至GND,引脚与VDD之间存在一个高电阻)。

User Label:为该GPIO – Input定义一个标签,方便使用。

1.2.1 GPIO – DO输出模式

依次选择Pinout&Configuration -- > System Core -- > GPIO,参数配置如下:

GPIO output level表示MCU初始化GPIO(调用函数MX_GPIO_Init)后,该引脚输出的电平,Low低电平,High高电平;

GPIO mode:输出模式。

  • Output Push Pull表示推挽(Pull)输出模式(输出较大电流),推挽输出,既提高电路的负载能力,又提高开关速度;
  • Output Open Drain表示开漏(Drain)输出模式(一般外接上拉电阻,如果外部不接上拉电阻只能输出低电平。驱动电流大小,取决于上拉电阻的大小。),可用于不同电压的系统之间的通信。

GPIO Pull-up/Pull-down

  • No Pull-up and no Pull-down表示引脚未连接到电源或地;
  • Pull-up表示引脚上拉输出模式(引脚电平拉高至VDD,引脚与VDD之间存在一个高电阻);
  • Pull-down表示引脚下拉输出模式(引脚电平拉低至GND,引脚与VDD之间存在一个高电阻)。

Maximum output speed:IO口速率(I/O口驱动电路的响应速度),当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:LowMediumHigh,通过选择速度来选择不同的驱动电路,达到最佳的噪声控制和降低功耗的目的;

User Label:为该GPIO – Output定义一个标签,方便使用。

2 生成代码

单击GENERATE CODE,生成代码:通过HAL_GPIO_ReadPin捕获KEY的状态;通过HAL_GPIO_WritePin控制LED。

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
GPIO_PinState Pinstatus;

Pinstatus = HAL_GPIO_ReadPin(GPIOA,KEY_DI_Pin);

if(Pinstatus == GPIO_PIN_RESET)      // ON KEY
{
   HAL_GPIO_WritePin(GPIOB,LED_DO_Pin,GPIO_PIN_RESET);   // ON LED
}
else if(Pinstatus == GPIO_PIN_SET)   // OFF KEY
{
   HAL_GPIO_WritePin(GPIOB,LED_DO_Pin,GPIO_PIN_SET);     // OFF LED
}
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}



/** Configure pins as
        * Analog
        * Input
        * Output
        * EVENT_OUT
        * EXTI
        * Free pins are configured automatically as Analog (this feature is enabled through
        * the Code Generation settings)
*/
void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOF_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(LED_DO_GPIO_Port, LED_DO_Pin, GPIO_PIN_SET);

  /*Configure GPIO pin : PC13 */
  GPIO_InitStruct.Pin = GPIO_PIN_13;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  /*Configure GPIO pins : PA0 PA2 PA3 PA4
                           PA5 PA6 PA7 PA8
                           PA9 PA10 PA11 PA12
                           PA15 */
  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4
                          |GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8
                          |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12
                          |GPIO_PIN_15;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = KEY_DI_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(KEY_DI_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pins : PB0 PB1 PB2 PB10
                           PB11 PB12 PB13 PB14
                           PB15 PB3 PB5 PB6
                           PB7 PB8 PB9 */
  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_10
                          |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14
                          |GPIO_PIN_15|GPIO_PIN_3|GPIO_PIN_5|GPIO_PIN_6
                          |GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  /*Configure GPIO pins : PF6 PF7 */
  GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = LED_DO_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(LED_DO_GPIO_Port, &GPIO_InitStruct);

}

结尾

获取更多“汽车电子资讯”和“工具链使用”,

请关注CSDN博客“汽车电子助手”,做您的好助手。


原文地址:https://blog.csdn.net/qfmzhu/article/details/142865889

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!