上次使用延时的方法读取DHT11,今天使用定时器TIM2输入捕获的方式读取DHT11。
硬件使用TIM2的CH0通道(PA0)捕获DHT11输出的数据,判断电平时间来判断数据0还是1,中断方式。
同时使用PA1接到DHT11的数据引脚,用于输出启动测试信号,18ms的低电平。
=====================================================
先上效果吧:
下面简单说一下程序实现:
1、首先定义用到的变量:
2、
主函数,每10s启动一次DHT11数据读取,然后判断是否读正确,正确则输出数据:
3、
定时器TIM2的CH1通道输入捕获回调函数,每次进入,首先看是否位第0次进入:
每次捕获到边沿后,判断时间,来判断数据位是1还是0,然后写入变量保存:
4、定时器TIM2的溢出中断,用于判断DHT11是否有超时:
5、启动一次测试,输出18ms的低电平,然后启动定时器TIM2的CH1通道输入捕获功能,中断方式:
6、校验DHT11的数据是否正确:
7、还是上主程序压缩文件:
main.zip
(3.9 KB)
|