毕业设计3-BME280温湿度大气压传感器调试记录(STM32F103C8T6 + STM32CubeMX + BME280)


我的毕业设计需要显示测量的温度、湿度、大气压数据,所以选用BME280传感器。这款传感器是基于I2C通信的,我们通过移植官方给的驱动库。这篇主要介绍整个移植过程,并没有理论方面的介绍。 这个才是我们见过的通用传感器嘛,姿态传感器太麻烦了。

整个工程文件我放到下面的链接里了,大家自取哈。
链接:https://pan.baidu.com/s/1aZyCO8cuZQ4eLKKC6_mGSQ
提取码:y1yo

一、驱动文件准备

1.我们在Github中一般都可以找到这三个驱动文件。
在这里插入图片描述
其中“bme280_defs.h”主要是定义bme280的寄存器的一些地址,“bme280.h”定义了一些初始化函数、功能实现函数,“bme280.c”是这些函数的实现,需要将这三个文件添加到工程中。
2.在工程里还提供的工程里面还有一个自检文件。
这个文件的目的是为了在初始化的时候确定BME280是否可以正常工作,如果通过自检,那么下面就可以开始读取数据并进行处理了。当然在这个工程中,我并没有使用这个函数,大家如果想先让传感器自检再进行工作可以使用这个函数。

二、STM32CubeMX配置

1.在“SYS”模块中,我们设置为“SW”;
在这里插入图片描述
2. 在“RCC”中,我们选择最后一个即可;

对于三种的区别请参考:https://www.cnblogs.com/niu-li/p/11172052.html

在这里插入图片描述
3.因为BME280传感器是依靠I2C来实现的,我们需要开一路I2C,其余默认即可;
在这里插入图片描述
4. 我们需要开一路串口,来将读取到的数据打印在串口调试助手中;
在这里插入图片描述
5.下面我们来配置时钟树,一定要检查自己的外部晶振是多少,需要跟自己的硬件保持一致的;
在这里插入图片描述
6. 我们将整个文件保存在相应的文件夹中即可;
在这里插入图片描述
7.我们需要选择想生成怎么的工程文件,然后点击右上角的生成工程文件即可。
在这里插入图片描述

三、Keil代码介绍

1.我们先需要重定向、串口,在“main.c”文件中添加以下代码:

#include "stdio.h"
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
    //具体哪个串口可以更改huart1为其它串口
    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1 , 0xffff);
    return ch;
}

2.我们需要将那3个文件拷贝到工程中:
在这里插入图片描述
3.因想用硬件I2C来实现,所以需要修改一下“i2c.c”文件:

void user_delay_ms(uint32_t period)
{
	HAL_Delay(period);
}
int8_t user_i2c_read(uint8_t dev_id, uint8_t reg_addr, uint8_t *reg_data, uint16_t len)
{
  int8_t rslt = 0; /* Return 0 for Success, non-zero for failure */
	HAL_StatusTypeDef status = HAL_OK; 
	status = HAL_I2C_Mem_Read(&hi2c2, dev_id<<1, reg_addr, I2C_MEMADD_SIZE_8BIT, reg_data, len, 0xffff);
	if (status == HAL_OK)
	{
        rslt = 0;
	}
    else
	{
        rslt = -1;
	}
    return rslt;
}


int8_t user_i2c_write(uint8_t dev_id, uint8_t reg_addr, uint8_t *reg_data, uint16_t len)
{
  int8_t rslt = 0; /* Return 0 for Success, non-zero for failure */
	HAL_StatusTypeDef status = HAL_OK;
  status = HAL_I2C_Mem_Write(&hi2c2, dev_id<<1, reg_addr, I2C_MEMADD_SIZE_8BIT, reg_data, len, 0xffff);
	if (status == HAL_OK)
	{
      rslt = 0;
	}
    else
	{
      rslt = -1;
	}
    return rslt;
}

我们也需要在"i2c.h"文件中添加

void user_delay_ms(uint32_t period);
int8_t user_i2c_read(uint8_t dev_id, uint8_t reg_addr, uint8_t *reg_data, uint16_t len);
int8_t user_i2c_write(uint8_t dev_id, uint8_t reg_addr, uint8_t *reg_data, uint16_t len);

4.回到“main.c”文件中:
(1)定义两个结构体,一个为bme280,一个用来存储数据

struct bme280_dev dev;
struct bme280_data comp_data;

(2)初始化bme280:

int8_t rslt = BME280_OK;
dev.dev_id = BME280_I2C_ADDR_PRIM;
dev.intf = BME280_I2C_INTF;
dev.read = user_i2c_read;    //利用硬件I2C模式来读取数据
dev.write = user_i2c_write;
dev.delay_ms = user_delay_ms;
rslt = bme280_init(&dev);

(3)读取函数:

int8_t stream_sensor_data_forced_mode(struct bme280_dev *dev)
{
    uint8_t settings_sel;

    /* Recommended mode of operation: Indoor navigation */
    dev->settings.osr_h = BME280_OVERSAMPLING_1X;
    dev->settings.osr_p = BME280_OVERSAMPLING_16X;
    dev->settings.osr_t = BME280_OVERSAMPLING_2X;
    dev->settings.filter = BME280_FILTER_COEFF_16;
    settings_sel = BME280_OSR_PRESS_SEL | BME280_OSR_TEMP_SEL | BME280_OSR_HUM_SEL | BME280_FILTER_SEL;
	bme280_set_sensor_settings(settings_sel, dev);
    bme280_set_sensor_mode(BME280_FORCED_MODE, dev);
	bme280_get_sensor_data(BME280_ALL, &comp_data, dev);
	HAL_Delay(40);
	printf("temperature:%0.2f*C   pressure:%0.2fhPa   humidity:%0.2f%%\r\n",comp_data.temperature,   comp_data.pressure/100, comp_data.humidity);
}

(4)在while循环中进行实时读取:
在这里插入图片描述


总结:

通过本次实验自己学会了1个I2C传感器设备的调试,从移植官方的驱动到数据读取!!!

BME280是一款集成了温度、湿度和气压传感器的设备,它能够提供精确的环境数据信息。STM32是意法半导体(STMicroelectronics)公司推出的一系列32位ARM Cortex-M微控制器,具有低功耗、高性能和丰富的外设接口。这两者结合在一起可以实现多种应用。 首先,使用STM32控制BME280可以实现气象站功能。通过读取BME280传感器的数据,我们可以得到当前的温度、湿度和气压值,从而实时了解气候状况。这对于农业、气象预测等领域非常重要。 其次,结合STM32BME280,可以实现智能家居系统。通过连接到Wi-Fi或蓝牙模块,将BME280的数据上传到云端,用户可以通过手机或电脑远程监测房间的温湿度等环境信息,并根据需要进行调整和控制。这样的系统提供了更舒适和能源高效的居住环境。 另外,结合STM32BME280也可以应用于工业自动化。通过与PLC(可编程逻辑控制器)或其他工业控制设备连接,可以实现对环境条件的实时监控和控制。例如,在一些对环境要求严格的工业生产过程中,及时调整温湿度可以确保产品质量。 总的来说,BME280STM32的结合可以实现多种实用的应用。无论是气象站、智能家居还是工业自动化,这些组合技术都能够为我们提供更多的环境数据,并根据这些数据进行相应的调整和控制,从而实现更高的生活质量和工作效率。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值