STM32配置读取BMP280气压传感器数据

您所在的位置:网站首页 博世cube STM32配置读取BMP280气压传感器数据

STM32配置读取BMP280气压传感器数据

2024-07-16 21:57| 来源: 网络整理| 查看: 265

STM32配置读取BMP280气压传感器数据

BMP280是在BMP180基础上增强的绝对气压传感器,在飞控领域的高度识别方面应用也比较多。 在这里插入图片描述 BMP280和BMP180的区别: 在这里插入图片描述

市面上也有一些模块: 在这里插入图片描述 这里介绍STM32芯片和BMP280的连接和数据读取。

电路连接

BMP280和STM32的供电范围一致,可以在1.8V, 2.5V和3.3V多个供电电压点直接连接。

BMP280和STM32可以通过SPI或者I2C总线实现访问连接,I2C接口连接管脚少,这里采用I2C接口实现连接。

这里采用GPIO模拟I2C协议的方式,所以随意找2个管脚作为SCL和SDA。 在这里插入图片描述 用I2C总线连接时,BMP280的SDO管脚的电平状态用作I2C地址低位的选择。

运行过程

运行过程包括测试参数的配置选择: 在这里插入图片描述 也包括循环运行过程的节奏控制: 在这里插入图片描述 这里以STM32F401CCU6和STM32CUBEIDE开发环境为例,实现BMP280的访问读取数据,采用USB虚拟串口或普通串口方式打印输出。

初始化主要配置的寄存器0xF4 "ctrl_meas"的定义如下: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 过采样率oversampling会对采样分辨率和噪声产生影响: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 不同场景有推荐配置: 在这里插入图片描述

初始化主要配置的寄存器0xF5 "config"的定义如下:

在这里插入图片描述 在这里插入图片描述 测量时间和上面的测量间隔,就构成了数据输出率: 在这里插入图片描述 在这里插入图片描述 滤波参数和推荐: 在这里插入图片描述 按照数据手册表达方式,应该是: 在这里插入图片描述

在这里插入图片描述

STM32工程配置

首先建立基本工程并配置时钟系统: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

配置USB虚拟串口: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 配置USART1作为通讯串口: 在这里插入图片描述 在这里插入图片描述 配置两个管脚作为与BMP280的通讯管脚: 在这里插入图片描述

保存并生成初始工程代码: 在这里插入图片描述

STM32工程代码

I2C模拟时序用到的微秒延时函数,参考: STM32 HAL us delay(微秒延时)的指令延时实现方式及优化 USB虚拟串口的实现,参考: STM32 USB VCOM和HID的区别,配置及Echo功能实现(HAL) STM32串口打印的实现,参考: STM32 UART串口printf函数应用及浮点打印代码空间节省 (HAL) 采用减少代码编译size的方式,参考: STM32 region `FLASH‘ overflowed by xxx bytes 问题解决

代码逻辑识别USB虚拟串口是否连接,如果连接,则通过USB虚拟串口打印输出,否则通过普通串口打印输出。 上电或重启后,STM32对BMP280进行初始化,如果失败,则打印输出报错信息,如果成功,则循环进行检测和输出压力,高度和温度值。

建立BMP280.h放置一些寄存器访问地址参数:

#ifndef __BMP280_H #define __BMP280_H #include "main.h" #include "math.h" #include "string.h" #include "stdio.h" /* * BMP280 register address */ #define BMP280_REGISTER_DIG_T1 0x88 #define BMP280_REGISTER_DIG_T2 0x8A #define BMP280_REGISTER_DIG_T3 0x8C #define BMP280_REGISTER_DIG_P1 0x8E #define BMP280_REGISTER_DIG_P2 0x90 #define BMP280_REGISTER_DIG_P3 0x92 #define BMP280_REGISTER_DIG_P4 0x94 #define BMP280_REGISTER_DIG_P5 0x96 #define BMP280_REGISTER_DIG_P6 0x98 #define BMP280_REGISTER_DIG_P7 0x9A #define BMP280_REGISTER_DIG_P8 0x9C #define BMP280_REGISTER_DIG_P9 0x9E #define BMP280_REGISTER_CHIPID 0xD0 #define BMP280_REGISTER_VERSION 0xD1 #define BMP280_REGISTER_SOFTRESET 0xE0 #define BMP280_REGISTER_STATUS 0xF3 #define BMP280_REGISTER_CONTROL 0xF4 #define BMP280_REGISTER_CONFIG 0xF5 #define BMP280_TEMP_XLSB_REG 0xFC /*Temperature XLSB Register */ #define BMP280_TEMP_LSB_REG 0xFB /*Temperature LSB Register */ #define BMP280_TEMP_MSB_REG 0xFA /*Temperature LSB Register */ #define BMP280_PRESS_XLSB_REG 0xF9 /*Pressure XLSB Register */ #define BMP280_PRESS_LSB_REG 0xF8 /*Pressure LSB Register */ #define BMP280_PRESS_MSB_REG 0xF7 /*Pressure MSB Register */ /*calibration parameters */ #define BMP280_DIG_T1_LSB_REG 0x88 #define BMP280_DIG_T1_MSB_REG 0x89 #define BMP280_DIG_T2_LSB_REG 0x8A #define BMP280_DIG_T2_MSB_REG 0x8B #define BMP280_DIG_T3_LSB_REG 0x8C #define BMP280_DIG_T3_MSB_REG 0x8D #define BMP280_DIG_P1_LSB_REG 0x8E #define BMP280_DIG_P1_MSB_REG 0x8F #define BMP280_DIG_P2_LSB_REG 0x90 #define BMP280_DIG_P2_MSB_REG 0x91 #define BMP280_DIG_P3_LSB_REG 0x92 #define BMP280_DIG_P3_MSB_REG 0x93 #define BMP280_DIG_P4_LSB_REG 0x94 #define BMP280_DIG_P4_MSB_REG 0x95 #define BMP280_DIG_P5_LSB_REG 0x96 #define BMP280_DIG_P5_MSB_REG 0x97 #define BMP280_DIG_P6_LSB_REG 0x98 #define BMP280_DIG_P6_MSB_REG 0x99 #define BMP280_DIG_P7_LSB_REG 0x9A #define BMP280_DIG_P7_MSB_REG 0x9B #define BMP280_DIG_P8_LSB_REG 0x9C #define BMP280_DIG_P8_MSB_REG 0x9D #define BMP280_DIG_P9_LSB_REG 0x9E #define BMP280_DIG_P9_MSB_REG 0x9F typedef struct { uint16_t T1; /*


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3