stm32 hal 读取gpio口高低电平
时间: 2025-02-08 08:45:19 浏览: 93
### 使用 STM32 HAL 库读取 GPIO 引脚高低电平
为了实现通过 STM32 HAL 库来读取 GPIO 引脚上的高低电平,可以按照如下方法操作。此过程涉及初始化配置以及实际的数据读取。
#### 初始化 GPIO 配置
在开始之前,确保已经选择了合适的引脚用于输入模式,并完成了必要的硬件连接。对于输入模式的选择,可以选择带有内部上拉或下拉电阻的输入模式[^3]。这有助于防止浮空状态带来的不确定行为。
下面是一个简单的初始化函数示例:
```c
#include "stm32f1xx_hal.h"
// 定义使用的GPIO端口和引脚
#define BUTTON_GPIO_PORT GPIOA
#define BUTTON_PIN GPIO_PIN_0
static void MX_GPIO_Init(void)
{
__HAL_RCC_GPIOA_CLK_ENABLE(); // 启用GPIOA时钟
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* 配置PA0作为输入 */
GPIO_InitStruct.Pin = BUTTON_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL; // 不使用上下拉
HAL_GPIO_Init(BUTTON_GPIO_PORT, &GPIO_InitStruct);
}
```
这段代码设置了 `PA0` 为无上下拉的输入模式。如果希望启用内置的上拉或下拉,则可将 `GPIO_InitStruct.Pull` 设置为 `GPIO_PULLUP` 或者 `GPIO_PULLDOWN`。
#### 实现读取功能
完成上述设置之后,就可以编写一个简单的方法来获取指定引脚的状态了。这里提供了一个名为 `ReadButtonState()` 的辅助函数来进行这一工作:
```c
uint8_t ReadButtonState(void){
uint8_t button_state;
// 读取按钮状态 (高=释放, 低=按下)
if(HAL_GPIO_ReadPin(BUTTON_GPIO_PORT, BUTTON_PIN) != GPIO_PIN_SET){
button_state = 1; // 按钮被按下了
}else {
button_state = 0; // 没有检测到点击事件
}
return button_state;
}
```
在此基础上,在主循环或其他适当位置调用该函数即可获得当前引脚的状态。需要注意的是,当返回值为 `1` 表明引脚处于低电平(即按键闭合),而 `0` 则表示高电平(开路)。这是因为大多数情况下,默认情况下的逻辑是反向的;也就是说,未按下时引脚呈现高阻态或是由外部电路决定其默认为高电平。
阅读全文
相关推荐




















