你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
STMCU小助手 发布时间:2022-11-15 23:23
项目简介
       利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。这是第二部分针对单总线通信的一个典型例子——DHT11温湿度传感器,主要用于对STM32中GPIO模块和单总线通信的理解。


硬件模块
        STM32F103R4

        DHT11

        LCD1602

        74HC373


软件工具
        CubMX

        Proteus

        KEIL

电路连接图
        STM32F103R4

L58L9GSC%HA]M%G{LR35YAX.png

        DHT11

M3LF8VFMC3G)${UOXVP4@(2.png

        LCD1602

8`4X%R(9`74LKL_~~PF)P9P.png


工作流程
        首先还是先利用CubMX创建一个KEIL工程设置PA0位DHT11的数据口,这里之所以选用PA0,主要是有些版本的Proteus会有一些BUG,就是只有PA0端口有输入的功能,换句话说,就是只有PA0能够作为输入被单片机读取到数据。我一开始用的是8.6版本的Proteus,会有这个问题,后来下载更高版本的Proteus也可以解决这个问题,即其余端口也可作为输入口。

2$@`V0}8V[PZO[C7]YH6`20.png

        时钟根据自己习惯保持默认即可。

O7AXV1`VX(25RA40Y6YNF]U.png

        其余也是一样保持默认

{XBC[U)XOZ($`7L@DRZHZL0.png


        然后,在生成的KEIL工程里编写相应程序即可。程序主要代码部分在“程序代码” 标题里。

        最后,在Proteus中仿真验证。结果如下图所示。

0B3$PYA6]ZIV4X@F[2%@24X.png

程序代码
      mian.c

  1. unsigned char buff[10];
  2.         unsigned char temp,humi;
  3. /* USER CODE END 0 */



  4. /**
  5.   * @brief  The application entry point.
  6.   * @retval int
  7.   */
  8. int main(void)
  9. {
  10.   /* MCU Configuration--------------------------------------------------------*/

  11.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  12.   HAL_Init();

  13.   /* USER CODE BEGIN Init */

  14.   /* USER CODE END Init */

  15.   /* Configure the system clock */
  16.   SystemClock_Config();

  17.   /* USER CODE BEGIN SysInit */

  18.   /* USER CODE END SysInit */

  19.   /* Initialize all configured peripherals */
  20.   MX_GPIO_Init();

  21.   /* USER CODE BEGIN 2 */

  22.   /* USER CODE END 2 */

  23.   /* Infinite loop */
  24.   /* USER CODE BEGIN WHILE */
  25.         LCD_INIT();
  26.         DHT11_Init();

  27.   while(1)
  28.   {
  29.                 /**********功能1:显示温湿度数据******************/
  30.                 DHT11_Read_Data(&temp,&humi);//读取DHT11的温湿度数据
  31.                 sprintf((char *)buff,"%.2d  %.2d",temp,humi);
  32.                 LCD_WRITE_StrDATA(buff,0,0);


  33.     /* USER CODE BEGIN 3 */
  34.   }
  35.   /* USER CODE END 3 */
  36. }
复制代码

      DHT11.c

  1. //从DHT11读取一次数据
  2. //temp:温度值(范围:0~50°)
  3. //humi:湿度值(范围:20%~90%)
  4. //返回值:0,正常;1,读取失败
  5. unsigned char DHT11_Read_Data(unsigned char *temp,unsigned char *humi)
  6. {
  7.          unsigned char buf[5];
  8.         unsigned char i;
  9.         DHT11_Rst();
  10.         if(DHT11_Check()==0)
  11.         {
  12.                 //HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
  13.                 for(i=0;i<5;i++)//读取40位数据
  14.                 {
  15.                         buf=DHT11_Read_Byte();
  16.                 }
  17.                 if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
  18.                 {
  19.                         *humi=buf[0];
  20.                         *temp=buf[2];
  21.                 }
  22.         }else return 1;
  23.         return 0;
  24. }
复制代码


作者:jxjajl  bilibili


收藏 评论0 发布时间:2022-11-15 23:23

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版