gpio_resetbits 和 gpio_writebit
时间: 2025-06-10 22:50:40 浏览: 18
### GPIO_ResetBits 与 GPIO_WriteBit 的用法及区别
#### 功能描述
`GPIO_ResetBits` 是用于将指定的一个或多个 IO 口设置为低电平的功能函数。其底层操作是通过配置 BSRR 寄存器来完成的[^3]。而 `GPIO_WriteBit` 则是一个更通用的函数,可以单独控制某一个引脚的状态(高电平或低电平),具体取决于第三个参数 `BitAction` 的取值。
#### 参数对比
- **GPIO_ResetBits**
- 参数列表:
```c
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
```
- 功能:将指定的 `GPIO_Pin` 设置为低电平。
- 特点:仅支持写入低电平状态,无法直接设置高电平[^4]。
- **GPIO_WriteBit**
- 参数列表:
```c
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
```
- 功能:根据 `BitVal` 的值决定是否将指定的 `GPIO_Pin` 设置为高电平 (`Bit_SET`) 或低电平 (`Bit_RESET`)。
- 特点:更加灵活,能够分别处理高低电平的情况[^2]。
#### 底层机制
两者都基于 STM32 的寄存器操作实现,但它们的具体行为有所不同:
- `GPIO_ResetBits` 主要针对的是 BSRR 寄存器中的重置部分 (Reset),它会清零对应的位。
- `GPIO_WriteBit` 更加抽象化,在内部调用了类似的寄存器操作逻辑,但它允许用户显式地传递期望的状态作为输入参数。
#### 使用场景分析
当只需要简单地拉低某些特定管脚时,可以直接选用 `GPIO_ResetBits` 函数;如果需要动态调整单一引脚的状态,则推荐采用更为直观易读的 `GPIO_WriteBit` 方法。
以下是利用上述两者的代码实例展示如何让 LED 灯闪烁:
```c
// 初始化变量 time 并设定初始延长时间
uint32_t time = 0;
while(1){
// 调用 GPIO_SetBits 来点亮 PF10 上连接的 LED
GPIO_SetBits(GPIOF, GPIO_Pin_10);
// 自定义延迟函数模拟等待过程
delay(time);
// 将对应端口上的该针脚重新设回至关闭状态
GPIO_ResetBits(GPIOF, GPIO_Pin_10);
// 再次触发一次短暂暂停效果
delay(5000 - time);
// 循环增加时间直到达到最大阈值后再逐步减少形成呼吸灯效应
if(++time >= 5000 || --time <= 0){}
}
```
或者也可以替换其中一部分命令如下所示以体现另一种方式:
```c
if(Bit_SET == GPIO_ReadInputDataBit(GPIOF, GPIO_Pin_10)){
GPIO_WriteBit(GPIOF, GPIO_Pin_10, Bit_RESET);
} else {
GPIO_WriteBit(GPIOF, GPIO_Pin_10, Bit_SET);
}
delay();
```
以上两种方法均能达成相同目的即制造周期性的亮灭现象给视觉带来闪烁感[^5]。
阅读全文
相关推荐



















