气压计LPS25HB开发(1)----轮询获取气压计数据
气压计LPS25HB开发----1.轮询获取气压计数据
- 概述
- 视频教学
- 样品申请
- 源码下载
- 产品特性
- 通信模式
- 速率
- 生成STM32CUBEMX
- 串口配置
- IIC配置
- SA0地址设置
- 串口重定向
- 参考程序
- SA0设置模块地址
- 获取ID
- 复位操作
- BDU设置
- 设置速率
- 轮询读取数据
- 演示
概述
本文将介绍如何使用 LPS25HB 传感器来读取数据。主要步骤包括初始化传感器接口、验证设备ID、配置传感器的数据输出率和滤波器,以及通过轮询方式持续读取气压数据和温度数据。读取到的数据会被转换为适当的单位并通过串行通信输出。
最近在弄ST的课程,需要样片的可以加群申请:615061293 。

视频教学
样品申请
https://www.wjx.top/vm/OhcKxJk.aspx#
源码下载
产品特性
LPS25HB是一款压阻式绝对压力传感器,功能作为数字输出气压计。该设备包括一个感测元件和一个IC接口,通过I2C或SPI从感测元件通信至应用程序。
感测元件,用于检测绝对压力,由使用ST开发的专用工艺制造的悬挂膜组成。
LPS25HB采用全模塑、带孔的LGA封装(HLGA)提供。它保证在-30到+105°C的温度范围内操作。封装设计有孔,以允许外部压力到达感测元件。
通信模式
对于LPS25HB,可以使用IIC进行通讯。
最小系统图如下所示。

本文使用的板子原理图如下所示。

速率
该模块支持的I2C速度为快速模式400k。

生成STM32CUBEMX
用STM32CUBEMX生成例程,这里使用MCU为STM32WB55RG。
配置时钟树,配置时钟为32M。

串口配置
查看原理图,PB6和PB7设置为开发板的串口。

配置串口。

IIC配置

配置IIC为快速模式,速度为400k。

SA0地址设置
通过设置SA0管脚的高低电平可以改变模块的地址。

这里设置SA0管脚位输出管脚。


串口重定向
打开魔术棒,勾选MicroLIB

在main.c中,添加头文件,若不添加会出现 identifier “FILE” is undefined报错。
/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */
函数声明和串口重定向:
/* USER CODE BEGIN PFP */
int fputc(int ch, FILE *f){HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);return ch;
}
/* USER CODE END PFP */
参考程序
https://github.com/STMicroelectronics/lps25hb-pid
SA0设置模块地址
使能SA0为低电平,配置模块地址。

HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(SA0_GPIO_Port, SA0_Pin, GPIO_PIN_RESET); //GPIO_PIN_RESET /* Initialize mems driver interface */stmdev_ctx_t dev_ctx;dev_ctx.write_reg = platform_write;dev_ctx.read_reg = platform_read;dev_ctx.handle = &SENSOR_BUS;/* Wait sensor boot time */HAL_Delay(500);
获取ID
可以向WHO_AM_I (0Fh)获取固定值,判断是否为0xBD。

lps25hb_reset_set为获取函数。

对应的获取ID驱动程序,如下所示。
/* Check device ID */whoamI = 0;lps25hb_device_id_get(&dev_ctx, &whoamI);printf("LPS25HB_ID=0x%x,whoamI=0x%x\n",LPS25HB_ID,whoamI);if ( whoamI != LPS25HB_ID )while (1); /*manage here device not found */
复位操作
可以向CTRL_REG2 (21h)的SWRESET位写入1进行软件复位。

lps25hb_reset_set为重置函数。

对应的驱动程序,如下所示。
/* Restore default configuration */lps25hb_reset_set(&dev_ctx, PROPERTY_ENABLE);do {lps25hb_reset_get(&dev_ctx, &rst);} while (rst);
BDU设置
在很多传感器中,数据通常被存储在输出寄存器中,这些寄存器分为两部分:MSB和LSB。这两部分共同表示一个完整的数据值。例如,在一个加速度计中,MSB和LSB可能共同表示一个加速度的测量值。
连续更新模式(BDU = ‘0’):在默认模式下,输出寄存器的值会持续不断地被更新。这意味着在你读取MSB和LSB的时候,寄存器中的数据可能会因为新的测量数据而更新。这可能导致一个问题:当你读取MSB时,如果寄存器更新了,接下来读取的LSB可能就是新的测量值的一部分,而不是与MSB相对应的值。这样,你得到的就是一个“拼凑”的数据,它可能无法准确代表任何实际的测量时刻。
块数据更新(BDU)模式(BDU = ‘1’):当激活BDU功能时,输出寄存器中的内容不会在读取MSB和LSB之间更新。这就意味着一旦开始读取数据(无论是先读MSB还是LSB),寄存器中的那一组数据就被“锁定”,直到两部分都被读取完毕。这样可以确保你读取的MSB和LSB是同一测量时刻的数据,避免了读取到代表不同采样时刻的数据。
简而言之,BDU位的作用是确保在读取数据时,输出寄存器的内容保持稳定,从而避免读取到拼凑或错误的数据。这对于需要高精度和稳定性的应用尤为重要。
可以向CTRL_REG1 (20h)的BDU寄存器写入1进行开启。

对应的驱动程序,如下所示。
/* Enable Block Data Update */lps25hb_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);
设置速率
设置速率和量程可以通过CTRL_REG1 (20h)进行设置。

/* Set Output Data Rate */lps25hb_data_rate_set(&dev_ctx, LPS25HB_ODR_1Hz);
轮询读取数据
对于压强和温度数据是否准备好,可以查看STATUS (27h)的Zyxda位,判断是否有新数据到达。

对于压强数据,主要在PRESS_OUT_XL (28h)-PRESS_OUT_H (2Ah)。

压强转换如下所示。

对应代码如下。
/* Read output only if new value is available */lps25hb_reg_t reg;lps25hb_status_get(&dev_ctx, ®.status_reg);if (reg.status_reg.p_da) {
// memset(&data_raw_pressure, 0x00, sizeof(int32_t));
// lps25hb_pressure_raw_get(&dev_ctx, &data_raw_pressure);
// pressure_hPa = lps25hb_from_lsb_to_hpa( data_raw_pressure);
// printf("pressure [hPa]:%6.2f\r\n", pressure_hPa); uint8_t reg1[3];int32_t ret;lps25hb_read_reg(&dev_ctx, LPS25HB_PRESS_OUT_XL, reg1, 3); ret = reg1[2];ret=ret<<8;ret+=reg1[1];ret=ret<<8;ret+=reg1[0];pressure_hPa= (float)ret / 4096.0f;printf("OUT_XL=%x %x %x %x\n",reg1[0],reg1[1],reg1[2],ret);printf("pressure [hPa]:%6.2f\r\n", pressure_hPa);}
对于温度数据,数据在TEMP_OUT_L (2Bh)-TEMP_OUT_H (2Ch)。

对应代码如下。
if (reg.status_reg.t_da) {memset(&data_raw_temperature, 0x00, sizeof(int16_t));lps25hb_temperature_raw_get(&dev_ctx, &data_raw_temperature);temperature_degC = lps25hb_from_lsb_to_degc(data_raw_temperature);printf("temperature [degC]:%6.2f\r\n",temperature_degC);}
演示

正常气压为50hPa到1050hPa之间。

相关文章:
气压计LPS25HB开发(1)----轮询获取气压计数据
气压计LPS25HB开发----1.轮询获取气压计数据 概述视频教学样品申请源码下载产品特性通信模式速率生成STM32CUBEMX串口配置IIC配置SA0地址设置串口重定向参考程序SA0设置模块地址获取ID复位操作BDU设置设置速率轮询读取数据演示 概述 本文将介绍如何使用 LPS25HB 传感器来读取数…...
这个不需要吗 HttpServletRequest req
这个不需要吗 HttpServletRequest req 在这个特定场景下,您在OnlineStudentFeignService接口中确实不需要直接使用HttpServletRequest对象。因为Feign是一个声明式的HTTP客户端,它的设计目标是简化服务间的远程调用,它并不直接处理原始的HTT…...
【算法与数据结构】深入解析二叉树(一)
文章目录 📝数概念及结构🌠 树的概念🌉树的表示🌠 树在实际中的运用(表示文件系统的目录树结构) 🌉二叉树概念及结构🌠概念🌉数据结构中的二叉树🌠特殊的二叉…...
深入浅出:Objective-C中使用MWFeedParser下载豆瓣RSS
摘要 本文旨在介绍如何在Objective-C中使用MWFeedParser库下载豆瓣RSS内容,同时展示如何通过爬虫代理IP技术和多线程提高爬虫的效率和安全性。 背景 随着信息量的激增,爬虫技术成为了获取和处理大量网络数据的重要手段。Objective-C作为一种成熟的编程…...
Java日志框架Log4j 2详解
有时希望能够以文件的形式记录执行过程中出现的异常信息,甚至记录程序正常运行的关键步骤,以便日后查看,那么该如何处理呢? 答:显然,可以自行编程实现这个需求,但是,从更注重效率和性能的方面考虑&#x…...
【剪枝实战】使用VGGNet训练、稀疏训练、剪枝、微调等,剪枝出只有3M的模型
摘要 本次剪枝实战是基于下面这篇论文去复现的,主要是实现对BN层的γ/gamma进行剪枝操作,本文用到的代码和数据集都可以在我的资源中免费下载到。 相关论文:Learning Efficient Convolutional Networks through Network Slimming (ICCV 2017…...
OSI(Open Systems Interconnection)模型和TCP/IP模型
OSI模型 OSI模型是一个概念模型,由国际标准化组织(ISO)在1984年提出,用于促进不同系统间的通信互联。OSI模型将网络通信的过程分为七层,每一层都有其特定的功能,从下至上依次是: 物理层&#x…...
git基础命令(二)
目录 git revert 撤消上一次提交的更改但是会创建一个新的提交来撤消该提交所做的更改git show 显示提交详细信息git mv 重命名文件git rm 从工作树和索引中移除文件git clean 从工作树中移除未跟踪文件git checkout 将文件恢复到工作树git reset 撤销更改、移动 HEAD 指针以及…...
从零开始学习typescript系列 1:typescript 基本了解之是什么,为什么,以及怎么用
初识ts 基本了解 设计者,实现者:微软发行时间:2012年10月1日GitHub:https://github.com/microsoft/TypeScriptts和js关系:ts是js的扩展,ts语法包含js ts是新语言吗? 不是,在js基…...
【数学建模】线性规划
针对未来可能的数学建模比赛内容,我对学习的内容做了一些调整,所以先跳过灰色关联分析和模糊综合评价的代码,今天先来了解一下运筹规划类——线性规划模型。 背景: 某数学建模游戏有三种题型,分别是A,B&am…...
MQTT 的 QoS 等级:QoS 0、QoS 1、QoS 2
MQTT(Message Queuing Telemetry Transport)是一种轻量级的通信协议,在物联网和消息传递系统中广泛应用。MQTT 提供了三个不同的 QoS(Quality of Service)等级,用于确保消息的可靠性和传输效率。本文将详细…...
搭建个人智能家居 3 -第一个设备“点灯”
搭建个人智能家居 3 -第一个外设“点灯” 前言ESPHome点灯 HomeAssistant 前言 前面我们已经完成了搭建这个智能家居所需要的环境HomeAssistant和ESPHome,今天我们开始在这个智能家居中添加我们的第一个设备(一颗LED灯),如果环境…...
基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台
tar -xzf prometheus-2.7.0-rc.1.linux-amd64.tar.gzcd prometheus-2.7.0-rc.1.linux-amd64/./prometheus --config.fileprometheus.yml --web.listen-address:5555 Prometheus 默认监听端口号为 9090,为了不与系统上的其它进程监听端口冲突,我们在启动…...
(delphi11最新学习资料) Object Pascal 学习笔记---第7章第1节(创建对象 )
7.1.4 创建对象 与其他流行的编程语言比较之后,让我们回到 Pascal,看看如何使用类。 一旦定义了类,我们就可以创建一个该类型的对象,代码片段如下(本节所有代码提取自 Dates1 示例)那样:…...
unity学习笔记 Restsharp 使用心得
Restsharp Restsharp安装使用注意事项api方式的流式调用--子线程中执行代码无响应的问题问题描述问题解决其他问题 Restsharp 安装 可以在github上下载dll文件然后导入到unity中 https://github.com/adrenak/RestSharp.Unity 也可以百度直接搜Restsharp然后下载相关的文件导入…...
YOLOV5 部署:QT的可视化界面推理(创建UI,并编译成py文件)
1、前言 之前用YOLOV5 做了一个猫和老鼠的实战检测项目,本章将根据之前训练好的权重进行部署,搭建一个基于QT的可视化推理界面,可以检测图片和视频 本章使用的数据集和权重参照:YOLOV5 初体验:简单猫和老鼠数据集模型训练-CSDN博客 可视化界面如下: 2、安装Pyside6 本…...
Python:自动化处理PDF文档集合,提取文献标题、合并文献PDF并生成目录和页码
Python:自动化处理PDF文档集合,提取文献标题、合并文献PDF并生成目录和页码 引言:功能概述步骤一:提取PDF标题步骤二:生成目录和页码,合并PDF技术亮点 代码步骤一:提取PDF标题(Step_…...
vue 基于elementUI/antd-vue, h函数实现message中嵌套链接跳转到指定路由 (h函数点击事件的写法)
效果如图: 点击message 组件中的 工单管理, 跳转到工单管理页面。 以下是基于vue3 antd-vue 代码如下: import { message } from ant-design-vue; import { h, reactive, ref, watch } from vue; import { useRouter } from vue-router; c…...
数字排列 - 华为OD统一考试(C卷)
OD统一考试(C卷) 分值: 200分 题解: Java / Python / C 题目描述 小明负责公司年会,想出一个趣味游戏: 屏幕给出 1−9 中任意 4 个不重复的数字,大家以最快时间给出这几个数字可拼成的数字从小到大排列位于第 n 位置…...
yocto 编译raspberrypi 4B并启动
yocto 编译raspberrypi 4B并启动 环境准备 最近到手一个树莓派4B,准备拿来玩一玩,下面记录下使用yocto构建RaspberryPi的镜像并刷写启动的过程。 首先准备主机编译环境,必要组件安装: sudo apt install gawk wget git diffstat…...
AutoSAR从入门到精通:构建标准化汽车软件架构的完整指南
1. 为什么汽车软件需要AutoSAR? 十年前我刚入行汽车电子时,每个OEM厂商的ECU软件都是独立开发的"黑盒子"。同一款车窗控制功能,在德系、日系、美系车型上要用完全不同的代码实现。更痛苦的是,当需要升级ADAS功能时&…...
别再傻傻分不清HIL和SIL了!用NI PXI和Simulink手把手教你搭建第一个测试环境
从零开始搭建HIL/SIL测试环境:NI PXI与Simulink实战指南 刚接触在环测试的工程师常常被各种术语搞得晕头转向——HIL、SIL、MIL,它们到底有什么区别?更重要的是,接到一个控制器测试任务时,该如何从零开始搭建测试环境&…...
2026最权威的六大降重复率工具解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 飞速发展的人工智能技术,正深切地重塑着学术写作的范式,当下…...
用Arduino和TCS34725颜色传感器做个桌面小助手:自动识别物体颜色并控制RGB灯带
用Arduino和TCS34725打造智能色彩互动系统:从硬件搭建到场景应用 在创客圈里,色彩交互一直是个充满魅力的领域。想象一下:当你把一杯橙汁放在桌面上,周围的灯光自动变成温暖的橙色;放上一本蓝色封面的书,工…...
Windows11状态栏图标失效?手把手教你修复注册表关联(附一键脚本)
Windows 11状态栏图标失效的终极修复指南:从原理到实战 Windows 11以其现代化的界面设计吸引了不少用户,但系统自定义过程中难免会遇到各种"小脾气"。最近不少用户反馈,在尝试去除桌面图标小箭头后,状态栏的应用程序图标…...
终极Übersicht小部件调试指南:10个实用工具和高效方法
终极bersicht小部件调试指南:10个实用工具和高效方法 【免费下载链接】uebersicht ˈyːbɐˌzɪt 项目地址: https://gitcode.com/gh_mirrors/ue/uebersicht bersicht是一款强大的macOS桌面小部件工具,让开发者能够在桌面上创建和运行自定义小部…...
m4s-converter:释放B站缓存价值的格式转换利器
m4s-converter:释放B站缓存价值的格式转换利器 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 价值对比:格式转换前后的效…...
一篇文章彻底搞懂Linux驱动的并发控制与中断上下半部机制
在嵌入式 Linux 驱动开发中,并发控制与中断处于极其重要的核心地位。本文,我将结合 CPU 的行为与操作系统的调度,深入分析 spinlock 和 mutex 的本质区别,以及 Linux 中断上下半部。1. 上下文的概念 在深入探究锁和中断之前&#…...
Inconsolata字体高效使用实战指南:提升编程体验的专业字体方案
Inconsolata字体高效使用实战指南:提升编程体验的专业字体方案 【免费下载链接】Inconsolata Development repo of Inconsolata Fonts by Raph Levien 项目地址: https://gitcode.com/gh_mirrors/in/Inconsolata 作为开发者,我们每天与代码打交道…...
从3天到30分钟:OpCore-Simplify如何重构黑苹果配置的技术民主化之路
从3天到30分钟:OpCore-Simplify如何重构黑苹果配置的技术民主化之路 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 在黑苹果技术领域&…...
