OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4476|回复: 8

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

[复制链接]

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2015-7-25
在线时间
1 小时
发表于 2015-8-9 17:17:28 | 显示全部楼层 |阅读模式
5金钱
最近在做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的低电平已经结束\r\n",Sys_CNT); Sys_CNT = 0; while(AM2302_DQ_IN) //判断主机是否发出80us的高电平信号,若发出则进入数据接收状态 { delay_us(1); if(++Sys_CNT>300) //防止进入死循环!!!!!!!!!!!!!程序在这里进入死循环!! { Sensor_ErrorFlag = 1; printf("死循环\r\n"); return 0; } }[/mw_shl_code]

以上就是出问题的地方,处理器已经能收到传感器发来的80us低电平信号,说明传感器能够响应激活信号,但是接下来的80us高电平信号无法结束,不知道问题出在哪里。

这是该传感器模块的通信时序:


新手求指导,谢谢

AM2302.rar

788.26 KB, 下载次数: 250

最佳答案

查看完整内容[请看2#楼]

今天总算发现原因了,是因为printf函数占用的时间过长,导致跳过了较长的时序。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2015-7-25
在线时间
1 小时
 楼主| 发表于 2015-8-9 17:17:29 | 显示全部楼层
今天总算发现原因了,是因为printf函数占用的时间过长,导致跳过了较长的时序。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-8-9 22:14:27 | 显示全部楼层
帮顶。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2015-7-25
在线时间
1 小时
 楼主| 发表于 2015-8-10 10:21:41 | 显示全部楼层
顶一下
回复

使用道具 举报

39

主题

598

帖子

0

精华

高级会员

Rank: 4

积分
875
金钱
875
注册时间
2013-12-18
在线时间
41 小时
发表于 2015-8-10 11:07:22 | 显示全部楼层
帮顶。。。。
回复

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2015-7-25
在线时间
1 小时
 楼主| 发表于 2015-8-19 12:07:25 | 显示全部楼层
求助谢谢
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-10-10
在线时间
0 小时
发表于 2015-10-10 18:26:32 | 显示全部楼层
回复【6楼】LuckyMan:
---------------------------------
你好,你是怎么解决的呢?我是想在这个基础上再加其他传感器,但是时序就被打乱。有没有什么两全之法
回复

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2015-7-25
在线时间
1 小时
 楼主| 发表于 2015-10-14 19:35:27 | 显示全部楼层
回复【7楼】古月一心:
---------------------------------
在接收数据的时候不要加上其他代码以免打乱时序。加其他传感器的话,第一个传感器数据接收完了再接收第二个,不要两个穿插着接
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2016-11-28
在线时间
13 小时
发表于 2016-11-30 08:56:13 | 显示全部楼层
本帖最后由 foreveroad 于 2016-11-30 08:57 编辑

楼主 你好 我移植你的程序 结果串口显示温度和湿度一直为0,请问这是什么问题,谢谢,图片如下
C:\Users\Administrator\Desktop
1.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 18:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表