矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 2138|回复: 4

免费领的,给STM32做个练习

[复制链接]
     
发表于 2020-2-8 21:55:04 | 显示全部楼层 |阅读模式
本帖最后由 iffi123 于 2020-2-8 21:57 编辑

前阵子在立创买元件,领了3个DHT11温度湿度传感器模块,指标比较差,误差大,

不过模块化结构,方便用杜邦线和最小系统连接(春节回老家没带工具), 就当作学习STM32 的练习
1.jpg

它是单总线通信,一来以往都在同一根数据线上,

工作流程也简单

cpu发个低电平脉冲启动,传感器也回一个低电平脉冲作为响应,然后连续发送40位数据,一位数据由低电平(固定时长)和高电平(可变时长)组成,  不同时长的高电平代表1和0, 40位数据组成5个字节数据, 分别是传感器和温度的整数位和小数位,再加一个校验字节。

2.jpg
     
发表于 2020-2-8 22:09:11 | 显示全部楼层
这东西准确性比较差
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-2-8 22:17:49 | 显示全部楼层
本帖最后由 iffi123 于 2020-2-8 22:28 编辑

第一步,刚开始写程序,用了最土的办法, 跟随时序,等检测到数据位的低电平后,等待判断变高后,延时一定时间,再读取数据线,如果是低电平,说明是0, 否则为1, 这种简单办法也有效,能正确显示出温度和湿度了。

不过不过瘾,感觉没什么劲,人家明明是时长不同区分的

第二步,当时正在看定时器章节, 正好知道输入捕获功能可以测脉宽,马上练手试验

使用定时器2的CH1, 对应内部就是TI1, 也使用了捕获通道IC1(4个通道其中1个),  设置好定时器参数后,再设置IC1, 先设置成上升沿捕获, 当出现上升沿后, 进入中断程序,保存捕获寄存器CCR1的值,再把极性改成下降沿, 因为等高电平结束后,又会产生1次中断, 再次保存CCR1的值,2次值相减,就是高电平的时间(还要乘以时钟周期), 当然如果发生定时器溢出还要另外处理。

这样计算出来的高电平时长和手册上的典型值几乎一致,说明测得很准,这种结果才让人放心
3.jpg

还有什么别的办法,如果有,一起试试,不怕失败

第三步, 官方的参考手册,提到PWM输入模式也可以测量周期和占空比,自然要试试了。

这种办法比第二种更简单,基本差不多,就是把输入信号同时映射到2个捕获通道, 一个上升沿,一个下降沿,下降沿触发的中断读取CCR1直接出来高电平,上升沿的就是周期了,只不过要分别配置IC1,和IC2, 书上有介绍原理,换成C代码就可以了。

结果差不多,时长和第二步的结果非常一致。
3.png

结论:  这模块虽不准但可以用

平时把模块伸到窗户外, 用上次的发射板数码管显示温度和湿度,随时掌握外面的温度


回复 支持 反对

使用道具 举报

     
发表于 2020-2-9 22:00:40 来自手机 | 显示全部楼层
应该学会很多东西了吧
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-2-9 22:16:02 | 显示全部楼层
分立元件 发表于 2020-2-9 22:00
应该学会很多东西了吧

学不完,先打好基础再说, 定时器功能比较强大,内容有点杂,基本理顺关系和众多寄存器的设置
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-28 12:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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