使用STM32CubeMX实现LED闪烁

需提前学习:STM32CubeMX新建工程并点亮一个LED

目录

打开GPIO相关文件

我们需要看的部分

HAL_GPIO_ReadPin()

HAL_GPIO_WritePin()

函数声明

GPIOx 

GPIO_Pin

PinState

HAL_GPIO_TogglePin()

函数声明

GPIOx和GPIO_Pin

HAL_GPIO_LockPin()

函数声明

GPIOx和GPIO_Pin

返回值

延时函数

实验

使用HAL_GPIO_TogglePin()实现闪烁

使用HAL_GPIO_WritePin()实现闪烁


首先还是我们点灯的工程文件,本文我主要介绍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 */
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风正豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值