使用STM32CubeMX实现LED闪烁

简介: 使用STM32CubeMX实现LED闪烁

首先还是我们点灯的工程文件,本文我主要介绍GPIO相关库函数的使用。

打开GPIO相关文件

在Drivers/STM32F1xx_HAL_Driver文件夹下找到stm32f1xx_hal_gpio.c文件,双击即可打开。


我们需要看的部分

这个文件中,我们只需要看How to use this driver部分。这部分介绍了GPIO的HAL库使用。


一些不重要的部分我就不说了,会讲解的部分在下图标号了。其他部分都不太重要,想了解的可以用翻译软件翻译一下。


HAL_GPIO_ReadPin()

这个是引脚为输入才使用的函数,我们点亮LED为输出,所以用不了。就先不介绍了,之后在按键扫描的时候说。


HAL_GPIO_WritePin()

函数声明

void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)


GPIOx

这个是设置为哪个端口,现在我们是想让PB5输出,所以应该在函数中传入GPIOB。

可选参数如下

#define GPIOA               ((GPIO_TypeDef *)GPIOA_BASE)
#define GPIOB               ((GPIO_TypeDef *)GPIOB_BASE)
#define GPIOC               ((GPIO_TypeDef *)GPIOC_BASE)
#define GPIOD               ((GPIO_TypeDef *)GPIOD_BASE)
#define GPIOE               ((GPIO_TypeDef *)GPIOE_BASE)
#define GPIOF               ((GPIO_TypeDef *)GPIOF_BASE)
#define GPIOG               ((GPIO_TypeDef *)GPIOG_BASE)


GPIO_Pin

这个是设置让哪个引脚输出,现在我们是想让PB5输出,所以应该在函数中传入GPIO_PIN_5。

可选参数如下。

注意一下,GPIO_PIN_All就是同时控制PIN0到PIN15共16个引脚。

#define GPIO_PIN_0                 ((uint16_t)0x0001)  /* Pin 0 selected    */
#define GPIO_PIN_1                 ((uint16_t)0x0002)  /* Pin 1 selected    */
#define GPIO_PIN_2                 ((uint16_t)0x0004)  /* Pin 2 selected    */
#define GPIO_PIN_3                 ((uint16_t)0x0008)  /* Pin 3 selected    */
#define GPIO_PIN_4                 ((uint16_t)0x0010)  /* Pin 4 selected    */
#define GPIO_PIN_5                 ((uint16_t)0x0020)  /* Pin 5 selected    */
#define GPIO_PIN_6                 ((uint16_t)0x0040)  /* Pin 6 selected    */
#define GPIO_PIN_7                 ((uint16_t)0x0080)  /* Pin 7 selected    */
#define GPIO_PIN_8                 ((uint16_t)0x0100)  /* Pin 8 selected    */
#define GPIO_PIN_9                 ((uint16_t)0x0200)  /* Pin 9 selected    */
#define GPIO_PIN_10                ((uint16_t)0x0400)  /* Pin 10 selected   */
#define GPIO_PIN_11                ((uint16_t)0x0800)  /* Pin 11 selected   */
#define GPIO_PIN_12                ((uint16_t)0x1000)  /* Pin 12 selected   */
#define GPIO_PIN_13                ((uint16_t)0x2000)  /* Pin 13 selected   */
#define GPIO_PIN_14                ((uint16_t)0x4000)  /* Pin 14 selected   */
#define GPIO_PIN_15                ((uint16_t)0x8000)  /* Pin 15 selected   */
#define GPIO_PIN_All               ((uint16_t)0xFFFF)  /* All pins selected */


PinState

这个是设置指定引脚输出高电平还是低电平。

GPIO_PIN_RESET  //引脚输出低电平
GPIO_PIN_SET    //引脚输出高电平


HAL_GPIO_TogglePin()

让指定引脚电平反转,意思就是如果指定的引脚原来是高电平,使用这个函数之后就是低电平。如果原来是高电平,使用这个函数之后就是低电平。

函数声明

void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)


GPIOx和GPIO_Pin

同上

HAL_GPIO_LockPin()

这个是用于锁死指定引脚输出的。如果指定引脚为高电平,使用这个函数之后,引脚只能为高电平。就算你之后调用HAL_GPIO_TogglePin()或者HAL_GPIO_WritePin()更改他的输出,也做不到。

改引脚直至程序复位(按下复位键,或者拔下供电口重新插上),才会解锁。


函数声明

HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)


GPIOx和GPIO_Pin

同上

返回值

我们看这个函数的返回值,如果锁死成功返回HAL_OK。锁死失败返回HAL_ERROR

  if ((uint32_t)(GPIOx->LCKR & GPIO_LCKR_LCKK))
  {
    return HAL_OK;
  }
  else
  {
    return HAL_ERROR;
  }


延时函数

HAL自带延时函数HAL_Delay(x)。单位为ms

实验

现在我们知道了这几个函数了。HAL_GPIO_ReadPin()用不了,HAL_GPIO_LockPin()新手不建议使用。我们现在分别使用HAL_GPIO_TogglePin()和HAL_GPIO_WritePin()函数实现。


注意:这里的LED_R_GPIO_Port是GPIOB,LED_R_Pin是GPIO_PIN_5


详情请看:STM32CubeMX新建工程并点亮一个LED的 新建工程->User Label部分


使用HAL_GPIO_TogglePin()实现闪烁

我只提供while(1)中程序,其他地方不用改动。

  while (1)
  {
    /* USER CODE END WHILE */
    HAL_GPIO_TogglePin(LED_R_GPIO_Port, LED_R_Pin);
    HAL_Delay(1000);
    /* USER CODE BEGIN 3 */
  }

使用HAL_GPIO_WritePin()实现闪烁

  while (1)
  {
    /* USER CODE END WHILE */
    HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, GPIO_PIN_SET);
    HAL_Delay(1000);
    HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, GPIO_PIN_RESET);
    HAL_Delay(1000);
    /* USER CODE BEGIN 3 */
  }


目录
相关文章
|
芯片
最详细STM32,cubeMX 按键点亮 led
最详细STM32,cubeMX 按键点亮 led
205 0
|
传感器 芯片
最详细STM32,cubeMX 点亮 led
最详细STM32,cubeMX 点亮 led
183 0
|
6月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
481 2
|
2月前
stm32学习 3-2 LED流水灯
stm32学习 3-2 LED流水灯
77 4
|
2月前
stm32学习3-1 LED闪烁
stm32学习3-1 LED闪烁
41 4
|
5月前
STM32CubeMX FreeRTOS点亮LED
STM32CubeMX FreeRTOS点亮LED
91 10
|
5月前
STM32CubeMX 按键控制LED
STM32CubeMX 按键控制LED
79 0
|
5月前
STM32CubeMX 点亮LED
STM32CubeMX 点亮LED
69 0
No.6 STM32F429IGT6 LED按键检测 按键点灯 (STM32F429/F767/H743)
No.6 STM32F429IGT6 LED按键检测 按键点灯 (STM32F429/F767/H743)
No.5 STM32F429IGT6 标准库实战GPIO输出LED灯 点亮闪烁(STM32F429/F767/H743)
No.5 STM32F429IGT6 标准库实战GPIO输出LED灯 点亮闪烁(STM32F429/F767/H743)