GPIO的HAL驱动程序 初始化函数HAL_GPIO_Init()

       GPIO引脚的操作主要包括初始化、读取引脚输入和设置引脚输出,相关的HAL驱动程序定义在文件stm32f4xx_hal_gpio.h中,主要的操作函数如表6-1所示,表中只列出了函数名,省略了函数参数。
 

      使用CubeMX生成代码时,GPIO引脚初始化的代码会自动生成,用户常用的GPIO操作函数是进行引脚状态读写的函数。


1.初始化函数HAL_GPIO_Init()


函数HAL_GPIO_Init()用于对一个端口的一个或多个相同功能的引脚进行初始化设置,包括输入/输出模式、上拉或下拉等。其原型定义如下:

void HAL_GPIO_Init(GPIO_TypeDef *GPIOx,GPIO_InitTypeDef *GPIO_Init);


其中,第1个参数GPIOx是GPIO_TypeDef类型的结构体指针,它定义了端口的各个寄存器的偏移地址,实际调用函数HAL_GPIO_Init()时使用端口的基地址作为参数GPIOx的值,在文件stm32f407xx.h中定义了各个端口的基地址,如:

#define GPIOA ((GPIO_TypeDef*) GPIOA_BASE)
#define GPIOB ((GPIO_TypeDef*) GPIOB_BASE)
#define GPIOC ((GPIO_TypeDef*) GPIOC_BASE)
#define GPIOD ((GPIO_TypeDef*) GPIOD_BASE)

第2个参数GPIO_Init是一个GPIO_InitTypeDef类型的结构体指针,它定义了GPIO引脚的属性,这个结构体的定义如下:

typedef struct{
uint32_t Pin;      //要配置的引脚,可以是多个引脚
uint32_t Mode;     //引脚功能模式
uint32_t Pull;     //上拉或下拉
uint32_t Speed;    //引脚最高输出频率
uint32_t Alternate;//复用功能选择
}GPIO_InitTypeDef;

这个结构体的各个成员变量的意义及取值如下。
● Pin是需要配置的GPIO引脚,在文件stm32f4xx_hal_gpio.h中定义了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)0x00010)/*Pin 4 selected */
#define GPIO_PIN_5 ((uint16_t)0x00020)/*Pin 5 selected */
#define GPIO_PIN_6 ((uint16_t)0x00040)/*Pin 6 selected */
#define GPIO_PIN_7 ((uint16_t)0x00080)/*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_Al1 ((uint16_t)0xFFFF) /*ALL pins selected*/

● Mode是引脚功能模式设置,其可用常量定义如下:

#define GPIO_MODE_INPUT       0x00000000U //输入浮空模式
#define GPIO_MODE_OUTPUT_PP   0x00000001U //推挽输出模式
#define GPIO_MODE_OUTPUT_OD   0x00000011U //开漏输出模式
#define GPIO_MODE_AF_PP       0x00000002U //复用功能推挽模式
#define GPIO_MODE_AF_OD       0x00000012U //复用功能开漏模式
#define GPIO_MODE_ANALOG      0x00000003U //模拟信号模式
#define GPIO_MODE_IT_RISING         0x10110000U //外部中断,上跳沿触发
#define GPIO_MODE_IT_FALLING        0x10210000U //外部中断,下跳沿触发
#define GPIO_MODE_IT_RISING_FALLING 0x10310000U //上、下跳沿触发

● Pull定义是否使用内部上拉或下拉电阻,其可用常量定义如下:

#define GPIO_NOPULL  0x00000000U //无上拉或下拉
#define GPIO_PULLUP  0x00000001U //上拉
#define GPIOPULLDOWN 0x00000002U //下拉

● Speed定义输出模式引脚的最高输出频率,其可用常量定义如下:

#define GPIO_SPEED_FREQ_LOW       0x00000000U //2MHz
#define GPIO_SPEED_FREQ_MEDIUM    0x00000001U //12.5-50MHz
#define GPIO_SPEED_FREQ_HIGH      0x00000002U //25-100MHz
#define GPIO_SPEED_FREQ_VERY_HIGH 0x00000003U //50-200MHz

● Alternate定义引脚的复用功能,在文件stm32f4xxhal_gpioex.h中定义了这个参数的可用宏定义,这些复用功能的宏定义与具体的MCU型号有关,下面是其中的部分定义示例:

#define GPIO_AF1_TIM1   ((uint8_t)0x01)//TIM1复用功能映射
#define GPIO_AF1_TIM2   ((uint8_t)0x01)//TIM2复用功能映射
#define GPIO_AF5_SPI1   ((uint8_t)0x05)//SPI1复用功能映射
#define GPIO_AF5_SPI2   ((uint8_t)0x05)//SPI2/I2S2复用功能映射
#define GPIO_AF7_USART1 ((uint8_t)0x07)//USART1复用功能映射
#define GPIO_AF7_USART2 ((uint8_t)0x07)//USART2复用功能映射
#define GPIO_AF7_USART3 ((uint8_t)0x07)//USART3复用功能映射

参考文献:

STM32Cube高效开发教程(王维波,鄢志丹,王钊)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值