文章目录

  • 一、驱动文件准备
  • 二、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)相关推荐

  1. java毕业设计大学生二手物品交易网站演示记录2021Mybatis+系统+数据库+调试部署

    java毕业设计大学生二手物品交易网站演示记录2021Mybatis+系统+数据库+调试部署 java毕业设计大学生二手物品交易网站演示记录2021Mybatis+系统+数据库+调试部署 本源码技术栈 ...

  2. 硬件I2C sht3x温湿度传感器 学习过程记录

    硬件I2C sht3x温湿度传感器 stm32的硬件I2C,非中断方式 代码及stm32工程分享 软件方式实现传送门 sht3x温湿度传感器的资料解析 背景 在此之前,对sht3x这款传感器的开发也是 ...

  3. 高通SDM450 Android9上调试RS485接口温湿度传感器调试介绍

    高通SDM450 Android9上调试RS485接口温湿度传感器调试介绍 1.初步确认硬件电路工作正常 2.确认主控端串口可以正常工作 3.调试主控串口经过RS485连接电脑可以正常收发 4.单独调 ...

  4. CSR101x BLE芯片 简简单单实现一个 温湿度BLE 传感器结点

    CSR101x BLE芯片 简简单单实现一个 温湿度BLE 传感器结点 CSR101x ble 结点 开发软件和硬件 硬件原理图和硬件连接 软件的修改 在user_config.h 配置文件中 定义# ...

  5. java毕业设计房屋租赁系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计房屋租赁系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计房屋租赁系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S架构 开 ...

  6. java毕业设计美容院管理系统Mybatis+系统+数据库+调试部署

    java毕业设计美容院管理系统Mybatis+系统+数据库+调试部署 java毕业设计美容院管理系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 ...

  7. ROS上同时预览depth,IR,RGB 调试记录

    ROS上同时预览depth,IR,RGB 调试记录 用rviz同时显示RGB,IR,DEPTH(验证设备:astraprosm,canglong2,deeyea) 1.编译libuvc库 cd lib ...

  8. ML之回归预测:利用十(xgboost,10-1)种机器学习算法对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值——bug调试记录

    ML之回归预测:利用十(xgboost,10-1)种机器学习算法对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值--bug调试记录 目录 输出结果 1.增加XGBR算法 ...

  9. [Deepin - Pycharm调试记录] Pyinstaller索引系统库问题

    Deepin - Pycharm调试记录 - Pyinstaller索引不到系统库 现象 在Pycharm的Terminal中执行Pyinstaller指令时候遇到如下报错提示 OSError: Py ...

  10. RAISR-master:google图像新压缩技术RAISR的测试代码调试记录(Python实现,没接触过python的小白,内含pip install解决方案)

    RAISR-master:google图像新压缩技术RAISR的测试代码调试记录(Python实现,没接触过python的小白,内含pip install解决方案) 参考文章: (1)RAISR-ma ...

最新文章

  1. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:禁用按钮
  2. 实时监视同步数据库变更,这个框架真是神器
  3. Spring Cloud 第一天课堂笔记
  4. 【Web】JavaWeb项目为什么我们要放弃jsp?为什么要前后端解耦?为什么要前后端分离?2.0版,为分布式架构打基础。 - CSDN博客
  5. C# 特性 Attribute
  6. Linux系统启动过程分析 -转
  7. 如何计算CRC循环校验码示例
  8. 桌面右下角出现“测试模式 Windows7 内部版本7601”怎么回事?
  9. 企业级docker仓库Harbor在kubernetes上搭建使用
  10. 郑州轻工业大学2021-2022(1)期末模拟测试二答案
  11. 移动内部疯传的11篇VoLTE学习笔记,看懂了你也是技术大神(二)
  12. meta标签下http-equiv 属性详解
  13. linux关键vi按什么键n,linux vi 使用方法
  14. 新浪微博授权登录 文件不存在C8998
  15. 质量管理14条原则、敏捷开发宣言、敏捷开发十二原则
  16. 多个excel工作簿、工作表合并
  17. linux ftdi 虚拟,linux ftdi 驱动
  18. 读 TiDB: A Raft-based HTAP Database
  19. 与广东未来科技:怀揣初心,并肩同行
  20. 手写一个基于NIO的迷你版Tomcat

热门文章

  1. android 车牌输入键盘
  2. RAID环境中增加容量-在线扩容
  3. 迪普应用防火墙产品线
  4. metro3000 OSN2500 OSN3500 华为传输 华为光端机
  5. 直播特效的实现原理与难点
  6. 英语口语 MP3 下载网址
  7. opencv安装与配置vs2019
  8. 总结完全二叉树、满二叉树、二叉排序树、二叉平衡树
  9. python爬虫跳过付费数据_Python爬虫教程:包图网免费付费素材爬取!
  10. 深度残差网络_深度残差收缩网络:借助注意力机制实现特征的软阈值化