该驱动基于STM32CubeMX进行设计:使用硬件IIC
外设供电5V,且3.3V工作不正常。
aht10.c文件:
#include "stm32f4xx_hal.h"
#include "aht10.h"
#include "main.h"
extern I2C_HandleTypeDef hi2c1;
void AHT10_Init(void)
{
//uint8_t Read[]={0xac,0x33,0x00};
uint8_t Init[]={0xe1,0x08,0x00};
uint8_t Soft_ReSet[]={0xba};
HAL_I2C_Master_Transmit(&hi2c1,0x70,Init,3,0x00ff);
HAL_I2C_Master_Transmit(&hi2c1,0x70,Soft_ReSet,1,0x00ff);
}
float Calculate_RH(uint8_t *RH_Data)
{
uint8_t Data[]={*(RH_Data+1),*(RH_Data+2),*(RH_Data+3)};
uint32_t RH_Data32=0;
Data[2]=Data[2]&0xf0;
RH_Data32=Data[0]<<12|Data[1]<<4|Data[2]>>4;
RH_Data32=RH_Data32*1.0/(2^20)*100;
return RH_Data32;
}
float CalculateTemp(uint8_t *TempData)
{
uint8_t Data[]={*(TempData+3),*(TempData+4),*(TempData+5)};
uint32_t Data32=0;
Data[0]=Data[0]&0x0f;
Data32=Data[0]<<16|Data[1]<<8|Data[2];
Data32=(Data32/(2^20))*200-50;
return Data32;
}
void AHT10_getRH_Temp(uint8_t *Data)
{
uint8_t Read[]={0xac,0x33,0x00};
HAL_I2C_Master_Transmit(&hi2c1,0x70,Read,3,0x00ff);
HAL_Delay(70);
HAL_I2C_Master_Receive_DMA(&hi2c1,0x71,Data,10);
//Device_ReadData(0x71,Data,6);
}
aht0.h文件
//#include "stm32f1xx_hal.h"
#include "stm32f4xx_hal.h"
//#include "i2c.h"
float Calculate_RH(uint8_t *RH_Data);
float CalculateTemp(uint8_t *Temp_Data);
void AHT10_Init(void);
void AHT10_getRH_Temp(uint8_t *Data);
工作正常。