4787|4

1512

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【ST MEMS防水气压传感器LPS27HHW测评】+例程的分析及使用 [复制链接]

 
本帖最后由 jinglixixi 于 2020-12-30 11:54 编辑

在气压传感器LPS27HHW的相关资料中提供相应例程,但没用提供相应的工程,因此要进行具体的使用还是需要加以探索的。

前文我们已经介绍过该例程是基于STM32F411RE开发板的,并在这个开发板上完成串行通讯功能,也就是说就差LPS27HHW的驱动程序了。

有了LPS27HHW驱动程序,我们就可以用串口将检查的气压值显示出来。

LPS27HHW的例程资源分为3个部分,见图1所示。

图1  例程资源

 

其中在driver的目录中存放LPS27HHW的2个驱动文件,即lps27hhw_reg.c和lps27hhw_reg.h,而在example目录则存放的是示例主程序read_data_simple.c。

在使用时,相应将lps27hhw_reg.c放置在主程序main.c的目录下,见图2所示。

图2  lps27hhw_reg.c放置位置

 

而将lps27hhw_reg.c放置在主程序main.h的目录下,见图3所示。

图3  lps27hhw_reg.h放置位置

 

 

此时,在已有的串行通讯程序中应在文件头部添加#include "lps27hhw_reg.h"。

而在主程序main.c中,应在主程序之前引入read_data_simple.c中的相关定义及相应的辅助函数,其内容为:

typedef union{

  int16_t i16bit;

  uint8_t u8bit[2];

} axis1bit16_t;

 

typedef union{

  int32_t i32bit;

  uint8_t u8bit[4];

} axis1bit32_t;

 

#define CS_SPI2_GPIO_Port   0

#define CS_SPI2_Pin         0

#define CS_SPI1_GPIO_Port   0

#define CS_SPI1_Pin         0

 

#define TX_BUF_DIM          1000

 

static axis1bit32_t data_raw_pressure;

static axis1bit16_t data_raw_temperature;

static float pressure_hPa;

static float temperature_degC;

static uint8_t whoamI, rst;

static uint8_t tx_buffer[TX_BUF_DIM];

 

static int32_t platform_write(void *handle, uint8_t Reg, uint8_t *Bufp, uint16_t len)

static int32_t platform_read(void *handle, uint8_t Reg, uint8_t *Bufp,uint16_t len)

void tx_com( uint8_t *tx_buffer, uint16_t len )

 

而在初始化部分之后,添加read_data_simple.c的主体内容。

    whoamI = 0;
    lps27hhw_device_id_get(&dev_ctx, &whoamI);
    if ( whoamI != LPS27HHW_ID )  while(1);
    //manage here device not found
    //  Restore default configuration
    lps27hhw_reset_set(&dev_ctx, PROPERTY_ENABLE);
    do {
       lps27hhw_reset_get(&dev_ctx, &rst);
    } while (rst);
    //  Enable Block Data Update
    lps27hhw_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);
    // Set Output Data Rate
    lps27hhw_data_rate_set(&dev_ctx, LPS27HHW_10_Hz_LOW_NOISE);
    // Read samples in polling mode (no int)
  while(1)
  {
    //  Read output only if new value is available
    lps27hhw_reg_t reg;
    lps27hhw_read_reg(&dev_ctx, LPS27HHW_STATUS, (uint8_t *)®, 1);
    if (reg.status.p_da)
    {
      memset(data_raw_pressure.u8bit, 0x00, sizeof(int32_t));
      lps27hhw_pressure_raw_get(&dev_ctx, data_raw_pressure.u8bit);
      pressure_hPa = lps27hhw_from_lsb_to_hpa( data_raw_pressure.i32bit);
      sprintf((char*)tx_buffer, "pressure [hPa]:%6.2f\r\n", pressure_hPa);//
      tx_com( tx_buffer, strlen( (char const*)tx_buffer ) );
    }

    if (reg.status.t_da)
    {
      memset(data_raw_temperature.u8bit, 0x00, sizeof(int16_t));
      lps27hhw_temperature_raw_get(&dev_ctx, data_raw_temperature.u8bit);
      temperature_degC = lps27hhw_from_lsb_to_celsius( data_raw_temperature.i16bit );
      sprintf((char*)tx_buffer, "temperature [degC]:%6.2f\r\n", temperature_degC ); //
      tx_com( tx_buffer, strlen( (char const*)tx_buffer ) );
    }
  }

完成编译后的结果如图4所示。

4 编译结果

 

目前使用串行通讯可输出的内容如图5所示,已能符合结果输出的需要。后续的工作是弄清LPS27HHW例程所使用的I2C接口具体是连接STM32F411的那个引脚,以便进行连接测试。

5 串口输出形式

最新回复

这应该测量出来的是大气压吧?   详情 回复 发表于 2020-12-30 19:28
点赞(1) 关注
 
 

回复
举报

9791

帖子

24

TA的资源

版主

沙发
 

你的气压值正好1000~!

点评

只是个效果测试  详情 回复 发表于 2020-12-30 17:39
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

1512

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
littleshrimp 发表于 2020-12-30 16:08 你的气压值正好1000~!

只是个效果测试

 
 
 

回复

1942

帖子

3

TA的资源

版主

4
 

这应该测量出来的是大气压吧?

点评

从资料看是气压和温度  详情 回复 发表于 2020-12-30 21:48
 
 
 

回复

1512

帖子

1

TA的资源

五彩晶圆(初级)

5
 
w494143467 发表于 2020-12-30 19:28 这应该测量出来的是大气压吧?

从资料看是气压和温度

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表