判断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’,因此条件为真;通过此方法可以同时判断PE2或PE4(甚至更多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’,因此条件为真;
或者利用库函数GPIO_ReadInputDataBit去判断:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
uint8_t bitstatus = 0x00;
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
{
bitstatus = (uint8_t)Bit_SET;
}
else
{
bitstatus = (uint8_t)Bit_RESET;
}
return bitstatus;
}
如判断PA3的电平高低:
GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)==SET
如果PA3为高电平则返回真,否则返回假
上一篇:STM32F407-限位金属传感器限制步进电机
下一篇:STM32F407-定时器中断
推荐阅读最新更新时间:2024-11-04 03:28
设计资源 培训 开发板 精华推荐
- 使用 Analog Devices 的 LTC2922IF-3.3 的参考设计
- LTC1981 的典型应用 - SOT-23 中的单通道和双通道微功率高侧开关控制器
- 航模高度(气压)计
- MB39C022N降压DC/DC转换器+低噪声LDO的典型应用
- ESP32-Desktop-PD-Power
- AD8626ARZ-REEL7 精密放大器的典型应用电路,用于显示直流误差的光电二极管模型
- TB67H400AFNG PWM 斩波型有刷直流电机驱动器评估板
- 磁保持继电器模块
- DS70005147B,使用 PIC32MZ2048 MCU 的 PIC32MZ 嵌入式连接 (EC) 入门套件
- 60W, 6.5V, 13V, 105V, 115V 交流转直流多输出电视调谐器电源
- 村田调研季:电子工程师元器件购买渠道调研
- ADI有奖下载活动之3 两线环路供电变送器解决方案
- 下载MPS汽车电机控制技术干货,赢【Keep体脂秤、自动洗手机套装、小米保温杯】,开启汽车技术进阶之旅!
- 你有原创我有奖,等值现金奖励最高到500
- 下载有礼:ADI公司生化分析仪解决方案!
- 下载有礼|是德科技电子书 《通过了解测试精度的基础知识, 提高良率并降低风险》,不做“差不多先生”
- TI携您共创未来乘驾新体验——深入学习: 点评明星产品,为它打榜
- 下载有礼|《ADI 流式细胞分析仪解决方案》
- “感谢有你,感恩有礼”——感恩节抢楼&送谢礼活动
- 【EEWORLD第二十七届】2011年06月社区明星人物揭晓!