当前位置: 首页 > news >正文

GY-BMP280压强传感器完整工程stm32控制

基于 STM32 的 GY-BMP280 压强传感器工程,包括硬件连接、软件配置和数据采集。

硬件连接

  1. I2C 通信接口
    • 将 GY-BMP280 的 SDA(数据线)连接到 STM32 的 PB6 或 PB7。
    • 将 GY-BMP280 的 SCL(时钟线)连接到 STM32 的 PB5。
    • 如果需要电源,将 VCC 连接到 STM32 的 3.3V 供电口,GND 接地。

软件配置

  1. 初始化 I2C 通信

    • 使用 STM32 的硬件 I2C 外设进行通信,配置 I2C 总线的频率为 100K。
    • 配置 GPIO 时钟和 I2C 时钟,确保 I2C 总线正常工作。
  2. 初始化 BMP280

    • 读取 BMP280 的芯片 ID,确保其值为 0x58。
    • 读取补偿寄存器的值,用于后续数据校准。
    • 对 BMP280 进行复位操作。
    • 配置 BMP280 的工作模式、数据采集精度等参数。
  3. 数据采集

    • 发送命令请求大气压力和温度数据。
    • 从 BMP280 的寄存器中读取压力和温度的原始数据。
    • 使用补偿公式将原始数据转换为实际的物理单位(如帕斯卡 Pa 和摄氏度 °C)。

数据处理

  1. 温度计算

    double sDrv_BMP280_GetTemp() {int32_t temp = ((uint32_t)(bmp280.temp_msb) << 12) | ((uint32_t)(bmp280.temp_lsb) << 4) | (((uint32_t)(bmp280.press_xlsb) >> 4));double var1, var2, T;var1 = (((double)temp)/16384.0 - ((double)bmp280.dig_T1)/1024.0) * ((double)bmp280.dig_T2);var2 = ((((double)temp)/131072.0 - ((double)bmp280.dig_T1)/8192.0) *(((double)temp)/131072.0 - ((double)bmp280.dig_T1)/8192.0)) * ((double)bmp280.dig_T3);t_fine = (int32_t)(var1 + var2);T = (var1 + var2) / 5120.0;return T;
    }
    
  2. 压力计算

    double sDrv_BMP280_GetPress() {int32_t press = ((uint32_t)(bmp280.press_msb) << 12) | ((uint32_t)(bmp280.press_lsb) << 4) | (((uint32_t)(bmp280.press_xlsb) >> 4));double var1, var2, p;var1 = ((double)t_fine/2.0) - 64000.0;var2 = var1 * var1 * ((double)bmp280.dig_P6) / 32768.0;var2 = var2 + var1 * ((double)bmp280.dig_P5) * 2.0;var2 = (var2/4.0)+(((double)bmp280.dig_P4) * 65536.0);var1 = (((double)bmp280.dig_P3) * var1 * var1 / 524288.0 + ((double)bmp280.dig_P2) * var1) / 524288.0;var1 = (1.0 + var1 / 32768.0)*((double)bmp280.dig_P1);if (var1 == 0.0) {return 0; // avoid exception caused by division by zero}p = 1048576.0 - (double)press;p = (p - (var2 / 4096.0)) * 6250.0 / var1;var1 = ((double)bmp280.dig_P9) * p * p / 2147483648.0;var2 = p * ((double)bmp280.dig_P8) / 32768.0;p = p + (var1 + var2 + ((double)bmp280.dig_P7)) / 16.0;return p;
    }
    

代码

STM32 上使用 GY-BMP280 压强传感器。

#include "bmp280.h"// 初始化 BMP280
bool bmp280Init(void) {// 读取芯片 IDif (BMP_iicDevReadByte(BMP280_ADDR, BMP280_CHIP_ID) != BMP280_DEFAULT_CHIP_ID) {return false;}// 读取补偿寄存器for (int i = 0; i < 6; i++) {uint16_t* ptr = (uint16_t*)&bmp280.dig_T1 + i;*ptr = BMP_iicDevReadByte(BMP280_ADDR, BMP280_TEMPERATURE_CALIB_DIG_T1_LSB_REG + i * 2);*ptr |= BMP_iicDevReadByte(BMP280_ADDR, BMP280_TEMPERATURE_CALIB_DIG_T1_LSB_REG + i * 2 + 1) << 8;}// 复位 BMP280BMP_iicDevWriteByte(BMP280_ADDR, BMP280_RST_REG, 0xB6);// 配置 BMP280BMP_iicDevWriteByte(BMP280_ADDR, BMP280_CTRL_MEAS_REG, BMP280_NORMAL_MODE | BMP280_OVERSAMP_16X);return true;
}// 获取压力和温度数据
void bmp280GetData(float* pressure, float* temperature) {// 读取压力和温度数据BMP_iicDevRead(BMP280_ADDR, BMP280_PRESSURE_MSB_REG, 6, (uint8_t*)&bmp280.press_msb);// 计算温度*temperature = sDrv_BMP280_GetTemp();// 计算压力*pressure = sDrv_BMP280_GetPress();
}

代码 GY-BMP280压强传感器完整工程stm32控制 www.youwenfan.com/contentcse/102757.html

总结

通过上述步骤和代码,可以在 STM32 上实现 GY-BMP280 压强传感器的初始化、数据采集和处理。该程序能够实时获取大气压力和温度数据,并将其转换为实际的物理单位。

http://www.xdnf.cn/news/1393615.html

相关文章:

  • Woody:开源Java应用性能诊断分析工具
  • “游戏手柄”线性霍尔传感器IC替代方案:赛卓SC470X
  • 深度对比:BQ79758-Q1 vs BQ79718-Q1,哪款汽车级电池监测器更适合你的BMS设计?
  • LDA(隐狄利克雷分配):主题模型的经典之作
  • [机器学习]基于K-means聚类算法的鸢尾花数据及分类
  • 动态环境下的人员感知具身导航!HA-VLN:具备动态多人互动的视觉语言导航基准与排行榜
  • gpu与cpu各厂商的优劣
  • 吱吱企业通讯软件可私有化部署,构建安全可控的通讯办公平台
  • [TG开发]与Reids集成
  • 深度拆解 OpenHarmony 位置服务子系统:从 GNSS 到分布式协同定位的全链路实战
  • LeetCode - 1. 两数之和
  • 华硕主板 BIOS 提示——GPT header corruption has been detected
  • 【树论】树上启发式合并
  • RV1126的OSD模块讲解
  • 单节锂电池,升压至12V/2.5A的芯片选型指南(附FP5207X 与 FP7208参数表)
  • Zabbix-获取客户端的SNMP数据
  • CMake⼯程指南-2
  • Linux系统——EXT2 文件系统
  • 记录:HSD部署(未完成)
  • 基于 Vue + Interact.js 实现可拖拽缩放柜子设计器
  • CosyVoice win10启用记
  • 《Shell 大道:筑基篇(下)—— 流控筑根基,数据任驱驰》
  • 【K8s】整体认识K8s之与集群外部访问--service
  • 【Doris入门】Doris表模型完全指南:明细、聚合、主键模型的选择与优化技巧
  • layout版图设计学习笔记4_Virtuoso基础介绍
  • Altium Designer 22使用笔记(10)---PCB铺铜相关操作
  • 如何解决网关断网后时间不再统计的问题?无RTC子设备如何打通主网关的时间同步功能?
  • Unity EventTrigger 动态添加事件
  • 电商数据的获取方式:API、爬虫、第三方服务及更多
  • 如何使用 Graylog 连接 Easysearch