可以参考这个博客:
https://blog.csdn.net/qq_27508477/article/details/83661672
但是由于stm32f103很难得到1us的时钟,而且使用HAL库没有直接的寄存器操作,所以需要一定的修改,这里主要讲如何修改。
DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度±5%RH, 温度±2℃,量程湿度20-90%RH, 温度0~50℃。
DHT11利用单总线协议,因此有严格的时序。
主机先要发送一个至少18ms的低电平,在这个过程中,DHT11内部完成AD转换等操作,当主机拉高后,有20-40us时间,这个时间用于主机做输入输出切换,当主机释放总线控制权(此时主机为输入状态,总线被上拉电阻拉高),DHT11尝试将总线拉低,成功拉低后就开始准备发送数据了,再拉高一次就开始传输数据了。
具体传输过程如下,其中数据0和数据1依靠高电平持续时长来判断。
一个bit数据发送完之后会把总线拉低,反过来说应该是拉低一段时间后开始采样。
数据0表示方法:
数据1表示方法: