一、AHT10
二、STM32CubeMX配置
三、代码移植
创建AHT10.h
#ifndef _AHT10_H
#define _AHT10_H
#include "i2c.h"
//定义AHT10地址
#define AHT10_ADDRESS 0x70
#define AHT10_Write_ADDRESS 0x70
#define AHT10_Read_ADDRESS 0x71
//定义AHT10命令
#define AHT10_Init_com 0xE1 // 1110 0001 ³õʼ»¯ÃüÁî
#define AHT10_SoftReset_com 0xBA // 1011 1010 Èí¸´Î»ÃüÁî
#define AHT10_TrigeMea_com 0xAC // 1010 1100 ÎÂʪ¶È²âÁ¿ÃüÁî
/*温湿度结构体*/
typedef struct{
float humi;
float temp;
}ahtData_t;
void AHT10_Init(void);
void AHT10_Read_predata(ahtData_t *ahtData); //¶ÁÈ¡ÎÂʪ¶È
#endif
创建AHT10.c
#include "AHT10.h"
/**
* @brief AHT10初始化
* @param void
* @retval void
*/
void AHT10_Init(void)
{
uint8_t senddata;
senddata = AHT10_Init_com;
HAL_I2C_Master_Transmit(&hi2c2, AHT10_Write_ADDRESS, &senddata, 1, 0xFFFF);
}
/**
* @brief AHT10软复位
* @param void
* @retval void
*/
void AHT10_SoftReset(void)
{
uint8_t senddata;
senddata = AHT10_SoftReset_com;
HAL_I2C_Master_Transmit(&hi2c2, AHT10_Write_ADDRESS, &senddata, 1, 0xFFFF);
HAL_Delay(20);
}
/**
* @brief AHT10触发测量
* @param void
* @retval void
*/
void AHT10_TrigeMea(void)
{
uint8_t senddata[3];
senddata[0] = AHT10_TrigeMea_com;
senddata[1] = 0x33; // DATA0
senddata[2] = 0x00; // DATA1
HAL_I2C_Master_Transmit(&hi2c2, AHT10_Write_ADDRESS, senddata, 3, 0xFFFF);
HAL_Delay(80);
}
/**
* @brief AHT10 读取 温湿度
* @param ahtData->temp:温度
* ahtData->humi:湿度
* @retval
*/
void AHT10_Read_predata(ahtData_t *ahtData)
{
AHT10_TrigeMea();
HAL_Delay(75);
static uint32_t humi, temp;
uint8_t readdata[6];
// uint8_t BusyIndication, CalEnable;
HAL_I2C_Master_Receive(&hi2c2, AHT10_Read_ADDRESS, readdata, 6, 0xFFFF);
// BusyIndication = (readdata[0] >> 7) & 0x01; // 状态标志位
// CalEnable = (readdata[0] >> 3) & 0x01; // 校准标志位
// if (CalEnable == 0)
// {
// AHT10_SoftReset();
// }
// if (BusyIndication == 0)
// {
humi = (readdata[1] << 12) | (readdata[2] << 4) | (readdata[3] >> 4);
temp = ((readdata[3] & 0x0F) << 16) | (readdata[4] << 8) | (readdata[5]);
ahtData->humi = ((humi * 100.0) / 1024/1024);
ahtData->temp = ((float)temp / 1024/1024) * 200 - 50;
// return 0;
// }
// return 1;
}
四、串口调试
main.c添加或修改
/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "AHT10.h"
/* USER CODE END Includes */ //添加头文件
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_SPI1_Init();
MX_I2C2_Init();
MX_USART1_UART_Init();
MX_ADC1_Init();
while (1)
{
HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
/*AHT10*/
ahtData_t AhtData;
AHT10_Read_predata(&AhtData);
printf("温度:%d/n",(uint8_t)AhtData.temp);
printf("湿度:%d/n",(uint8_t)AhtData.humi);
HAL_Delay(100);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}