判断STM32 GPIO输入口的输入状态(高电平或低电平)
2015-06-16 09:44
1416 查看
判断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’,因此条件为真;
注:此方法并不是用来判断stm32 IO口状态的最好和最直接的方法,但对于理解位操作会有帮助。
以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’,因此条件为真;
注:此方法并不是用来判断stm32 IO口状态的最好和最直接的方法,但对于理解位操作会有帮助。
相关文章推荐
- Keil STM32工程环境搭建
- stm32之RTC
- STM32串口操作相关事项
- [嵌入式裸机课程]Cortex-M3开发实训班
- stm32的1602操作显示
- STM32 UART DMA实现未知数据长度接收(转自amoBBs)
- STM32F429 LTDC学习笔记1
- stm32学习笔记---入门环境搭建及开发板的选用
- stm32中断服务函数的机制
- pc寄存器与可寻址空间
- 关于STM32 库函数3.5版的各种坑
- STM32 IAP
- 红龙103开发板CAN IAP
- STM32开发板点灯
- [学习笔记]使用GNU Toolchain在STM32上跑起一个最小OS
- STM32 入门教程 系统时钟 SysTick
- ATM32F10x启动文件的选择
- 如何下载STM32固件库----2015/5/29
- stm32f10x
- stm32f10x基本定时器驱动