气压计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…...
设计模式实战解读(一):单例模式——全局唯一实例的正确打开方式
本文是「设计模式实战解读」系列第一篇。系列文章统一按照 定义 → 痛点场景 → 模式结构 → 核心实现 → 真实应用 → 常见变种 → 优缺点 → 避坑指南 → FAQ 的结构展开,每篇聚焦一个模式讲透。一句话定义 单例模式(Singleton):…...
3分钟让直播音质专业级:OBS-VST插件终极使用指南
3分钟让直播音质专业级:OBS-VST插件终极使用指南 【免费下载链接】obs-vst Use VST plugins in OBS 项目地址: https://gitcode.com/gh_mirrors/ob/obs-vst 你是否曾为直播时观众抱怨"声音太吵"、"听不清说话"而烦恼?或者精心…...
Claude医学文献分析准确率实测:对比GPT-4o、Gemini 2.0与专业文献数据库(n=1,847篇RCT,Kappa=0.91)
更多请点击: https://codechina.net 第一章:Claude医学文献分析案例 在临床研究与循证医学实践中,研究人员常需从海量PubMed、NEJM或Lancet等来源的PDF或HTML格式文献中快速提取关键信息。Claude系列大模型凭借其长上下文(最高20…...
双稳健机器学习在时间序列因果推断中的应用:以脉冲响应函数为例
1. 项目概述:当因果推断遇上时间序列在宏观经济和金融领域,我们常常需要回答这样的问题:当中央银行突然宣布加息0.25个百分点,失业率在未来两年内会如何变化?或者,一项新的财政刺激政策出台后,G…...
Spark Transformer:稀疏激活优化与计算效率提升
1. Spark Transformer 核心设计解析Transformer架构在自然语言处理领域展现出卓越性能,但其计算密集型特性也带来了显著的资源消耗。传统Transformer模型的前馈网络(FFN)和注意力机制采用全连接计算模式,导致FLOPs(浮点运算次数)居高不下。Spark Transfo…...
别再死记硬背了!用Python实战案例帮你彻底搞懂假设检验(附代码与避坑指南)
用Python实战拆解假设检验:从数据模拟到结果解读的避坑指南假设检验是数据分析师和机器学习工程师工具箱中最常用的统计工具之一,但很多人在学习过程中都会被各种检验方法、P值解读和原假设设定绕得晕头转向。本文将通过Python代码实战,带你用…...
技术人的持续学习:保持竞争力的完整指南
技术人的持续学习:保持竞争力的完整指南 引言 在快速发展的技术领域,持续学习是保持竞争力的关键。技术更新的速度越来越快,新的编程语言、框架和工具不断涌现。作为一名技术人,只有不断学习,才能跟上技术发展的步伐&a…...
VLC for Unity在Android音频绕过原理与协同控制方案
1. 问题本质:为什么VLC for Unity在Android上绕过Unity音频系统?这个问题不是“插件用得不对”,而是VLC for Unity在Android平台上的架构级设计选择。我第一次遇到这个现象时,也以为是配置漏了——把Audio Source拖上去、勾上Play…...
图像增强与半监督学习在语义分割中的应用
1. 图像增强技术在语义分割中的应用原理计算机视觉领域的语义分割任务要求模型对图像中的每个像素进行分类,这需要模型具备强大的特征提取能力和泛化性能。图像增强技术通过人为引入数据多样性,成为提升模型鲁棒性的关键手段。在语义分割任务中ÿ…...
3层深度清理技术:Display Driver Uninstaller显卡驱动彻底卸载解决方案
3层深度清理技术:Display Driver Uninstaller显卡驱动彻底卸载解决方案 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-driv…...
