我想检测STM32 GPIOA和GPIOB的所有端口是否为低电平,怎么写?

如题所述

return (GPIOA->IDR || GPIOB->IDR);

或者直接使用STM32 GPIO的API,传入GPIOA和GPIOB即可

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)追问

我用了这个函数,可是碰到0号端口,返回数据总是0。可是我已经拉高了,万用表输出检测也是高的,你能正常检测不?

追答

你的GPIO是配置成Input还是Output

追问

OUTPUT

追答

既然你的GPIO都是Output了,你还用GPIO_ReadInputData干什么,这是访问input data register的,你自己都Output High了又用万用表量到是高电平了,说明你已经往output data register相应位写1了呀,如果真想检测output data register,建议你使用以下方式

访问GPIOx->ODR

或者使用API
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

追问

GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)==0或1 这么判断吧。我有用这么读,还是读不出A0或者B0口的准确状态

追答

刚查了下RM, 原来输出高低电平是用bit set/reset register 的,而且这个寄存器是只写的

温馨提示:内容为网友见解,仅供参考
无其他回答

在stm32中如何判断管脚的状态呀·~。。能不能详细的写出来。 比如我要...
u8 GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_9); 这个是读取输入引脚的,还有相应的读取输出引脚。读取PB9引脚的点评状态,高电平返回1,低电平返回0.是这个函数,不过函数名儿我记不大清了,大体是这个名称。

stm32f4单片机 如何让IO口输出低电平?
置高电平:void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)置低电平:void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)如设置A口第1管脚为低电平:GPIO_ResetBits( GPIOA, GPIO_Pin_0 )当然,之前要初始化该管脚为输出模式,用如下函数 void GPIO_Init(GPIO_Type...

怎么让stm32某个脚输出高\/低电平?
库函数有GPIO-SetBits(GPIOC,GPIO-Pin-3)或者GPIO-Reset(……)命令,也比较简单 开漏输出就是不输出电压,低电平时接地,高电平时不接地。如果外接上拉电阻,则在输出高电平时电压会拉到上拉电阻的电源电压。这种方式适合在连接的外设电压比单片机电压低的时候。 推挽输出就是单片机引脚可以直接输...

关于STM32的简单问题,GPIOA->BSRR=0x080004;这样写对吗?
这么写是前面省略了几个0而已,与 GPIOA->BSRR=0x00080004 是一样的。这就好像你的十进制数写“500块”而不会写“0000000500块”一样,但两种写法又都对。

STM32 GPIO_ReadInputDataBit()函数用法
要读取某位上的值,应该改为浮空输入模式,即GPIO_Mode_IN_FLOATING,如果你用上拉输入,会造成电平有可能处于中间态,无法判断

stm32 配置 多个GPIO 无法读取浮空输入的高低电平
http:\/\/zhidao.baidu.com\/link?url=lSy_rnHhf3brArJm7YkfhSVtXonxylvdT4Myquwa7MPJJJ-RiGAWz7fkJR3grm0tGc8hjLcS8n2842gA9nte3a 这问题跟你的差不多,可以参考一下

stm32 两个GPIO口 能不能同时输出高电平 有的话 告诉我 那种语句怎么写...
GPIO_SetBits(GPIOA,GPIO_Pin_0);GPIO_SetBits(GPIOA,GPIO_Pin_1);让gpioa。0、1置一

stm32的GPIOA有16个引脚,但是GPIOA也是寄存器吗有多少位
stm32是32位的,其中的所有寄存器都是32位的,但是不同寄存器中,有效的位数相应改变。GPIO有 端口配置低寄存器GPIOx_CRL:配置0-7引脚的模式,每个引脚配4bit,两位用于配置输入模式,两位用于配置输出模式 端口配置高寄存器GPIOx_CRH:配置8-15引脚的模式(同上)端口输入数据寄存器GPIOx_IDR(低16位...

STM32 proteus仿真 使PA1口为高电平 实际仿真为什么任为低电平?
说句老实话,你的项目真的太乱了,GPIO的操作是正确的,问题只有可能是配置问题,一般的话main函数尾部你加一条语句“while(1);”,表示死循环,一般单片机没有操作系统不用返回值,就要加while(1);死循环,还有你的头文件包含错误了,要包含stm32f10x_conf.h,具体你可以看一眼这个文件,你就知道...

32单片机怎么控制CD4052的A B端是0 还是1?
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); \/\/ 将GPIOB的第13号引脚输出高电平,即B端输出1 通过这种方式,STM32单片机就可以控制CD4052的A、B端是0还是1,从而实现不同通道的选择。需要注意的是,在使用CD4052时需遵循其数据手册中的规范,特别是在确定合适的电气特性和工作条件方面...

相似回答