AM2302温湿度传感器实验,传感器发送的应答信号一直不结束。(开发板型号:STM32F103RBT6)

2019-10-16 07:04发布

最近在做AM2302温湿度模块实验,希望把温湿度数据读出来显示在串口调试助手中。在调试过程中首先根据时序向传感器发送激活信号,传感器能够产生应答,但此应答信号一直停留在高电平,导致死循环。出问题的代码如下:
[mw_shl_code=c,true]AM2302_IO_OUT(); //将PA5设置为推挽输出 AM2302_DQ_OUT=0; //输出0 delay_ms(1); //延时1ms AM2302_DQ_OUT=1; //释放总线 delay_us(30); //延时30us AM2302_IO_IN(); //将PA5设置为输入状态 Sensor_AnswerFlag=0; //将传感器是否联通位设置为0 if(AM2302_DQ_IN==0) //判断传感器是否发出响应信号 { Sensor_AnswerFlag=1; //传感器已经联通 Sys_CNT = 0; while(!AM2302_DQ_IN) //判断从传感器发出的80us低电平信号是否结束 { delay_us(1); if(++Sys_CNT>300) //防止死循环 { Sensor_ErrorFlag = 1; return 0; } } printf("%d 80us的低电平已经结束 ",Sys_CNT); Sys_CNT = 0; while(AM2302_DQ_IN) //判断主机是否发出80us的高电平信号,若发出则进入数据接收状态 { delay_us(1); if(++Sys_CNT>300) //防止进入死循环!!!!!!!!!!!!!程序在这里进入死循环!! { Sensor_ErrorFlag = 1; printf("死循环 "); return 0; } }[/mw_shl_code]
以上就是出问题的地方,处理器已经能收到传感器发来的80us低电平信号,说明传感器能够响应激活信号,但是接下来的80us高电平信号无法结束,不知道问题出在哪里。 这是该传感器模块的通信时序:
新手求指导,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。