瑞萨单片机论坛
直播中

陈小聪

9年用户 143经验值
擅长:可编程逻辑 电源/新能源 模拟技术 测量仪表 EMC/EMI设计 嵌入式技术 制造/封装 存储技术 接口/总线/驱动 处理器/DSP 光电显示 控制/MCU EDA/IC设计 RF/无线 MEMS/传感技术
私信 关注

【RA4M2设计挑战赛】2、H3003温湿度传感器使用

【RA4M2设计挑战赛】2、H3003温湿度传感器使用

H3003简介

HS3003是一个高度精确、完全校准的相对湿度和温度传感器。MEMS传感器具有专有的传感器级保护功能,确保了高可靠性和长期稳定性。集成校准和温度补偿逻辑通过标准I2C输出提供完全校正的RH和温度值。不需要用户校准输出数据。具有高精度、快速的测量响应时间和长期的稳定性。

1、配置时钟

因为开发板使用的外部晶振时钟为12Mhz,因此需要对工程的芯片时钟进行配置(默认的是24Mhz)

1.png

2、配置硬件I2C

配置功能引脚

2.png

使用FSP框架驱动I2C

3.png

4.png

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

6.png

5.png

(1)打开SensorThread_entry.c,编写读取温湿度代码

#include "SensorThread.h"
#include "debug_log.h"

#include "stdio.h"
/* SensorThread entry function */
/* pvParameters contains TaskHandle_t */

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);
    /* TODO: add your own code here */
    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);//读取HS3001数据
        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));
    }
}

结果

7.png

更多回帖

发帖
×
20
完善资料,
赚取积分