【RA4M2设计挑战赛】2、H3003温湿度传感器使用
H3003简介
HS3003是一个高度精确、完全校准的相对湿度和温度传感器。MEMS传感器具有专有的传感器级保护功能,确保了高可靠性和长期稳定性。集成校准和温度补偿逻辑通过标准I2C输出提供完全校正的RH和温度值。不需要用户校准输出数据。具有高精度、快速的测量响应时间和长期的稳定性。
1、配置时钟
因为开发板使用的外部晶振时钟为12Mhz,因此需要对工程的芯片时钟进行配置(默认的是24Mhz)

2、配置硬件I2C
配置功能引脚

使用FSP框架驱动I2C


3、新建FreeRTOS线程读取温湿度


(1)打开SensorThread_entry.c,编写读取温湿度代码
#include "SensorThread.h"
#include "debug_log.h"
#include "stdio.h"
void H3003I2C3CallBack(i2c_master_callback_args_t *p_args)
{
}
void SensorThread_entry(void *pvParameters)
{
float RH = 0.0, TEMP = 0.0;
fsp_err_t err;
uint8_t buf[4] = { 0 };
char data_str[128]={0};
FSP_PARAMETER_NOT_USED(pvParameters);
R_SCI_I2C_Open (&H3003_I2C3_ctrl, &H3003_I2C3_cfg);
while (1)
{
buf[0] = buf[1] = buf[2] = buf[3] = 0;
R_SCI_I2C_Write (&H3003_I2C3_ctrl, buf, 4, false);
vTaskDelay (pdMS_TO_TICKS(50));
err = R_SCI_I2C_Read (&H3003_I2C3_ctrl, buf, 4, true);
vTaskDelay (pdMS_TO_TICKS(200));
if(err == FSP_SUCCESS)
{
RH = (float) (((short) (buf[0] & 0x3f) << 8) + buf[1]) / 16383 * 100;
TEMP = (float) ((((short) buf[2] << 8) + buf[3]) >> 2) / 16383 * 165 - 40;
sprintf(data_str,"temp:%0.2f rh:%0.2f\n",TEMP, RH);
DebugLog("%s\n",data_str);
}else
{
DebugLog("R_SCI_I2C_Read error\n");
}
vTaskDelay (pdMS_TO_TICKS(1000));
}
}
结果
