转载自:http://www.51hei.com/bbs/dpj-113225-1.html 一、STM32L0xx_HAL_GPIO (一)、引脚初始化函数 void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); 1、功能 ①.对STM32中的某端口上的引脚进行初始化(设置引脚输入输出的连接关系)。 ②.函数名(HAL_GPIO_Init ):HAL——硬件抽象层;GPIO——通用I/O口;Init——初始化。 ③.参数1(GPIO_TypeDef *GPIOx ):GPIO_TypeDef——包含I/O口所有寄存器的结构体名;*GPIOx——指向x I/O口的地址。 ④.参数2(GPIO_InitTypeDef *GPIO_Init) GPIO_InitTypeDef——包含I/O口所有参数的结构体名;*GPIO_Init——指向I/O口所有参数的地址。 2、GPIO_TypeDef结构体成员 typedef struct { __IO uint32_t MODER; //模式寄存器 __IO uint32_t OTYPER; //输出类型寄存器 __IO uint32_t OSPEEDR; //输出速度寄存器 __IO uint32_t PUPDR; //上拉/下拉寄存器 __IO uint32_t IDR; //输入数据寄存器 __IO uint32_t ODR; //输出数据寄存器 __IO uint32_t BSRR; //置位/清除寄存器 __IO uint32_t LCKR; //配置锁定寄存器 __IO uint32_t AFR[2]; //端口复用功能寄存器 __IO uint32_t BRR; //复位寄存器 }GPIO_TypeDef; 3、*GPIOx指向GPIO口的地址参数为: #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) #define GPIOC ((GPIO_TypeDef *) GPIOC_BASE) #define GPIOD ((GPIO_TypeDef *) GPIOD_BASE) 4、GPIO_InitTypeDef结构体成员 typedef struct { uint32_t Pin; //①选定将被配置的GPIO引脚 uint32_t Mode; //②指定选定的引脚运行模式 uint32_t Pull; //③指定选定的引脚上拉或下拉 uint32_t Speed; //④指定选定的引脚速度 uint32_t Alternate; //⑤复用功能连通选定的引脚 }GPIO_InitTypeDef; ①参数可以为: #define GPIO_PIN_0 //Pin 0 selected #define GPIO_PIN_1 //Pin 1 selected …… #define GPIO_PIN_15 //Pin 15 selected #define GPIO_PIN_All //All pins selected ②参数可以为 #define GPIO_MODE_INPUT //浮空输入模式 #define GPIO_MODE_OUTPUT_PP //通用推挽输出模式 #define GPIO_MODE_OUTPUT_OD //通用开漏输出模式 #define GPIO_MODE_AF_PP //复用功能推挽模式 #define GPIO_MODE_AF_OD //复用功能开漏模式 ③参数可为: #define GPIO_NOPULL //无上位或下拉 #define GPIO_PULLUP //上拉 #define GPIO_PULLDOWN //下拉 ④参数可为: #define GPIO_SPEED_FREQ_LOW //最大速度0.4MHz #define GPIO_SPEED_FREQ_MEDIUM //最大速度2MHz #define GPIO_SPEED_FREQ_HIGH //最大速度10MHz #define GPIO_SPEED_FREQ_VERY_HIGH //最大速度35MHz ⑤参数可为: #define GPIO_AF0_EVENTOUT // EVENTOUT 复用功能映射 #define GPIO_AF0_TIM21 // TIM21 复用功能映射 #define GPIO_AF0_SPI1 // SPI1 复用功能映射 #define GPIO_AF0_USART2 // USART2 复用功能映射 #define GPIO_AF0_MCO // MCO 复用功能映射 #define GPIO_AF0_SWDIO // SWDIO 复用功能映射 #define GPIO_AF0_SWCLK // SWCLK 复用功能映射 5、*GPIO_Init指向GPIO参数的地址 6、用法举例 要求:将STM32引脚A0、A2端口设置为推挽输出模式、输出速度 10MHz。 HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; //定义一个结构体变量 /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOA_CLK_ENABLE(); //打开A端口时钟 /*Configure GPIO pin : PA0 PA2*/ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_2; //选择引脚 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //引脚工作模式 GPIO_InitStruct.Pull = GPIO_NOPULL; //引脚上下拉电阻 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; //引脚输出速度 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); //调用引脚初始化程序 } 7、注意事项 ①.输出频率高,噪声大,功耗高,电磁干扰强;输出频率低,噪声小,功耗低,电磁干扰弱;提高系统EMI(电磁干扰)性能; ②.上拉下拉选择一定要根据外围设备来选择。 6、练习题 要求:将STM32引脚B5、B8、C1端口设置为开漏输出模式、输出速度2MHz,引脚B6端口设置为浮空输入模式,引脚B7端口设置为推挽上拉输出模式、输出速度35MHz。 (二)、去掉初始化通用I/O外围寄存器的值,重置为默认值函数, void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin) 1、功能 ①.对STM32中的某端口上的引脚重置为默认值(断开引脚输入输出的连接关系)。 ②.函数名(HAL_GPIO_DeInit ):HAL——硬件抽象层;GPIO——通用I/O口;DeInit——删除初始化。 ③.参数1(GPIO_TypeDef *GPIOx ):GPIO_TypeDef——包含I/O口所有寄存器的结构体名;*GPIOx——指向x I/O口的地址。 ④.参数2(uint32_t GPIO_Pin)GPIO_Pin——选定将被配置的GPIO引脚。 2、用法举例 要求:将STM32引脚A0、A2设置为上电初始状态 static void MX_GPIO_DeInit(void) { HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0|GPIO_PIN_2); } 3、注意事项 ①.当引脚寄存器配置被锁定后,任何修改寄存器值的操作都无效,只有重新上电后才能重新操作。 (三)、设置或者清除选定的端口引脚数据位,void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); 1、功能 ①.在选择的端口引脚上输出高低电平。 ②.函数名(HAL_GPIO_WritePin):HAL——硬件抽象层; GPIO——通用I/O口;WritePin——写引脚。 ③.参数1(GPIO_TypeDef *GPIOx ):GPIO_TypeDef——包含I/O口所有寄存器的结构体名;*GPIOx——指向x I/O口的地址。 ④.参数2(uint32_t GPIO_Pin)GPIO_Pin——选定将被配置的GPIO引脚。 ⑤.参数3(GPIO_PinState PinState)GPIO_PinState——通用I/O引脚状态重定义结构体枚举名;PinState——引脚状态。 2、用法举例 要求:将STM32端口A0引脚输出低电平、A2引脚输出高电平。 static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; //定义一个结构体变量 /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOA_CLK_ENABLE(); //打开A端口时钟 /*Configure GPIO pin : PA0 PA2*/ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_2; //选择引脚 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //引脚工作模式 GPIO_InitStruct.Pull = GPIO_NOPULL; //引脚上下拉电阻 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; //引脚输出速度 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); //调用引脚初始化程序 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET); //设置A2引脚输出高电平 } (三)、读取选定的端口引脚数据位,GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) 1、功能 ①.读取选择的端口引脚上电平状态。 ②.函数名(HAL_GPIO_ReadPin):HAL——硬件抽象层;GPIO——通用I/O口;ReadPin——读引脚。 ③.参数1(GPIO_TypeDef *GPIOx ):GPIO_TypeDef——包含I/O口所有寄存器的结构体名;*GPIOx——指向x I/O口的地址。 ④.参数2(uint32_t GPIO_Pin)GPIO_Pin——选定读取的GPIO引脚。
|