打印
[STM32H7]

使用CubMX和Proteus学习STM32单片机(二)------DHT11

[复制链接]
1962|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
项目简介       利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。这是第二部分针对单总线通信的一个典型例子——DHT11温湿度传感器,主要用于对STM32中GPIO模块和单总线通信的理解。



使用特权

评论回复
沙发
欢乐家园|  楼主 | 2021-10-26 21:57 | 只看该作者
硬件模块        STM32F103R4
        DHT11
        LCD1602
        74HC373

使用特权

评论回复
板凳
欢乐家园|  楼主 | 2021-10-26 21:59 | 只看该作者
软件工具        CubMX
        Proteus
        KEIL

使用特权

评论回复
地板
欢乐家园|  楼主 | 2021-10-26 22:02 | 只看该作者
电路连接图        STM32F103R4
        

使用特权

评论回复
5
欢乐家园|  楼主 | 2021-10-26 22:04 | 只看该作者
DHT11

使用特权

评论回复
6
欢乐家园|  楼主 | 2021-10-26 22:05 | 只看该作者
       LCD1602

使用特权

评论回复
7
欢乐家园|  楼主 | 2021-10-26 22:05 | 只看该作者
工作流程        首先还是先利用CubMX创建一个KEIL工程设置PA0位DHT11的数据口,这里之所以选用PA0,主要是有些版本的Proteus会有一些BUG,就是只有PA0端口有输入的功能,换句话说,就是只有PA0能够作为输入被单片机读取到数据。我一开始用的是8.6版本的Proteus,会有这个问题,后来下载更高版本的Proteus也可以解决这个问题,即其余端口也可作为输入口。

使用特权

评论回复
8
欢乐家园|  楼主 | 2021-10-26 22:07 | 只看该作者

使用特权

评论回复
9
欢乐家园|  楼主 | 2021-10-26 22:08 | 只看该作者
  时钟根据自己习惯保持默认即可。

使用特权

评论回复
10
欢乐家园|  楼主 | 2021-10-26 22:15 | 只看该作者

使用特权

评论回复
11
欢乐家园|  楼主 | 2021-10-26 22:15 | 只看该作者
其余也是一样保持默认

使用特权

评论回复
12
欢乐家园|  楼主 | 2021-10-26 22:18 | 只看该作者

使用特权

评论回复
13
欢乐家园|  楼主 | 2021-10-26 22:19 | 只看该作者
然后,在生成的KEIL工程里编写相应程序即可。程序主要代码部分在“程序代码” 标题里。

使用特权

评论回复
14
欢乐家园|  楼主 | 2021-10-26 22:19 | 只看该作者
最后,在Proteus中仿真验证。结果如下图所示。

使用特权

评论回复
15
欢乐家园|  楼主 | 2021-10-26 22:20 | 只看该作者

使用特权

评论回复
16
欢乐家园|  楼主 | 2021-10-26 22:20 | 只看该作者
程序代码
mian.c
unsigned char buff[10];        unsigned char temp,humi;/* USER CODE END 0 *//**  * [url=home.php?mod=space&uid=247401]@brief[/url]  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;            }

使用特权

评论回复
17
callhgd| | 2021-10-29 11:22 | 只看该作者
楼主,有什么好的方法快速切换设置切换PA0口的输入输出?

使用特权

评论回复
18
sadicy| | 2021-11-1 13:48 | 只看该作者
proteus,看着很高端,
mcu模型是现成的么?

使用特权

评论回复
19
nawu| | 2021-11-8 16:19 | 只看该作者
硬件布件有要求吗

使用特权

评论回复
20
wiba| | 2021-11-8 16:22 | 只看该作者
感觉用这个传感器的很多啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

900

帖子

1

粉丝