免费领的,给STM32做个练习
本帖最后由 iffi123 于 2020-2-8 21:57 编辑前阵子在立创买元件,领了3个DHT11温度湿度传感器模块,指标比较差,误差大,
不过模块化结构,方便用杜邦线和最小系统连接(春节回老家没带工具), 就当作学习STM32 的练习
它是单总线通信,一来以往都在同一根数据线上,
工作流程也简单
cpu发个低电平脉冲启动,传感器也回一个低电平脉冲作为响应,然后连续发送40位数据,一位数据由低电平(固定时长)和高电平(可变时长)组成,不同时长的高电平代表1和0, 40位数据组成5个字节数据, 分别是传感器和温度的整数位和小数位,再加一个校验字节。
这东西准确性比较差 本帖最后由 iffi123 于 2020-2-8 22:28 编辑
第一步,刚开始写程序,用了最土的办法, 跟随时序,等检测到数据位的低电平后,等待判断变高后,延时一定时间,再读取数据线,如果是低电平,说明是0, 否则为1, 这种简单办法也有效,能正确显示出温度和湿度了。
不过不过瘾,感觉没什么劲,人家明明是时长不同区分的
第二步,当时正在看定时器章节, 正好知道输入捕获功能可以测脉宽,马上练手试验
使用定时器2的CH1, 对应内部就是TI1, 也使用了捕获通道IC1(4个通道其中1个),设置好定时器参数后,再设置IC1, 先设置成上升沿捕获, 当出现上升沿后, 进入中断程序,保存捕获寄存器CCR1的值,再把极性改成下降沿, 因为等高电平结束后,又会产生1次中断, 再次保存CCR1的值,2次值相减,就是高电平的时间(还要乘以时钟周期), 当然如果发生定时器溢出还要另外处理。
这样计算出来的高电平时长和手册上的典型值几乎一致,说明测得很准,这种结果才让人放心:loveliness:
还有什么别的办法,如果有,一起试试,不怕失败
第三步, 官方的参考手册,提到PWM输入模式也可以测量周期和占空比,自然要试试了。
这种办法比第二种更简单,基本差不多,就是把输入信号同时映射到2个捕获通道, 一个上升沿,一个下降沿,下降沿触发的中断读取CCR1直接出来高电平,上升沿的就是周期了,只不过要分别配置IC1,和IC2, 书上有介绍原理,换成C代码就可以了。
结果差不多,时长和第二步的结果非常一致。
结论:这模块虽不准但可以用
平时把模块伸到窗户外, 用上次的发射板数码管显示温度和湿度,随时掌握外面的温度:P
应该学会很多东西了吧 分立元件 发表于 2020-2-9 22:00
应该学会很多东西了吧
学不完,先打好基础再说, 定时器功能比较强大,内容有点杂,基本理顺关系和众多寄存器的设置
页:
[1]