DHT11模块测量温湿度容易踩的坑

对本文章一些说明

该文章只是记录在学习DHT11模块时所遇到的一些问题,因此接下来的内容对不会对该模块进行过多介绍,有兴趣的朋友可以点击DHT11温湿度模块数据手册

用到的模块

STM32F103C8T6、面包板、飞线若干、OLED屏、DHT11模块。

代码

话不多说,直接上代码,我用的CubeMX工具自动生成的代码,因此这里只写用到一些重要函数:

//printf函数重定向
int fputc(int ch, FILE* f)
{
   
  HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 100);
  return ch;
}

//延时函数
//用于初始化延时函数用到的全局变量
static uint16_t g_val;

//延时函数的初始化
void Delay_Init(uint16_t sysclk)
{
   
	g_val = sysclk;
}

//us延时
void Delay_us(uint32_t us)
{
   
	uint32_t told, tnow;
	uint32_t tcnt = 0;
	uint32_t tload = SysTick->LOAD;
	uint32_t tick = g_val * us;		//需要的节拍数
	
	told = SysTick->VAL;			//刚开始的计数值
	while(1)
	{
   
		tnow = SysTick->VAL;		//当前计数值
		
		if(told >= tnow)
		{
   
			tcnt += told - tnow;
		}
		else
		{
   
			tcnt += tload + told - tnow;
		}
		
		told = tnow;
		
		if(tcnt >= tick)		//计时时间到
		{
   
			break;
		}	
	}
}

//ms延时
void Delay_ms(uint32_t ms)
{
   
	while(ms--)
	{
   
		Delay_us(1000);
	}
}

DHT11模块代码:
#include "dht11.h"
#include "delay.h"
#include "usart.h"

//配置IO为输出
void DHT11_OUT(void)
{
   
    GPIO_InitTypeDef GPIO_InitStruct = {
   0};
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值