目录
前言
上一章节我讲述了如何使用STM32CubeMX来建立工程,这节就在上一章的基础上来继续深入了解STM32CubeMX和HAL库如何使用,我们就默认基础设置已经配置完毕(时钟与工程管理)
1、图像化配置GPIO功能
在STM32CubeMX的右侧可以在想要配置的引脚处左键来配置它对应的功能,下图就是PA8引脚配置GPIO输出与输入的方法,我们先设置成GPIO_Output输出模式
2、GPIO输出的模式配置
当引脚被设置成输出模式后,我们点击左侧的GPIO同时点击我们需要更改模式的引脚就可以配置它对应的GPIO模式,输出模式可以改变引脚的高低电平,所以我们需要驱动这个引脚时就需要设置成输出模式,例如点亮一个LED灯
GPIO output level 引脚高低电平设置 高/低 (作用为初次上电后更改成需要的电平)
GPIO mode GPIO模式 推挽输出/开漏输出
推挽输出:作为输出引脚可以提供高低电平两种,速度快,适用于高速输出,驱动能力强,输出电流可以流入与流出,容易控制与使用,通常用来驱动电机或者LED等
开漏输出:作为输出引脚只能提供低电平输出一种,速度慢,只适用于低速输出,驱动能力较弱只能通过上拉电阻来输出高电平,输出电流只能流出不能流入,通常用来驱动I2C或SPI总线
GPIO Pull-up/Pull-dowm 上拉下拉电阻 上拉电阻/下拉电阻/无上拉或下拉
上拉模式:内部连接上拉电阻,悬空时默认高电平
下拉模式:内部连接下拉电阻,悬空时默认低电平
悬空模式:不连接上拉或下拉电阻,悬空时电平不稳定
Maxinum output speed 引脚速度设置 低速/中速/高速
User Label 用户标签 给引脚设置名称 如LED0
3、GPIO输入的模式配置
当我们将引脚配置成输入模式时,它只能配置GPIO上下拉或者浮空输入,GPIO mode已经被固定为输入模式无法更改,输入模式没有更改电平的能力,它可以读取引脚的高低电平,例如我们想要判断按键是否按下就需要设置成输入模式来读取按键的高低电平
4、GPIO的HAL库驱动程序
GPIO引脚的操作主要包括初始化、读取引脚高低电平、设置引脚输出,使用CubeMX生成代码时,GPIO的引脚初始化代码就会自动生成,用户常用的GPIO操作则是调用HAL库代码来完成自己需要的操作
GPIO HAL库函数
函数名 | 功能描述 |
HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) | GPIO引脚初始化 |
HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin) | GPIO反初始化,恢复到复位后的状态 |
HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) | 读取引脚的电平状态、函数返回值为0或1 |
HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); | 更改引脚的电平,1为高电平0为低电平 |
HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); | 翻转引脚的电平状态 ,使高低电平转换 |
HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); | 锁住引脚电平,比如说一个管脚的当前状态是1,当这个管脚电平变化时保持锁定时的值。 |
以上驱动程序的头文件在stm32f1xx_hal_gpio.h 函数的对应参数和原型定义都可以在这里找到
PA8引脚这个PA8是什么意思 P指的是Pin A指的是基地址A 8就是引脚号
GPIO_TypeDef* GPIOx 这个参数的意思就是 GPIO的基地址 设置PA8就可以写成GPIOA
uint16_t GPIO_Pin 这个参数的意思就是GPIO的引脚号 设置PA8就可以写成GPIO_PIN_8
GPIO_PinState PinState 而这个参数只有HAL_GPIO_WritePin()这个函数用上了,意思是GPIO高低电平 可以写成GPIO_PIN_RESET代表低电平GPIO_PIN_SET代表高电平
举几个常用函数例子 以PA8引脚为例
HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8,GPIO_PIN_RESET);
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_8);
HAL_GPIO_LockPin(GPIOA, GPIO_PIN_8);