STM32F103C8T6最小系统板使用DHT11温湿度模块
目录1.模块清单2.功能展示3.程序实现1.模块清单主要用到STM32F103C8T6最小系统板0.96寸OLED4线IIC屏幕DHT11温湿度传感器在某宝上都可以买到。目前我买的这款DHT11温度可以读取到小数部分湿度并不能读取到小数部分不知道是啥原因。工程放在文末免费获取。2.功能展示我买了一个小米的温湿度计然后根据温湿度计测出的数据对DHT11测出的数据进行一个对比总体测量出来的话DHT11湿度误差比较大±5%温度测量误差比较小±2℃。3.程序实现原理什么的就不多赘述了b站和csdn上都有大量的讲解我就贴出一些主要的代码部分工程会放在文末。采样周期我是使用的tim定时器1.5秒采样一次。main.c部分/** ****************************************************************************** * * * 应用平台STM32F103C8T6最小系统板 * * * * * * ****************************************************************************** */ #include stm32f10x.h #include OLED_I2C.h #include delay.h #include ./led/bsp_led.h #include ./usart/bsp_usart.h #include tim.h #include sys.h #include dht11.h extern u8 dat[5];//DHT11数据存放数组 int flag0;//温湿度采集标志位1.5s采集一次数据 unsigned int m;//毫秒计算变量 float tempurate,humi;//温度 湿度 变量定义 /* 温湿度dht11 data 接PB14 屏幕 SCL接PB6 SDA接PB7 */ char str[64]{0};//屏幕显示字符串 int main(void) { /*初始化LED、串口、OLED、DHT11*/ delay_init();//初始化延迟函数 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级设置 USART_Config();//串口初始化函数 LED_GPIO_Config();//LED初始化函数 I2C_Configuration();//配置CPU的硬件I2C OLED_Init();//初始化OLED OLED_CLS();//清屏 TIM3_Init(1000-1,72-1); //打开定时器3周期为500us DHT11_GPIO_IN();//温湿度传感器初始化 while(1) { //获取数据时让开发板的灯闪一下 if(flag) GPIO_ResetBits(GPIOC, GPIO_Pin_13); else GPIO_SetBits(GPIOC, GPIO_Pin_13); if(flag) { if(DHT_Read())//读取数据正确情况下进行温湿度计算 { flag0;//标志位置零进入下一次计时 humidat[0] dat[1]/10.f5;//计算湿度 tempuratedat[2] dat[3]/10.f;//计算温度 } OLED_ShowCN(0,2,0);//显示汉字温 OLED_ShowCN(16,2,1);//显示汉字度 sprintf(str,: %.1f C ,tempurate);//显示温度数值 OLED_ShowStr(32,2,(unsigned char*)str,2); OLED_ShowCN(0,5,2);//显示汉字湿 OLED_ShowCN(16,5,3);//显示汉字度 sprintf(str,: %.1f %% ,humi);//显示湿度数值 OLED_ShowStr(32,5,(unsigned char*)str,2); } } } /*********************************************END OF FILE**********************/dht11.c部分#include dht11.h #include delay.h uint8_t dat[5]{0x00,0x00,0x00,0x00,0x00}; uint8_t sum 0; /* *初始化输出 */ void DHT11_GPIO_OUT(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStructure.GPIO_Pin GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOB, GPIO_InitStructure); } /* *初始化输入 */ void DHT11_GPIO_IN(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStructure.GPIO_Pin GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, GPIO_InitStructure); } /* *读取一个字节 */ uint8_t DHT_Read_Byte(void) { uint8_t temp; uint8_t ReadDat 0; uint8_t retry 0; uint8_t i; for(i0; i8;i) { //读取一位数据时会先收到低电平信号50us while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) 0 retry 100) { Delay_us(1); retry; } retry 0; Delay_us(30); temp 0; //再接收高电平信号16us-28us代表数据0或高电平信号70us代表数据1 if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14)1) temp1; while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) 1 retry100) { Delay_us(1); retry; } retry 0; ReadDat1; ReadDat|temp; } return ReadDat; } /* *读取一次数据 */ uint8_t DHT_Read(void) { uint8_t i; uint8_t retry 0; //总线设置为输出并拉低18ms DHT11_GPIO_OUT(); GPIO_ResetBits(GPIOB, GPIO_Pin_14); Delay_ms(18); //总线再拉高40ms GPIO_SetBits(GPIOB, GPIO_Pin_14); Delay_us(40); //总线设置为输入 DHT11_GPIO_IN(); Delay_us(20); //等待响应信号为低电平 if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) 0) { //等待响应信号为高电平超时等待100us while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14)0retry100) { Delay_us(1); retry; } retry0; //等待数据传送超时等待100us while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14)1retry100) { Delay_us(1); retry; } retry0; //循环读取数据dat[0]为湿度整数数据dat[1]为湿度小数数据dat[2]为温度整数数据dat[3]为温度小数数据dat[4]为校验和数据 for(i0;i5;i) { dat[i] DHT_Read_Byte(); } Delay_us(50); } //当校验和数据湿度整数数据湿度小数数据温度整数数据温度小数数据说明正确传送。 sum dat[0] dat[1] dat[2] dat[3]; if(dat[4] sum) { return 1; } else return 0; }dht11.h#ifndef __DHT11_H #define __DHT11_H #include stm32f10x.h void DHT11_GPIO_OUT(void); void DHT11_GPIO_IN(void); uint8_t DHT_Read_Byte(void); uint8_t DHT_Read(void); #endif工程链接https://download.csdn.net/download/weixin_53801451/88787956

相关新闻

Unity渲染和着色器笔记

Unity渲染和着色器笔记

变换矩阵 模型>世界 设模型的x轴y轴z轴在世界的方向是vX、vY、vX,模型的世界坐标是(xM,yM,zM)。变换矩阵是 vXx vYx vZx xM vXy vYy vZy yM vXz vYz vZz zM 0 0 0 1…

2026/7/3 12:11:55 阅读更多 →
什么是架构?—— 从“盖房子”看软件系统的分解与组合

什么是架构?—— 从“盖房子”看软件系统的分解与组合

前言 假如你要盖一栋房子。你不会直接拎着砖头水泥就开工,而是会先找设计师画图纸,确定房子有几层、哪些房间、水电怎么走、承重墙在哪里。这张图纸,就是房子的架构。 软件系统也是一样。当我们要开发一个复杂系统(比如电商平台、…

2026/5/17 8:52:56 阅读更多 →
【Git】Git忽略文件

【Git】Git忽略文件

git rm -r --cached .git add .git commit -m "更新忽略文件"指定忽略:git rm --cached -r .trae docs git commit -m "停止跟踪 .trae 和 docs 目录"注意:忽略文件中添加忽略文件内容后,新添的这些忽略文件&#xff0c…

2026/7/5 6:12:39 阅读更多 →

最新新闻

基于YOLOv10的红外目标检测实战指南

基于YOLOv10的红外目标检测实战指南

1. 项目背景与核心价值去年夏天,我在参与一个山区救援项目时,亲眼目睹了传统无人机监控系统的局限性。在浓烟和夜间环境下,普通摄像头完全失效,而热成像设备虽然能捕捉到热源,却无法准确识别是人、动物还是车辆。正是这…

2026/7/5 12:51:58 阅读更多 →
AIAgent之工具调用:Function Call 与 Tool Use

AIAgent之工具调用:Function Call 与 Tool Use

工具调用:Function Call 与 Tool Use工具调用是 Agent 的「手」,让大模型能操作外部世界。这篇讲 Function Calling 的原理、工具怎么定义、模型怎么选工具、参数怎么传、常见的工具类型,以及开发中的最佳实践。大家好,我是黒漂技…

2026/7/5 12:49:55 阅读更多 →
ICM-42688-P与STM32F746ZG在工业自动化中的应用

ICM-42688-P与STM32F746ZG在工业自动化中的应用

1. ICM-42688-P与STM32F746ZG的黄金组合解析 在工业自动化和机器人控制领域,传感器与微控制器的协同设计直接决定了系统的性能上限。ICM-42688-P作为TDK InvenSense推出的6轴MEMS运动传感器,与STMicroelectronics的STM32F746ZG Cortex-M7微控制器形成的硬…

2026/7/5 12:47:54 阅读更多 →
混合整数二次规划在模型预测控制中的应用与求解器对比

混合整数二次规划在模型预测控制中的应用与求解器对比

1. 混合整数二次规划在模型预测控制中的核心作用 混合整数二次规划(MIQP)作为模型预测控制(MPC)中处理离散决策变量的关键技术,其核心价值在于平衡计算复杂度和控制性能。在车辆动力系统控制这类典型应用中,变速箱档位选择、发动机启停等离散决策变量与连…

2026/7/5 12:47:54 阅读更多 →
YOLO实战避坑指南:从环境配置到部署落地的完整工程化流程

YOLO实战避坑指南:从环境配置到部署落地的完整工程化流程

如果你在 2024 年或 2025 年才开始接触 YOLO,可能会觉得它已经是一个“古老”且“成熟”的技术栈,网上教程遍地都是,随便找个代码跑起来似乎并不难。但当你真正想把它用起来,无论是做一个毕业设计、一个内部工具,还是想…

2026/7/5 12:45:54 阅读更多 →
RT-DETR实战:从原理到部署,掌握实时目标检测新范式

RT-DETR实战:从原理到部署,掌握实时目标检测新范式

如果你正在为毕业设计、学术论文或者项目选型而纠结,面对目标检测领域两大主流技术路线——YOLO系列和DETR系列——不知道该如何选择,那么这篇文章就是为你准备的。这不仅仅是“YOLO vs DETR”的简单对比,更是一个关于技术范式、工程实践和未…

2026/7/5 12:45:54 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻