前言
不知不觉已经拖更快三个月了,有很多新学的知识想分享上来,但是帖子都只写了一半就又去忙其他的事情了,于是帖子就一篇压一篇…不仅如此再回过头想把帖子写完又要重新把知识捡起来。 目前觉得这样会花费更多的时间,导致事情越来越多,不知道这种边学边复习的方式会不会更好,现在感觉的话还是更喜欢学完+写帖子再去做其他的事情。 有心得的小伙伴可以分享一下学习经验。
最近一直在学习华大的板子 (PS:两个月前) ,主要是HC32F460、F176、F005这三块对比着学,因为手上正好有DHT11,后面要用F460做项目,就想着先用HC32F460实现DHT11的温湿度读取,结果上网一搜。得...根本搜不到华大单片机任何和DHT11或者单总线相关的资料。
不禁让我有个大大的疑惑,难道华大没有单总线协议吗?(感觉是DHT11太Low了,谁会把广泛应用于工业领域的华大和一个单总线协议的DHT11联系在一起呢(除了我)。
–>本文用HC32F460实现模拟单总线读取DHT11温湿度
ps:后续文章为了提高效率,一些知识点我会放一些我仔细看过,觉得通俗易懂的文章链接,正文就不再赘述。内容则主要是在前人基础上的成果、心得以及希望大家不要再踩的坑。
一、DHT11与单总线
另外需要注意的是如下图单总线的IO需要上拉,内部上拉也可以。并且给DHT11供电最好是在3.1V以上,因为 实际遇到过供电2.9V,DHT11无法响应。
DHT11手册附在文末网盘链接中
。
如上图在知道HC32有内部上拉能力后,更加明确了能和DHT11通信。
二、DHT11通信协议
这里关于协议部分,最好还是要捋清楚,个人认为最好还是把起始信号记住,学习其他协议的时候可以横向对比,这样效率会高一些
。
三、串口打印温湿度
程序部分其实和STM32没多大区别,主要封装的函数名不同(当然也包括时钟、定时器配置不同,不过这些暂时可以忽略)。
程序功能很简单,注释较少,如有疑问可以留言。
其次程序中使用串口中断方式讲读取到的温度打印出来,如下图标注1的,使能让串口开始发送(TxEmpty)的,标注2同理,发送完成(TxCmplt)结束发送。
👇当然这些参数可以查手册明确作用,直接上图👇
四、最重要的是波形!!!
最后如何判断DHT11读数正确,最直接但也是最本质的就是通过波形判断,用我本人实际体会来说,看波形和不看对于协议完全是两个层面的理解。 如果没有示波器可以用逻辑分析仪看(常用的八通道的都足够了)。
在此之前我认为大家应该在脑海中有个基本的印象。不妨问问自己:单总线起始信号高低电平如何变换?拉低多少ms?DHT11又如何做出回应?
4.1 波形分析
下图时间问题,我认为是示波器问题,如果大家知道是什么问题,还请留言告诉我谢谢!
下图显示时间又非常正确。
第一位是温度第二位是湿度
4.2 实验现象
成功通信后,LED灯闪烁;请忽略我的板子:)
这里注意如果IO口加的保护电阻过大,会导致单总线不能被拉的很低,从而导致通讯失败。我在复现现象的时候就遇到这个问题,所以我直接用杜邦线接在芯片引脚上。
HC32F460模拟单总线读取DHT11温湿度
五、总结
事实上反思一下,大学期间用STM32用的多,网上又鱼龙混杂的STM的资料也数不清,学习之前就先搜搜资料,反正总能搜得到,就养成了没有资料就很难做的思维惯性。
最后欢迎大家交流探讨,有问题请指出。
网盘链接_有效期至2025-03
提取码:LUCK