STM32配置读取BMP280气压传感器数据 |
您所在的位置:网站首页 › 博世cube › STM32配置读取BMP280气压传感器数据 |
STM32配置读取BMP280气压传感器数据
BMP280是在BMP180基础上增强的绝对气压传感器,在飞控领域的高度识别方面应用也比较多。 市面上也有一些模块: BMP280和STM32的供电范围一致,可以在1.8V, 2.5V和3.3V多个供电电压点直接连接。 BMP280和STM32可以通过SPI或者I2C总线实现访问连接,I2C接口连接管脚少,这里采用I2C接口实现连接。 这里采用GPIO模拟I2C协议的方式,所以随意找2个管脚作为SCL和SDA。 运行过程包括测试参数的配置选择: 初始化主要配置的寄存器0xF4 "ctrl_meas"的定义如下: 初始化主要配置的寄存器0xF5 "config"的定义如下:
首先建立基本工程并配置时钟系统: 配置USB虚拟串口: 保存并生成初始工程代码: 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 |