【STM32CubeIDE】硬件IIC+AHT20使用

前言

本文主要介绍STM32CubeIDE配置硬件IIC驱动AHT20模块,实现温湿度读取并用串口打印显示在上位机;

image-20240602173251921

软件平台:STM32CubeIDE+HAL库

硬件环境:STM32F103ZET6(正点原子战舰V3)+AHT20模块

AHT20简介

AHT20是一个温湿度传感器,又叫DHT20,是DHT11的全新升级产品,配置了专用的 ASIC 传感器芯片、高性能的半导体硅基电容式湿度传感器和一个标准的片上温度传感器,并使用了标准 I2C 数据输出信号格式。相对于DHT11其在高温高湿环境下的性能更稳定;同时,产品的精度、响应时间、测量范围都得到了大幅的提升。

软件程序

CubeIDE设置

  1. 新建CubeIDE工程,可以参考往期文章,此处不做过多赘述

  2. 串口设置

    image-20240602234429944

  3. 硬件IIC设置

    image-20240602234341089

  4. 为每个外设生成.h和.c文件

    做这步只是为了规范点,并非必需操作,只要能正常调用,代码放在任意文件都可以;

    image-20240602233013503

AHT20驱动

工程添加AHT20.h和AHT20.c文件

AHT20.h

#include "i2c.h"
#define AHT20_ADDRESS 0x70

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

AHT20.c

#include "AHT20.h"
void AHT20_Init(){
	 uint8_t readBuffer;
	 HAL_Delay(40);
	 HAL_I2C_Master_Receive(&hi2c1, AHT20_ADDRESS, &readBuffer, 1, HAL_MAX_DELAY);
	 if ((readBuffer & 0x08) == 0x00){
		 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];

	 HAL_I2C_Master_Transmit(&hi2c1, AHT20_ADDRESS, sendBuffer, 3, HAL_MAX_DELAY);
	 HAL_Delay(75);
	 HAL_I2C_Master_Receive(&hi2c1, AHT20_ADDRESS, readBuffer, 6, HAL_MAX_DELAY);

	 if((readBuffer[0] & 0x80) == 0x00){
		 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);

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

main函数

main文件#include头文件AHT20.h

#include "AHT20.h"

main函数while循环之前添加AHT20初始化和必要的定义

  AHT20_Init();
  float temperature,humidity;
  char message[50];

main函数while循环中添加读取AHT20函数和串口发送函数

AHT20_Read(&temperature, &humidity);									//读取数据
sprintf(message,"温度:%.1f °C, 湿度:%.1f %%\r\n",temperature, humidity); //组合字符串
HAL_UART_Transmit(&huart4, message, strlen(message),1000);				//串口发送
HAL_Delay(500);															//延时

如果有sprintf有报错,Properties里勾选上这两个设置支持浮点型

image-20240522225325148

硬件接线

接线跟上边CubeIDE初始化设置的情况一样,不清楚可以退回去看可视化视图

image-20240602235540872

AHT20模块比较脆弱,上电前务必确认接线正确;

AHT20STM32
VIN3.3V/5V
GNDGND
SCLPB6
SDAPB7

串口接线:

CH340STM32
3.3V/
GNDGND
TXPC11
RXPC10

烧录程序上电开机,上位机打开串口工具接收温湿度数据,触摸AHT20温湿度发生变化,实验成功;

DEBUG

若温湿度读取失败或返回异常,检查接线情况,检查驱动代码有没有敲错,如果都没问题,换个AHT20模块确认是否模块故障;

工程源码

链接:https://pan.baidu.com/s/1F-L00nXIS_HaT4W0Fi3ycw
提取码:1023

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值