STM32 AHT10温湿度传感器
时间: 2025-01-14 20:04:41 浏览: 18
STM32 使用 AHT10 温湿度传感器
配置 CubeMX
为了使STM32能够与AHT10温湿度传感器正常工作,在CubeMX中需配置I2C接口。选择合适的引脚作为SCL和SDA,并启用相应的外设时钟[^1]。
// I2C初始化函数,由CubeMX自动生成
HAL_StatusTypeDef MX_I2C1_Init(I2C_HandleTypeDef* hi2c)
{
/* USER CODE BEGIN I2C1_Init 0 */
/* USER CODE END I2C1_Init 0 */
/* USER CODE BEGIN I2C1_Init 1 */
/* USER CODE END I2C1_Init 1 */
hi2c->Instance = I2C1;
hi2c->Init.Timing = 0x20909CEC;
hi2c->Init.OwnAddress1 = 0;
hi2c->Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c->Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c->Init.OwnAddress2 = 0;
hi2c->Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c->Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(hi2c) != HAL_OK)
{
Error_Handler();
}
/** Configure Analogue filter
*/
if (HAL_I2CEx_ConfigAnalogFilter(hi2c, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
{
Error_Handler();
}
/** Configure Digital filter
*/
if (HAL_I2CEx_ConfigDigitalFilter(hi2c, 0) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN I2C1_Init 2 */
/* USER CODE END I2C1_Init 2 */
}
主要代码分析
当准备就绪后,可以编写用于读取温度和湿度值的主要程序逻辑。这通常涉及到向设备发送命令并解析返回的数据包。对于AHT10来说,首先要触发一次测量操作,之后再获取结果:
#include "main.h"
#define AHT10_ADDR_WRITE 0x80 //写地址
#define AHT10_ADDR_READ 0x81 //读地址
#define CMD_INIT {0xE1, 0x08, 0x00} // 初始化指令
#define CMD_MEASURE {0xAC, 0x33, 0x00} // 测量指令
uint8_t aht10_init(void){
uint8_t cmd[3];
memcpy(cmd,CMD_INIT,sizeof(CMD_INIT));
HAL_Delay(1);
return HAL_I2C_Master_Transmit(&hi2c1,AHT10_ADDR_WRITE,cmd,3,100)==HAL_OK?0:1;
}
float get_temperature_humidity(float *temperature,float *humidity){
uint8_t data[6];
float t,h;
// 发送启动测量命令
HAL_I2C_Master_Transmit(&hi2c1,AHT10_ADDR_WRITE,CMD_MEASURE,3,100);
// 延迟等待转换完成
HAL_Delay(80);
// 接收数据
HAL_I2C_Master_Receive(&hi2c1,AHT10_ADDR_READ,data,6,100);
h=((data[1]<<16)|(data[2]<<8)|data[3])>>4;
t=(((data[3]&0xF)<<24)|(data[4]<<16)|(data[5]<<8))>>4;
*humidity=h/1048576.0f*100.0f;
*temperature=t/1048576.0f*200.0f-50.0f;
return (*temperature,*humidity);
}
上述代码实现了基本的功能:aht10_init()
负责初始化传感器;而get_temperature_humidity()
则用来执行实际的测量任务并将得到的结果转化为易于理解的形式[^3]。