STM32F4 HAL库开发 -- GPIO

Posted 聚优致成

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32F4 HAL库开发 -- GPIO相关的知识,希望对你有一定的参考价值。

这种外设都之前都讲过了,专栏:stm32库开发实战指南
但是使用STM32CubeMX该配置配置呢??接下来看一下。

一、GPIO简介

STM32F4 的 IO 可以由软件配置成如下 8 种模式中的任何一种:
1、 输入浮空
2、 输入上拉
3、 输入下拉
4、 模拟输入
5、 开漏输出
6、 推挽输出
7、 推挽式复用功能
8、 开漏式复用功能

详细参看:STM32开发 – GPIO详解

二、 相关函数

1、HAL_GPIO_Init 函数

void HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init)

第一个参数:用来指定需要初始化的GPIO对应的GPIO组,取值范围是GPIOA ~ GPIOK。
第二个参数:为初始化参数结构体指针,结构体类型为 GPIO_InitTypeDef 。

/** 
  * @brief GPIO Init structure definition  
  */ 
typedef struct

  uint32_t Pin;       /*!< Specifies the GPIO pins to be configured.
                           This parameter can be any value of @ref GPIO_pins_define */

  uint32_t Mode;      /*!< Specifies the operating mode for the selected pins.
                           This parameter can be a value of @ref GPIO_mode_define */

  uint32_t Pull;      /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.
                           This parameter can be a value of @ref GPIO_pull_define */

  uint32_t Speed;     /*!< Specifies the speed for the selected pins.
                           This parameter can be a value of @ref GPIO_speed_define */

  uint32_t Alternate;  /*!< Peripheral to be connected to the selected pins. 
                            This parameter can be a value of @ref GPIO_Alternate_function_selection */
GPIO_InitTypeDef;

初始化 GPIO 的常用格式是:

GPIO_InitTypeDef GPIO_Initure;
GPIO_Initure.Pin=GPIO_PIN_0; //PB0
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
HAL_GPIO_Init(GPIOB,&GPIO_Initure);

上面代码的意思是设置 PB0 端口为推挽输出模式, 输出速度为高速,上拉。

2、HAL_GPIO_TogglePin函数

void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

该函数是通过操作 ODR 寄存器,达到取反 IO 口输出电平的功能。

3、HAL_GPIO_WritePin 函数

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

该函数用来设置一组IO口中的一个或者多个IO口的电平状态。

示例:
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET); //PB5 输出高
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5, GPIO_PIN_RESET); //PB5 输出低

4、HAL_GPIO_ReadPin 函数

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
返回值:IO口电平状态

该函数用来读取一组IO下一个或者多个IO口电平状态。

示例:
HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_5);//读取 PF5 的输入电平

三、STM32CubeMX 配置 IO 口输入

1、配置

打开STM32CubeMX工具,在引脚图中选择要配置的IO口。
这里我们选择PF12。

进入 Configuration->GPIO,在弹出的界面配置 IO 口的详细参数。

下面我们来依次解释这些配置项的含义:
1)GPIO output level:
用来设置IO口初始化电平状态为High(高电平)还是Low(低电平)。
2)GPIO mode:
用来设置输出模式为 Output Push Pull(推挽)还是Output Open Drain(开漏)。
3)GPIO Pull-up/Pull-down:
用来设置IO口是上拉/下拉/没有上下拉。
4)Maximum output speed:
用来设置输出速度为高速(High)/快速(Fast)/中速(Medium)/低速(Low)。
5)User Lable:
用来设置初始化的IO口Pin值为我们自定义的宏。

2、生成源码

void MX_GPIO_Init(void)


  GPIO_InitTypeDef GPIO_InitStruct = 0;
  
  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOF_CLK_ENABLE();
  
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOF, ELECTRONIC_LOCK_LOCK_Pin|ELECTRONIC_LOCK_UNLOCK_Pin, GPIO_PIN_RESET);
  
  /*Configure GPIO pins : PFPin PFPin */
  GPIO_InitStruct.Pin = ELECTRONIC_LOCK_LOCK_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

以上是关于STM32F4 HAL库开发 -- GPIO的主要内容,如果未能解决你的问题,请参考以下文章

STM32F4 HAL库开发 -- GPIO

[STM32F4裸机]STM32F4HAL库开发

STM32F4 HAL库开发 -- 再识

STM32F4 HAL库开发 -- DMA

STM32F4 HAL库开发 -- 复用功能外设

STM32F4 HAL库开发 -- 复用功能外设