STM32硬件IIC驱动LPS22HB

  1、IIC配置

2、lps22hb.c


#include "lps22hb.h"

float lps22hb_temp,lps22hb_pressure;

extern I2C_HandleTypeDef hi2c1;
/* Functions -------------------------------------------------------------------------------*/
//读寄存器
static void LPS22_Mem_Read(uint8_t MemAddress,uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
{
  HAL_I2C_Mem_Read(&hi2c1, (LPS22HB_I2C_ADDR<<1) | 1, MemAddress , MemAddSize, pData, Size, 0xFF);
}

//写寄存器
static void LPS22_Mem_Write(uint8_t MemAddress,uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
{
  HAL_I2C_Mem_Write(&hi2c1, LPS22HB_I2C_ADDR<<1, MemAddress , MemAddSize, pData, Size, 0xFF);
}
/**
 *  @brief  LPS22HB_Init
 */
void LPS22HB_Init(void)
{
  uint8_t reg_temp = 0;

  //验证ID
  LPS22_Mem_Read(LPS22HB_WHO_AM_I , 1, &reg_temp, 1);
  if(reg_temp != LPS22HB_DEVICE_ID)
  {
    mSensor_Flag.LPS22HB_status = 2;    //验证ID失败,传感器异常
    return;
  }

  /* Normal mode (low-noise mode) */
  LPS22_Mem_Read(LPS22HB_RES_CONF,1,&reg_temp,1);
  reg_temp &= 0x02;
  reg_temp |= 0x00;
  LPS22_Mem_Write(LPS22HB_RES_CONF,1,&reg_temp,1);
  HAL_Delay(5);

  /* Control register 1 */
  reg_temp  = 0x00;
  reg_temp |= 0x20; // Output data rate, 10 Hz
  reg_temp |= 0x00; // Low-pass filter disabled
  reg_temp |= 0x02; // Block data update, enable
  LPS22_Mem_Write(LPS22HB_CTRL_REG1 ,1, &reg_temp,1);
  HAL_Delay(5);

  /* Control register 2 */
  LPS22_Mem_Read(LPS22HB_CTRL_REG2,1,&reg_temp,1);
  reg_temp &= 0xED;
  reg_temp |= 0x10;
  LPS22_Mem_Write(LPS22HB_CTRL_REG2,1,&reg_temp,1);
  HAL_Delay(5);
  
  mSensor_Flag.LPS22HB_status = 1;      //传感器正常
}

/**
 *  @brief  LPS22_GetRawData
 */
void LPS22HB_Get_Data(void)
{
  uint8_t data_buff[3];
  uint32_t data_tmp = 0;

  //读取气压数据
  LPS22_Mem_Read(LPS22HB_PRESS_OUT_XL , 1, data_buff, 3);
  
  data_tmp = data_buff[2] << 16;
  data_tmp |= data_buff[1] << 8;
  data_tmp |= data_buff[0];

  /* convert the 2's complement 24 bit to 2's complement 32 bit */
  if(data_tmp & 0x00800000)
  {
    data_tmp |= 0xFF000000;
  }
  lps22hb_pressure = (data_tmp>>12) * 0.1;
  //读取温度数据
  LPS22_Mem_Read(LPS22HB_TEMP_OUT_L,1,data_buff,2);
  data_tmp = data_buff[1] << 8;
  data_tmp |= data_buff[0];
  lps22hb_temp = data_tmp* 0.01;
}

/***************************** END OF FILE **************************/

3、lps22hb.h

#ifndef __LPS22HB_H
#define __LPS22HB_H

#include "main.h"

/* ---- LPS22HB Reg  -------------------------------------------------------- */
#define LPS22HB_I2C_ADDR            ((uint8_t)0x5C)   /* 7b'1011100 */
#define LPS22HB_DEVICE_ID           ((uint8_t)0xB1)

#define LPS22HB_INTERRUPT_CFG       ((uint8_t)0x0B)
#define LPS22HB_THS_P_L             ((uint8_t)0x0C)
#define LPS22HB_THS_P_H             ((uint8_t)0x0D)
#define LPS22HB_WHO_AM_I            ((uint8_t)0x0F)
#define LPS22HB_CTRL_REG1           ((uint8_t)0x10)
#define LPS22HB_CTRL_REG2           ((uint8_t)0x11)
#define LPS22HB_CTRL_REG3           ((uint8_t)0x12)
#define LPS22HB_FIFO_CTRL           ((uint8_t)0x14)
#define LPS22HB_REF_P_XL            ((uint8_t)0x15)
#define LPS22HB_REF_P_L             ((uint8_t)0x16)
#define LPS22HB_REF_P_H             ((uint8_t)0x17)
#define LPS22HB_RPDS_L              ((uint8_t)0x18)
#define LPS22HB_RPDS_H              ((uint8_t)0x19)
#define LPS22HB_RES_CONF            ((uint8_t)0x1A)
#define LPS22HB_INT_SOURCE          ((uint8_t)0x25)
#define LPS22HB_FIFO_STATUS         ((uint8_t)0x26)
#define LPS22HB_STATUS              ((uint8_t)0x27)
#define LPS22HB_PRESS_OUT_XL        ((uint8_t)0x28)
#define LPS22HB_PRESS_OUT_L         ((uint8_t)0x29)
#define LPS22HB_PRESS_OUT_H         ((uint8_t)0x2A)
#define LPS22HB_TEMP_OUT_L          ((uint8_t)0x2B)
#define LPS22HB_TEMP_OUT_H          ((uint8_t)0x2C)
#define LPS22HB_LPFP_RES            ((uint8_t)0x33)

void LPS22HB_Init(void);
void LPS22HB_Get_Data(void);

#endif

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值