目录

一、简单介绍

典型应用

原理图

二、cubemx配置

三、驱动开发

写入

单字节写

多字节写

读取

单字节读

多字节读

四、驱动附录

HDC2080.h

HDC2080.c


一、工程链接

STM32芯片HAL库驱动HDC2080资源-CSDN下载

二、简单介绍

HDC2080是TI的一款低功耗温湿度数字传感器。

温度采集精度典型值是0.2摄氏度,湿度为2%。

低功耗,供电电压为1.62~3.6V,适合纽扣电池供电的场景。

可以用在物联网及智能家居上。

睡眠功耗为50nA,适合电池供电的场景。芯片有2种测量模式——触发模式自动模式。

触发模式下,芯片接收I2C指令后转换,转换完毕就继续睡眠。

自动模式下,芯片周期性转换,有7种周期可以配置。

就是下面这7种:

芯片上电后默认进睡眠模式,等待I2C总线上出现配置转换时间/触发转换/读写指令。

如果接收到转换指令,就开始转换,可以监测DRDY引脚的电平作来判断是否转换完毕。转换完毕就又睡眠。

当环境湿度太大,以至于传感器表面有水汽凝结怎么办?芯片贴心地准备了一个加热器,可以加热芯片使水汽蒸发。

加热过程电流较大,谨慎使用。

只有一个引脚对外输出中断状态,但是有4种中断:过温低温,过湿过干。

采取的是中断优先级,四个都开启则只响应过温,按顺序类推。

典型应用

建议在VDD和GND直接增加0.1uF电容,PCB上建议去除HDC2080底下的铜皮,并且在芯片周围开槽来实现热隔离以增强性能。

最好使用免洗焊接,尽量不要返工哦。

原理图

HDC2080的ADDR引脚用于配置HDC2080的I2C总线地址。

DRDY/INT引脚有数据准备和中断的功能,是开漏输出的。

笔者使用STM32L051K8U6单片机作为MCU,是一款低功耗MCU。

三、cubemx配置

开启调试口、系统唤醒PA0

开启I2C

时钟使用内部HSI,16MHz

配置工程路径等后即可生成。

四、驱动开发

芯片使用的是I2C可以单字节读写,也可以多字节读写。

写入

单字节写入和多字节写入比较类似,取绝于发送地址后接着发送多少字节。

单字节写

/* auto measure at 5 hz and set DRDY */
   HDC2080_WR_Reg(0x0E, 0x77);

多字节写

一个LSB约为0.644摄氏度,设置低门槛10度,高门槛28度,则寄存器值分别是78和106。

/* configure temperature threhold */
   HDC2080_WR_Regs(0x0A, tempTh, 2);

读取

读取寄存器内容,需要先发送一个寄存器地址告诉芯片要从哪里开始读。

单字节读

HDC2080_RD_Reg(0xFF, &HDC2080_Reg.id1_high);

多字节读

/* read all registers value */
   HDC2080_RD_Regs(0x00, &HDC2080_Reg.temp_low, 16);

主循环周期读取温湿度值,在调试界面显示出来。

当芯片温度高于28度时DRDY引脚拉高,低于28度时自动恢复低电平

五、驱动附录

HDC2080.h

#ifndef HDC2080_H
#define HDC2080_H


#include "main.h"
#include "stdint.h"
#include "i2c.h"


#define HDC2080_I2C hi2c1
#define HDC2080_ADDR 0x80


typedef struct
{
   uint8_t temp_low;
   uint8_t temp_high;
   uint8_t humid_low;
   uint8_t humid_high;
   uint8_t interrupt;
   uint8_t temp_max;
   uint8_t humid_max;
   uint8_t interrupt_enable;
   uint8_t temp_offset;
   uint8_t humid_offset;
   uint8_t temp_th_low;
   uint8_t temp_th_high;
   uint8_t rh_th_low;
   uint8_t rh_th_high;
   uint8_t reset;
   uint8_t config;
   uint8_t id0_low;
   uint8_t id0_high;
   uint8_t id1_low;
   uint8_t id1_high;
}HDC2080_RegType;



uint8_t HDC2080_Init();
void HDC2080_Trigger();
void HDC2080_Reset();
void HDC2080_RD_Temperature(float* temp);
void HDC2080_RD_Humidity(float* humid);

#endif

HDC2080.c

#include "HDC2080.h"

HDC2080_RegType HDC2080_Reg;

uint8_t tempTh[2] = {78, 106};

void HDC2080_RD_Reg(uint8_t addr, uint8_t* dat)
{
   HAL_I2C_Mem_Read(&HDC2080_I2C, HDC2080_ADDR, addr, 1, dat, 1, 0xFFFF);
}

void HDC2080_WR_Reg(uint8_t addr, uint8_t val)
{
   HAL_I2C_Mem_Write(&HDC2080_I2C, HDC2080_ADDR, addr, 1,  &val, 1, 0x100);
}

void HDC2080_RD_Regs(uint8_t addr, uint8_t* dat, uint8_t len)
{
   HAL_I2C_Mem_Read(&HDC2080_I2C, HDC2080_ADDR, addr, 1, dat, len, 0xFFFF);
}

void HDC2080_WR_Regs(uint8_t addr, uint8_t* val, uint8_t len)
{
   HAL_I2C_Mem_Write(&HDC2080_I2C, HDC2080_ADDR, addr, 1,  val, len, 0x100);
}

void HDC2080_Reset()
{
   HDC2080_WR_Reg(0xE, 0x80);
}

void HDC2080_Trigger()
{
   HDC2080_WR_Reg(0xF, 1);
}

void HDC2080_Cfg()
{
   /* RESET */
   HDC2080_Reset();

   HAL_Delay(5);

   /* enable temperature threhold interrupt */
   HDC2080_WR_Reg(0x07, 0x60);

   /* configure temperature threhold */
   HDC2080_WR_Regs(0x0A, tempTh, 2);
   
   /* auto measure at 5 hz and set DRDY */
   HDC2080_WR_Reg(0x0E, 0x77);

   /* read all registers value */
   HDC2080_RD_Regs(0x00, &HDC2080_Reg.temp_low, 16);

   /* read id values */
   HDC2080_RD_Regs(0xFC, &HDC2080_Reg.id0_low, 4);
}

uint8_t HDC2080_Init()
{
   uint8_t ret = 0;

   HDC2080_RD_Reg(0xFF, &HDC2080_Reg.id1_high);
   if (HDC2080_Reg.id1_high != 0x7)
   {
      ret = 1;
   }
   else
   {
      HDC2080_Cfg();
      HDC2080_Trigger();
   }

   return ret;
}


void HDC2080_RD_Temperature(float* temp)
{
   HDC2080_RD_Regs(0x00, &HDC2080_Reg.temp_low, 2);

   *temp = (float)(HDC2080_Reg.temp_low + HDC2080_Reg.temp_high * 256) / 65536.0f * 165.0f - 40.5f;
}

void HDC2080_RD_Humidity(float* humid)
{
   HDC2080_RD_Regs(0x02, &HDC2080_Reg.humid_low, 2);

   *humid = (float)(HDC2080_Reg.humid_low + HDC2080_Reg.humid_high * 256) / 65536.0f * 100.0f;
}
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐