判断STM32 GPIO输入口的输入状态(高电平或低电平)

本文详细介绍了如何使用STM32GPIO输入口判断输入状态(高电平或低电平),包括单个端口及多个端口的状态判断,并提供了实际应用中的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

判断STM32 GPIO输入口的输入状态(高电平或低电平)

以PE2和PE4为例:

 

① 判断单个端口是否为高电平:

if(GPIOE->IDR& GPIO_IDR_IDR2)

{

函数体;

}

当PE2端口为高电平时,if条件为真;当PE2口为低电平时,if条件为假;

 

② 判断单个端口是否为低电平:

if((~GPIOE->IDR)& GPIO_IDR_IDR2)

{

函数体;

}

分析:首先通过 &GPIO_IDR_IDR屏蔽掉PE2之外的其他PE口。当PE2为高电平时,GPIO-〉IDR的bit2为‘1’,取反后为‘0’,因此条件为假;当PE2为低电平时,GPIO-〉IDR的bit2为‘0’,取反后为‘1’,因此条件为真;通过此方法可以同时判断PE2PE4(甚至更多PE口)是否为低电平(如按键被按下)

 

③ 判断多个端口中是否有低电平:

if((~GPIOE->IDR)& (GPIO_IDR_IDR2 | GPIO_IDR_IDR4))

{

函数体;

}

分析:首先通过 & (GPIO_IDR_IDR2| GPIO_IDR_IDR4)屏蔽掉PE2和PE4之外的其他PE口。当PE2或(和)PE4中为低电平时,GPIO-〉IDR的bit2或(和)bit4为‘0’,取反后为‘1’,因此条件为真;

 

注:此方法并不是用来判断stm32 IO口状态的最好和最直接的方法,但对于理解位操作会有帮助。
### STM32标准外设库中读取GPIO引脚高低电平的函数 在STM32的标准外设库(Standard Peripheral Library)中,用于读取GPIO引脚高低电平的功能可以通过`GPIO_ReadInputDataBit()`函数实现[^1]。此函数允许开发者获取指定GPIO引脚的状态。 以下是该函数的具体描述及其参数说明: #### 函数原型 ```c uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); ``` - **参数**: - `GPIOx`: 表示要操作的GPIO,例如`GPIOA`, `GPIOB`等。 - `GPIO_Pin`: 表示具体的GPIO引脚编号,例如`GPIO_PIN_0`, `GPIO_PIN_1`等。 - **返回值**: 返回一个布尔类型的值 (`0` `1`),表示当前引脚的逻辑状态。其中,`0`代表低电平,而`1`则代表高电平。 下面是一个简单的代码示例,展示如何使用这个函数来读取特定GPIO引脚的状态: ```c #include "stm32f1xx.h" int main(void) { // 初始化GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 配置PA0为输入模式 GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 浮动输入模式 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); while (1) { // 读取PA0引脚的电平状态 uint8_t pinState = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0); if (pinState == BIT_SET) { // 如果检测高电平... // 执行某些操作 } else { // 如果检测低电平... // 执行其他操作 } } } ``` 在此代码片段中,初始化了一个GPIO引脚作为输入,并通过调用`GPIO_ReadInputDataBit()`周期性地检查其状态变化。 需要注意的是,在实际开发过程中可能遇到编译器提示关于安全性的警告问题,比如当处理字符串转换成数值的操作时建议采用更健壮的方法替代传统的`scanf`函数[^2]。然而这并不直接影响GPIO相关功能的应用场景。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值