stm32写DHT11只能输出高电平的问题

问题描述:

最近在做某个小项目时,需要使用DHT11温湿度传感器。传感器使用单总线传输协议需要遵守一定的时序才能正常使用,但是最后却遇到了一个很奇怪的问题——无论怎么调试,结果都DHT11传输回来的信号都只有高电平,根本没有低电平。

 

问题原因:

在排除了硬件芯片烧毁、电路连接错误的问题之后,发现主要原因由两个:

一.时序错误

DHT11使用手册上写着“当总线空闲的时候,总线总是高电平。”以及“开启时序错误,传感器将不会响应”。既然传感器的总线无论怎样都只有高电平没有低电平,会不会是传感器的开启信号根本就是错的?

经过调试,答案的确是“是"。程序的时序有问题,问题的关键在这两个个delay_us()和delay_ms()上。

我原本使用的的两个delay函数是从当初初学时使用的正点原子的代码那边直接copy过来的。查看这两个函数可以发现,都是调用了系统的Ticky时钟来进行计时延迟的。那是使用的stm32芯片型号是STM32F103ZE,然而此刻我所使用的芯片型号是STM32F103C8,型号不同导致系统时钟不同,导致了同样的一个delay_ms(),延迟的时间不一样!!

使用kile5的debug查看延迟1s实际上使用了多少时间。可以看到实际上运行了7.2s!!由此可以得出结论——整个工程的时间延迟都是错的,直接导致启动信号不对,而启动信号的时序都已经错了,难怪之后传感器根本没有响应。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值