HAL库常用函数使用介绍--HAL_GPIO

HAL_GPIO_Init

//初始化我们需要用到的引脚的工作模式,包括具体引脚的工作速度、是否复用模式、上下拉等等参数。

void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)

HAL_GPIO_DeInit

//将初始化之后的引脚恢复成默认的状态–各个寄存器复位时的值
void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
例:HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);

HAL_GPIO_ReadPin

//读取我们想要知道的引脚的电平状态、函数返回值为0或1。
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
例:pin_State = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_9);

HAL_GPIO_WritePin

//给某个引脚写0或1,但是不要理解成,写1就是使能之类的意思,有些寄存器写1是擦除的意思
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
例:HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9,GPIO_PIN_RESET)

HAL_GPIO_TogglePin

//翻转某个引脚的电平状态
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
例:HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_9);

HAL_GPIO_LockPin

//如果一个管脚的当前状态是1,读管脚值使用锁定,当这个管脚电平变化时保持锁定时的值,直到重置才改变
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
例:

HAL_StatusTypeDef hal_State;
hal_State = HAL_GPIO_LockPin(GPIOF, GPIO_PIN_9);

HAL_GPIO_EXTI_IRQHandler

//这个函数是外部中断服务函数,用来响应外部中断的触发,函数实体里面有两个功能,1是清除中断标记位,2是调用下面要介绍的回调函数。实际调用的是下边的中断回调函数
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
例:HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);

HAL_GPIO_EXTI_Callback

//中断回调函数,可以理解为中断函数具体要响应的动作。
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
例:HAL_GPIO_EXTI_Callback(GPIO_Pin);

### HAL_GPIO函数使用教程与功能详解 #### 初始化GPIO引脚 `HAL_GPIO_Init` 函数负责根据 `GPIO_InitTypeDef` 结构体中指定的参数初始化 GPIO 外设。此结构体包含了关于引脚号、模式、速度以及上下拉电阻配置的信息[^1]。 ```c GPIO_InitTypeDef GPIO_InitStruct = {0}; /* 配置PA0为推挽输出 */ GPIO_InitStruct.Pin = GPIO_PIN_0; 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); ``` #### 反初始化GPIO引脚 通过调用 `HAL_GPIO_DeInit` 将特定 GPIO 的寄存器恢复至默认复位状态,这通常是在重新配置前清理旧设置时使用[^2]。 ```c HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0); ``` #### 读取引脚电平 利用 `HAL_GPIO_ReadPin` 来获取某个具体引脚当前的状态(高/低),这对于检测按钮按下或是传感器信号非常有用[^3]。 ```c uint8_t pinState = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); if (pinState != GPIO_PIN_RESET){ /* 执行当引脚处于高电平时的操作 */ } ``` #### 设置引脚电平 要控制 LED 或者其他执行元件,则可以采用 `HAL_GPIO_WritePin` 方法向目标引脚发送逻辑‘1’或‘0’[^4]。 ```c HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 设定为高电平 // 或者 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // 设定为低电平 ``` #### 切换引脚电平 对于需要周期性反转电平的应用场景比如闪烁LED灯而言,`HAL_GPIO_TogglePin` 提供了一种便捷的方式来进行快速切换操作[^5]。 ```c while(1){ HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0); HAL_Delay(500); // 延迟一段时间再继续循环 } ``` #### 锁定引脚防止意外修改 一旦设置了 `HAL_GPIO_LockPin` 后,在下次硬件重启之前都无法对该引脚做出任何改动,从而提高了系统的安全性[^6]。 ```c HAL_GPIO_LockPin(GPIOA, GPIO_PIN_0); ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值