一、温湿度传感器AHT20–IIC通讯轮询模式
1、创建新项目,芯片选用STM32F103C8T6,项目名为iic。
2、根据AHT20所连接的引脚,开启IIC1外设。

3、项目管理,为每个外设生成一个.c、.h文件,这样就可以include头文件,拿到huart1或者hi2c这类外设的操作句柄了,之后保存生成代码。

4、创建自己的.c、.h文件
- Core→Inc右键→New→Hreader File,命名aht20.h
- Core→src右键→New→Source File,命名aht20.c
5、代码部分

- 根据数据手册的传感器读取流程1,可以写出AHT20的初始化函数。
#define AHT20_ADDRESS 0X70
void AHT20_Init(void) {
uint8_t readBuffer;
HAL_Delay(40);
HAL_I2C_Master_Transmit(&hi2c1, AHT20_ADDRESS, &readBuffer, 1, HAL_MAX_DELAY);
if ((readBuffer & 0x08) == 0x00) {
uint8_t sendBuffer[3] = {
0xBE, 0x08, 0x00};
HAL_I2C_Master_Receive(&hi2c1, AHT20_ADDRESS, sendBuffer, 3, HAL_MAX_DELAY);
}
}
- 根据数据手册的传感器读取流程2跟3,还有数据表可以写出AHT20的读取测量数据的函数。

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) + (