STM32硬件IIC驱动SHT35

1、STM32CubeMX配置硬件IIC。

sht3x.c

#define __GLOBAL_SHT3X

#include "sht3x.h"

uint8_t	SHT30_Send_Cmd(uint16_t cmd)
{
  uint8_t cmd_buffer[2];
  cmd_buffer[0] = cmd >> 8;
  cmd_buffer[1] = cmd;
  return HAL_I2C_Master_Transmit(&hi2c1, SHT30_ADDR_WRITE, (uint8_t*)cmd_buffer, 2, 0xFFFF);
}

//SHT35初始化;0-成功,其它-失败;
uint8_t SHT3X_Init(void)
{
  return SHT30_Send_Cmd(SOFT_RESET_CMD);
}
/**
 * @brief	从SHT30读取一次数据
 * @param	dat —— 存储读取数据的地址(6个字节数组)
 * @retval	成功 —— 返回HAL_OK
*/
uint8_t SHT30_Read_Dat(uint8_t* dat)
{
  SHT30_Send_Cmd(MEDIUM_ENABLED_CMD);
  return HAL_I2C_Master_Receive(&hi2c1, SHT30_ADDR_READ, dat, 6, 0xFFFF);
}

//主程序定时调用
//读取  Measurement Results
void SHT3x_Read(void)
{
  uint16_t temp=0,hum=0;
  uint8_t SHT3X_Value[6];
  //Measurement Commands for Single Shot Data Acquisition Mode
  SHT30_Read_Dat(SHT3X_Value);
  temp |= SHT3X_Value[0] << 8;
  temp |= SHT3X_Value[1];
  
  hum |= SHT3X_Value[3] << 8;
  hum |= SHT3X_Value[4];
  
  // 计算温度和湿度
  Sht35_Data.temp = -45.0 + 175.0 * temp/ 65535;
  Sht35_Data.humidity = 100.0 * hum/ 65535;
}

sht3x.h

#ifndef __SHT3X_H
#define __SHT3X_H

#ifdef __GLOBAL_SHT3X
#define EXT_SHT3X
#else
#define EXT_SHT3X extern
#endif

#include "i2c.h"

/* ADDR Pin Conect to VSS */
#define	SHT30_ADDR_WRITE        0x44<<1         //10001000
#define	SHT30_ADDR_READ         (0x44<<1)+1     //10001011

typedef enum
{
  /* 软件复位命令 */

  SOFT_RESET_CMD = 0x30A2,	
  /*
  单次测量模式
  命名格式:Repeatability_CS_CMD
  CS: Clock stretching
  */
  HIGH_ENABLED_CMD    = 0x2C06,
  MEDIUM_ENABLED_CMD  = 0x2C0D,
  LOW_ENABLED_CMD     = 0x2C10,
  HIGH_DISABLED_CMD   = 0x2400,
  MEDIUM_DISABLED_CMD = 0x240B,
  LOW_DISABLED_CMD    = 0x2416,
  /*
  周期测量模式
  命名格式:Repeatability_MPS_CMD
  MPS:measurement per second
  */
  HIGH_0_5_CMD   = 0x2032,
  MEDIUM_0_5_CMD = 0x2024,
  LOW_0_5_CMD    = 0x202F,
  HIGH_1_CMD     = 0x2130,
  MEDIUM_1_CMD   = 0x2126,
  LOW_1_CMD      = 0x212D,
  HIGH_2_CMD     = 0x2236,
  MEDIUM_2_CMD   = 0x2220,
  LOW_2_CMD      = 0x222B,
  HIGH_4_CMD     = 0x2334,
  MEDIUM_4_CMD   = 0x2322,
  LOW_4_CMD      = 0x2329,
  HIGH_10_CMD    = 0x2737,
  MEDIUM_10_CMD  = 0x2721,
  LOW_10_CMD     = 0x272A,
  /* 周期测量模式读取数据命令 */
  READOUT_FOR_PERIODIC_MODE = 0xE000,
}SHT30_CMD;

typedef struct
{
  float temp;
  float humidity;
}SHT3X_DATA;
EXT_SHT3X SHT3X_DATA Sht35_Data;

uint8_t SHT3X_Init(void);
boolean SHT3x_Read(void);
#endif

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值