| 项目简介 利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。这是第二部分针对单总线通信的一个典型例子——DHT11温湿度传感器,主要用于对STM32中GPIO模块和单总线通信的理解。 硬件模块 STM32F103R4 DHT11 LCD1602 74HC373 软件工具 CubMX Proteus KEIL 电路连接图 STM32F103R4 ![]() DHT11 ![]() LCD1602 ![]() 工作流程 首先还是先利用CubMX创建一个KEIL工程设置PA0位DHT11的数据口,这里之所以选用PA0,主要是有些版本的Proteus会有一些BUG,就是只有PA0端口有输入的功能,换句话说,就是只有PA0能够作为输入被单片机读取到数据。我一开始用的是8.6版本的Proteus,会有这个问题,后来下载更高版本的Proteus也可以解决这个问题,即其余端口也可作为输入口。 ![]() 时钟根据自己习惯保持默认即可。 ![]() 其余也是一样保持默认 ![]() 然后,在生成的KEIL工程里编写相应程序即可。程序主要代码部分在“程序代码” 标题里。 最后,在Proteus中仿真验证。结果如下图所示。 ![]() 程序代码 mian.c unsigned char buff[10]; unsigned char temp,humi;/* USER CODE END 0 *//** * @Brief The application entry point. * @retval int */int main(void){ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash inteRFace and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock*/ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ LCD_INIT(); DHT11_Init(); while(1) { /**********功能1:显示温湿度数据******************/ DHT11_Read_Data(&temp,&humi);//读取DHT11的温湿度数据 sprintf((char *)buff,"%.2d %.2d",temp,humi); LCD_WRITE_StrDATA(buff,0,0); /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */} DHT11.c //从DHT11读取一次数据//temp:温度值(范围:0~50°)//humi:湿度值(范围:20%~90%)//返回值:0,正常;1,读取失败unsigned char DHT11_Read_Data(unsigned char *temp,unsigned char *humi) { unsigned char buf[5]; unsigned char i; DHT11_Rst(); if(DHT11_Check()==0) { //HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET); for(i=0;i<5;i++)//读取40位数据 { buf=DHT11_Read_Byte(); } if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]) { *humi=buf[0]; *temp=buf[2]; } }else return 1; return 0; } 结语本文大部分内容都属于原创,如需转载,请附上本文网站, 如果需要相关的仿真图、程序代码等资料可以直接私信我,我会及时回复。 |
共1条
1/1 1 跳转至页
[经验]使用CubMX和Proteus学习STM32单片机(二)------DHT11
关键词: 使用 CubMX Proteus 学习 STM32
共1条
1/1 1 跳转至页
回复
| 有奖活动 | |
|---|---|
| 这个春节你犒赏自己什么了?分享你的故事,有奖征集 | |
| 2026年“我要开发板活动”第三季,开始了! | |
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
我要赚赏金打赏帖 |
|
|---|---|
| OK1126B-S开发板下函数构建及步进电机驱动控制被打赏¥25元 | |
| 【S32K3XX】LPI2C 参数配置说明被打赏¥20元 | |
| OK1126B-S开发板的脚本编程及应用设计被打赏¥27元 | |
| 5v升压8.4v两节锂电池充电芯片,针对同步和异步的IC测试被打赏¥35元 | |
| 【S32K3XX】S32DS LPI2C 配置失败问题解决被打赏¥22元 | |
| 【S32K3XX】FLASH 的 DID 保护机制被打赏¥19元 | |
| OK1126B-S开发板串口通信及其使用被打赏¥18元 | |
| 【S32K3XX】多核 CORE ID 获取被打赏¥18元 | |
| OK1126B-S开发板的GPIO资源及其使用被打赏¥20元 | |
| 【分享开发笔记,赚取电动螺丝刀】三分钟快速上手驱动屏幕(Arduino IDE环境)被打赏¥23元 | |







我要赚赏金
