HAL库是ST公司目前主力推的开发方式,全称就是Hardware Abstraction Layer(抽象印象层)。和标准库一样,都是为了节省程序开发的时期,而且HAL库尤其的有效,同样的功能,标准库可能要用几句话,HAL库只需用一句话就够了。并且HAL库也很好的解决了程序移植的问题,不同型号的stm32芯片它的标准库是不一样的,使用HAL库,只要使用的是相通的外设,程序基本可以完全复制粘贴。而且使用ST公司研发的STM32cubemx软件,可以通过图形化的配置功能,直接生成整个使用HAL库的工程文件,可以说是方便至极。
STM32关于GPIO操作的函数主要有两个,分别为HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)和HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)。
通用输出
通用输出一般配置为推挽输出,无上下拉,使用的函数是HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState),其中,形参GPIOx为GPIO的类型,如使用PB2引脚,则为GPIOB,GPIO_Pin为引脚号,如GPIO_PIN_2,由hal库函数的宏定义可知,GPIO_Pin为一个16位的二进制数,可用0x5050等直接操作引脚号,PinState为引脚状态,有两种,分别为GPIO_PIN_RESET和GPIO_PIN_SET,分别代表低电平与高电平。
![图片[1]-STM32HAL库GPIO通用输出与输入](https://www.r6b.cn/wp-content/uploads/2022/01/12t01.jpg)
通用输入
通用输入一般包括浮空输入,即无上下拉;上拉输入,在I/O引脚内存在一个上拉电阻,接VDD,将I/O口电位拉高,一般用于检测低电平;下拉输入, 在I/O引脚内存在一个下拉电阻,接GND,将I/O口电位拉低,一般用于检测高电平。使用的函数是HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin),注意,此函数的返回值类型为GPIO_PinState,即GPIO_PIN_RESET或GPIO_PIN_SET,又因为GPIO_PinState为枚举类型,所以GPIO_PIN_RESET为无符号整型0,GPIO_PIN_SET为无符号整型1。
![图片[2]-STM32HAL库GPIO通用输出与输入](https://www.r6b.cn/wp-content/uploads/2022/01/12t02.jpg)