首页 > 其他分享 >10.STM32F103C8T6+CUBEMX+AHT20

10.STM32F103C8T6+CUBEMX+AHT20

时间:2024-09-23 17:53:18浏览次数:3  
标签:10 HAL DELAY uint8 readBuffer AHT20 CUBEMX I2C

        记录学习过程,看的是b站keysking的视频

一、配置cubemx

1、打开I2C1,设置模式

2、打开串口2

3、生成文件

二、写代码

1、新建.c .h文件,注意要在对应的文件夹下

2、对照AHT20手册进行写

        把文字对应的注释在后面了,注意HAL_I2C_Master_Transmit函数里的sendbuffer数组前面不用取地址符

void AHT20_Init()
{
  uint8_t readBuffer;
  HAL_Delay(40);			//上电后要等待40ms
  HAL_I2C_Master_Receive(&hi2c1, AHT20_ADDRESS, &readBuffer, 1, HAL_MAX_DELAY);		//读取温湿度值
  if ((readBuffer & 0x08) == 0x00)		//判断校准使能位Bit[3]是否为 1
  {
    uint8_t sendBuffer[3] = {0xBE, 0x08, 0x00};
    HAL_I2C_Master_Transmit(&hi2c1, AHT20_ADDRESS, sendBuffer, 3, HAL_MAX_DELAY);		//发送数组
  }
}

void AHT20_Read(float *Temperature, float *Humidity)
{
  uint8_t sendBuffer[3] = {0xAC, 0x33, 0x00};
  uint8_t readBuffer[6] = {0};

  HAL_I2C_Master_Transmit(&hi2c1, AHT20_ADDRESS, sendBuffer, 3, HAL_MAX_DELAY);		//直接发送触发测量命令
  HAL_Delay(80);			//等待80ms待测量完成
  HAL_I2C_Master_Receive(&hi2c1, AHT20_ADDRESS, readBuffer, 6, HAL_MAX_DELAY);		//读取

  if ((readBuffer[0] & 0x80) == 0x00)			//判断读取状态字Bit[7]是否为0
  {
    uint32_t data = 0;	
		
    data = ((uint32_t)readBuffer[3] >> 4) + ((uint32_t)readBuffer[2] << 4) + ((uint32_t)readBuffer[1] << 12);		//拼接数据
    *Humidity = data * 100.0f / (1 << 20);			//注意%以及float型

    data = (((uint32_t)readBuffer[3] & 0x0F) << 16) + ((uint32_t)readBuffer[4] << 8) + (uint32_t)readBuffer[5];	
    *Temperature = data * 200.0f / (1 << 20) - 50;
  }
}

       3、main

/* USER CODE BEGIN Includes */
#include "AHT20.h"
#include <stdio.h>
#include <string.h>
/* USER CODE END Includes */
  /* USER CODE BEGIN 2 */
	AHT20_Init();
	float temperature, humidity; 
	char message[50];           
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		AHT20_Read(&temperature, &humidity);
		sprintf(message, "Temperature: %.1f,Humidity: %.1f %%\r\n", temperature, humidity);		
		HAL_UART_Transmit(&huart2, (uint8_t *)message, strlen(message), HAL_MAX_DELAY);
		HAL_Delay(1000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

        最后,注意串口波特率和设置的要一样,就可以成功啦!
波特律动 串口助手 (keysking.com)icon-default.png?t=O83Ahttps://serial.keysking.com/

下面附有AHT20的全部代码:

AHT20.c


#include "AHT20.h"

/***************手册第八面5.4****************/

#define AHT20_ADDRESS 0x70
uint8_t readBuffer[6] = {0};

void AHT20_Init()
{
  uint8_t readBuffer;
  HAL_Delay(40);			//上电后要等待40ms
  HAL_I2C_Master_Receive(&hi2c1, AHT20_ADDRESS, &readBuffer, 1, HAL_MAX_DELAY);		//读取温湿度值
  if ((readBuffer & 0x08) == 0x00)		//判断校准使能位Bit[3]是否为0
  {
    uint8_t sendBuffer[3] = {0xBE, 0x08, 0x00};
    HAL_I2C_Master_Transmit(&hi2c1, AHT20_ADDRESS, sendBuffer, 3, HAL_MAX_DELAY);		//发送数组
  }
}

void AHT20_Read(float *Temperature, float *Humidity)
{
  uint8_t sendBuffer[3] = {0xAC, 0x33, 0x00};
  uint8_t readBuffer[6] = {0};

  HAL_I2C_Master_Transmit(&hi2c1, AHT20_ADDRESS, sendBuffer, 3, HAL_MAX_DELAY);		//直接发送触发测量命令
  HAL_Delay(80);			//等待80ms待测量完成
  HAL_I2C_Master_Receive(&hi2c1, AHT20_ADDRESS, readBuffer, 6, HAL_MAX_DELAY);		//读取

  if ((readBuffer[0] & 0x80) == 0x00)			//判断读取状态字Bit[7]是否为0
  {
    uint32_t data = 0;	
		
    data = ((uint32_t)readBuffer[3] >> 4) + ((uint32_t)readBuffer[2] << 4) + ((uint32_t)readBuffer[1] << 12);		//拼接数据
    *Humidity = data * 100.0f / (1 << 20);			//注意%以及float型

    data = (((uint32_t)readBuffer[3] & 0x0F) << 16) + ((uint32_t)readBuffer[4] << 8) + (uint32_t)readBuffer[5];	
    *Temperature = data * 200.0f / (1 << 20) - 50;
  }
}

AHT20.h

#ifndef __AHT20_H
#define __AHT20_H

#include "I2C.h"
#include "main.h"

void AHT20_Init();
void AHT20_Read(float *Temperature, float *Humidity);
#endif

标签:10,HAL,DELAY,uint8,readBuffer,AHT20,CUBEMX,I2C
From: https://blog.csdn.net/2301_80727672/article/details/142422697

相关文章

  • 【PAT_Python解】1026 程序运行时间
    原题链接:PTA|程序设计类实验辅助教学平台参考资料:1、【Python】1026程序运行时间(15分)_python运行15分钟-CSDN博客2、Python实现PAT乙级1026程序运行时间_pat1026python-CSDN博客3、python3小数位的四舍五入(用两种方法解决round遇5不进)_python_脚本之家Tips......
  • 【PAT_Python解】1025 反转链表
    原题链接:PTA|程序设计类实验辅助教学平台参考资料:1025反转链表(25分)PAT乙级C++/Python版_1025反转链表分数25作者chen,yue单位浙江大学给定一个常数k以及一个-CSDN博客【Python数据结构】反转链表的方法_反转链表python-CSDN博客Python基础算法——反......
  • Blender动画云渲染指南:1分钟内掌握,渲染速度提升10倍!
    在数字创作领域,Blender以其开源特性和强大功能成为了3D艺术家的首选工具。然而,随着项目复杂性的增加,Blender的渲染时间也相应延长,这对设计师和动画制作人员来说是一个不小的挑战。幸运的是,云渲染技术的出现为这一问题提供了解决方案。为什么Blender需要云染?Blender的渲染过程可......
  • 10分钟速成golang
    Go拥有命令式语言的静态类型,编译很快,执行也很快,同时加入了对于目前多核CPU的并发计算支持,也有相应的特性来实现大规模编程。//单行注释/*多行注释*///导入包的子句在每个源文件的开头。//main比较特殊,它用来声明可执行文件,而不是一个库。packagemain//Import......
  • 告别繁琐!这10个项目管理软件让你的项目进度一目了然
    市面上主流的10款团队项目管理系统推荐:PingCode、Worktile、Tower、Trello、Asana、Monday.com、Basecamp、Smartsheet、Tapd、飞书。在选择项目管理系统时,许多小型企业和初创公司常常面临着难以决策的痛点:如何找到既能提高团队效率又易于操作的工具呢?一个合适的简易项目管理......
  • 【字节跳动面试100题精讲】MySQL 索引文件写入磁盘的完整过程
    欢迎您的阅读,接下来我将为您一步步分析:MySQL索引文件写入磁盘的完整过程。让我们通过多个角度来深入探讨这个问题。MySQL索引文件写入磁盘的完整过程关键词:MySQL、索引、B+树、缓冲池、脏页、检查点、双写缓冲、文件系统缓存、磁盘I/O文章目录MySQL索引文件写入磁......
  • 【字节跳动面试100题精讲】开篇语
    【字节跳动面试100题精讲】开篇语关键词:字节跳动、面试题、算法、系统设计、编程语言、技术面试、职业发展1.背景介绍字节跳动作为中国领先的科技公司之一,其面试题以难度高、覆盖面广而闻名。本文将深入分析100道精选面试题,帮助求职者更好地准备面试。字节跳动公司......
  • MGMT42110: Marketing Analytics
    MGMT42110:MarketingAnalyticsHomework2(7points)Instructions1. Download“42110_hw2_template.R”andfillinthecommandwherevernecessarytocompletethehomework.2. Copyandpasteyourcodedirectlyintothisdocumentwheneverasked.Youdonotne......
  • Rocksdb 7.0.0 ~ 7.10.2 重要版本特性
    7.9.0(2022-11-21)现在可以提供对宽列数据模型的基本支持。可以使用API存储宽列实体PutEntity,并使用GetEntity和迭代器的新columnsAPI进行检索。为了兼容,经典APIGet和MultiGet以及迭代器的valueAPI返回宽列实体的匿名默认列的值;此外,GetEntity和迭代器的APIcolumns以仅具......
  • 2024十大网站设计公司TOP10,快来看看这十家网站设计公司吧
    可以参考以下以下几家网站设计公司,我这段时间也了解了很多的网站建设步骤和冷知识,对一些网站设计公司的质量和专业水准也算有一点个人见解:1.极简慕枫PithyMfweb这家公司从业多年,有着丰厚的行业经验和专业知识,一直都致力于为每一位客户提供既独特又符合其品牌形象的网站设计。......