这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » [经验]使用CubMX和Proteus学习STM32单片机(二)------DH

共10条 1/1 1 跳转至

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

工程师
2021-09-15 18:49:08     打赏
项目简介       利用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;            }
结语本文大部分内容都属于原创,如需转载,请附上本文网站,
如果需要相关的仿真图、程序代码等资料可以直接私信我,我会及时回复。





关键词: 使用     CubMX     Proteus     学习     STM32    

工程师
2021-09-15 23:40:12     打赏
2楼

不错的分享


工程师
2021-09-20 23:41:14     打赏
3楼

期待继续更新


专家
2021-09-28 07:17:31     打赏
4楼

感谢分享


专家
2021-10-08 00:50:03     打赏
5楼

太棒了,学习


专家
2021-10-08 01:48:41     打赏
6楼

不错的分享


院士
2021-10-08 05:46:25     打赏
7楼

一步一步的说明的很详细。


专家
2021-10-08 06:23:22     打赏
8楼

谢谢 分享  


专家
2021-10-08 06:45:55     打赏
9楼

感谢分享


专家
2021-10-08 07:04:57     打赏
10楼

感谢分享


共10条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]