void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)是什么函数
时间: 2025-06-21 10:57:20 浏览: 17
### STM32 GPIO_SetBits 函数定义及用法
在STM32的标准库中,`GPIO_SetBits` 是一个用于设置指定GPIO引脚为高电平的函数。其定义如下[^1]:
```c
void GPIO_SetBits(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) {
GPIOx->BSRR |= GPIO_Pin;
}
```
#### 参数说明
- **GPIOx**: 指向GPIO端口的指针,类型为 `GPIO_TypeDef*`。例如,`GPIOA` 表示端口A。
- **GPIO_Pin**: 一个16位的值,表示需要设置为高电平的引脚。每个引脚对应一个比特位,例如 `GPIO_Pin_0` 表示第0个引脚。
#### 工作原理
该函数通过操作寄存器 `BSRR`(Bit Set/Reset Register)来设置指定的引脚为高电平。具体来说,`BSRR` 寄存器的低16位用于设置引脚为高电平,而高16位用于复位引脚为低电平。通过将 `GPIO_Pin` 的值与 `BSRR` 进行按位或运算,可以实现将指定引脚设置为高电平的效果[^1]。
#### 等效代码
`GPIO_SetBits` 的功能可以通过以下方式等效实现[^2]:
```c
GPIOA->BSRR = GPIO_Pin_0; // 设置GPIOA的第0个引脚为高电平
```
或者使用 `GPIO_WriteBit` 函数:
```c
GPIO_WriteBit(GPIOA, GPIO_Pin_0, BIT_SET);
```
#### 示例代码
以下是一个完整的示例,展示如何使用 `GPIO_SetBits` 函数来控制LED灯的亮灭[^3]:
**led.h**
```c
typedef enum { OFF = 0, ON = !OFF } LEDState;
#define LED(EN) (EN) ? (GPIO_SetBits(GPIOE, GPIO_Pin_12)) : (GPIO_ResetBits(GPIOE, GPIO_Pin_12))
```
**main.c**
```c
#include "stm32f10x_gpio.h"
int main(void) {
// 配置GPIOE端口的第12引脚为输出模式
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStruct);
while (1) {
// 设置LED为亮
LED(ON);
for (volatile int i = 0; i < 100000; i++); // 延时
// 设置LED为灭
LED(OFF);
for (volatile int i = 0; i < 100000; i++); // 延时
}
}
```
#### 注意事项
1. 在使用 `GPIO_SetBits` 函数之前,必须确保目标GPIO引脚已经被正确配置为输出模式。
2. 如果需要同时设置多个引脚为高电平,可以通过将多个引脚对应的位进行按位或运算后传递给 `GPIO_Pin` 参数。例如:
```c
GPIO_SetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1);
```
---
###
阅读全文
相关推荐



















