毕业设计3-BME280温湿度大气压传感器调试记录(STM32F103C8T6 + STM32CubeMX + BME280)
文章目录
- 一、驱动文件准备
- 二、STM32CubeMX配置
- 三、Keil代码介绍
- 总结:
我的毕业设计需要显示测量的温度、湿度、大气压数据,所以选用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传感器设备的调试,从移植官方的驱动到数据读取!!!
毕业设计3-BME280温湿度大气压传感器调试记录(STM32F103C8T6 + STM32CubeMX + BME280)相关推荐
- java毕业设计大学生二手物品交易网站演示记录2021Mybatis+系统+数据库+调试部署
java毕业设计大学生二手物品交易网站演示记录2021Mybatis+系统+数据库+调试部署 java毕业设计大学生二手物品交易网站演示记录2021Mybatis+系统+数据库+调试部署 本源码技术栈 ...
- 硬件I2C sht3x温湿度传感器 学习过程记录
硬件I2C sht3x温湿度传感器 stm32的硬件I2C,非中断方式 代码及stm32工程分享 软件方式实现传送门 sht3x温湿度传感器的资料解析 背景 在此之前,对sht3x这款传感器的开发也是 ...
- 高通SDM450 Android9上调试RS485接口温湿度传感器调试介绍
高通SDM450 Android9上调试RS485接口温湿度传感器调试介绍 1.初步确认硬件电路工作正常 2.确认主控端串口可以正常工作 3.调试主控串口经过RS485连接电脑可以正常收发 4.单独调 ...
- CSR101x BLE芯片 简简单单实现一个 温湿度BLE 传感器结点
CSR101x BLE芯片 简简单单实现一个 温湿度BLE 传感器结点 CSR101x ble 结点 开发软件和硬件 硬件原理图和硬件连接 软件的修改 在user_config.h 配置文件中 定义# ...
- java毕业设计房屋租赁系统mybatis+源码+调试部署+系统+数据库+lw
java毕业设计房屋租赁系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计房屋租赁系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S架构 开 ...
- java毕业设计美容院管理系统Mybatis+系统+数据库+调试部署
java毕业设计美容院管理系统Mybatis+系统+数据库+调试部署 java毕业设计美容院管理系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 ...
- ROS上同时预览depth,IR,RGB 调试记录
ROS上同时预览depth,IR,RGB 调试记录 用rviz同时显示RGB,IR,DEPTH(验证设备:astraprosm,canglong2,deeyea) 1.编译libuvc库 cd lib ...
- ML之回归预测:利用十(xgboost,10-1)种机器学习算法对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值——bug调试记录
ML之回归预测:利用十(xgboost,10-1)种机器学习算法对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值--bug调试记录 目录 输出结果 1.增加XGBR算法 ...
- [Deepin - Pycharm调试记录] Pyinstaller索引系统库问题
Deepin - Pycharm调试记录 - Pyinstaller索引不到系统库 现象 在Pycharm的Terminal中执行Pyinstaller指令时候遇到如下报错提示 OSError: Py ...
- RAISR-master:google图像新压缩技术RAISR的测试代码调试记录(Python实现,没接触过python的小白,内含pip install解决方案)
RAISR-master:google图像新压缩技术RAISR的测试代码调试记录(Python实现,没接触过python的小白,内含pip install解决方案) 参考文章: (1)RAISR-ma ...
最新文章
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:禁用按钮
- 实时监视同步数据库变更,这个框架真是神器
- Spring Cloud 第一天课堂笔记
- 【Web】JavaWeb项目为什么我们要放弃jsp?为什么要前后端解耦?为什么要前后端分离?2.0版,为分布式架构打基础。 - CSDN博客
- C# 特性 Attribute
- Linux系统启动过程分析 -转
- 如何计算CRC循环校验码示例
- 桌面右下角出现“测试模式 Windows7 内部版本7601”怎么回事?
- 企业级docker仓库Harbor在kubernetes上搭建使用
- 郑州轻工业大学2021-2022(1)期末模拟测试二答案
- 移动内部疯传的11篇VoLTE学习笔记,看懂了你也是技术大神(二)
- meta标签下http-equiv 属性详解
- linux关键vi按什么键n,linux vi 使用方法
- 新浪微博授权登录 文件不存在C8998
- 质量管理14条原则、敏捷开发宣言、敏捷开发十二原则
- 多个excel工作簿、工作表合并
- linux ftdi 虚拟,linux ftdi 驱动
- 读 TiDB: A Raft-based HTAP Database
- 与广东未来科技:怀揣初心,并肩同行
- 手写一个基于NIO的迷你版Tomcat