毕业设计--2020.02.13-----基于Stm32F407的 BME680传感器库函数的迁移

本文主要是介绍毕业设计--2020.02.13-----基于Stm32F407的 BME680传感器库函数的迁移,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

毕业设计准备用 博世的 BME680 传感器来获取温湿度以及气压 空气质量信息。我选用的传感器是这样的

短期内可能不会上传代码,这是毕设的一部分  需要代码的小伙伴留言吧

/************************************************************************************************************************************

代码的地址在这里  https://gitee.com/jeasonb/bme680.git 

大家可以自行下载,这个是我迁移到了 正点原子探索者的版本,还没有解决 IAQ  只是显示温度 湿度气压 (2020-08-30)

*************************************************************************************************************************************/

传感器使用的是IIC协议进行通讯的 接线逻辑如下

VCC ----3.3V

GND---GND

SCL----PA15

SDA---PB3

选择的这么奇怪的引脚是因为我的  BME传感器设计问题,我先前买了 单个的传感器 焊接到我的毕设电路板上,但是电路始终有问题也没有找到具体的电路问题所在,最终无奈只能换成模块, 接线是借用的 编码器的接口  所有就有了这么两个不是很相关的 IO   读者可以根据自己的需求修改自己的 IO  我这里的程序使用的是软件模拟的IIC

我的 代码是移植的博世的官方的代码库 

https://github.com/BoschSensortec/BME680_driver  这是代码的地址 

我所用到的文件主要有这三个文件  读者可以自行去下载 官方的库文件  

第一个文件 bme680.c  声明了很多的函数   主要就是各种的 计算  对寄存器的数据解析的函数

注意这里面的很对函数都事static 类型的   也就是说官方希望这个函数不要在外面去调用   只是给这个文件内的其他函数去调用我的,官方代码给我们留下了几个通用的调用接口

大多数函数的入口参数都是结构体的指针, 有一点设备驱动的味道在里面(或许就是设备驱动,只是我还没学的到)

其他函数我就不多介绍了   这份代码的关键是在 结构体的定义和使用上

我准备着重跟大家分享一下我对这些结构体的理解

打开这个 头文件 前面的几百行大约就是一些宏定义 ,这个和我们的STM32 库文件是几乎一样的,我们可以不用自己去计算寄存器的具体值,直接赋值就可以了。

这一部分大约是这些东西

接下来就是两个至关重要的  函数指针的声明

这两个函数指针是 库文件和 单片机硬件连接的桥梁,所有的调用接口都在这里,针对于不同的硬件平台,我们只要修改这两个函数指针的实现我们就可以任意的迁移。

这两类函数 分别是  BME680 的读取(写入) 和延时函数    (注意 我们一共需要实现三个函数   读  、 写 、 延时,读和写是一样的类型)

注意 这里的读取没有限定是一定要用 IIC 还是 SPI  也就是说 这边留了足够的选择的余地,我当时被惊艳到了.....  我总觉得这边是设备树相关的(我没学过,会学的,,)

继续说  结构体

  这个枚举 是让你选择 通讯方式的  因为涉及到了一个 BME680 内部地址的寻址过程。  所有底层逻辑会有一定的不同

针对的就是这两个函数   在IIC模式下这两个函数用不到,但是在 SPI下用得到

 

接着这个结构体是用来存放计算好的数据的 

这个结构体的指针  是函数的入口参数;  也就是说计算的结果会保存在这里面。

 

这个结构体 我的理解是一个校正数组, 传感器内部有一些其他的数据 会被保存在这个结构体里面,后面调用数据计算的算法的时候回使用到这些数据,主要应该是对测量结果进行修正的  这个数组在进行  数据获取之前应该先填满(也就是在进行参数计算之前要填满)

这个结构体是  过采样率的保存数组  主要的事保存的过采样率  关于过采样率  请自行查找

这个结构体是  气体相关的结构体  我没深入了解

最后这个是设备的结构体,设备相关的数据都在这里, 有函数指针(先前提到过),有结构体的指针(各种数据的结构体),还有 通讯方式的选择(枚举) 设备ID  设备号等等

这部分待读者自行去理解吧

接下来我分享一下我的部分代码的思路

第一部分 我们肯定是要去实现那三个函数(读  写  延时)

这里 头文件给了我们提示  官方库提出了他的要求  ,要求的返回值是什么样子的,  函数的传入参数是什么样子的  都声明的很明白

我们只需要按照自己的单片机类型去实现指定的功能就好了

这是我的读函数,迁移改编自正点原子的 IIC例程

我的写函数

至于 像是IIC的起始,  发送数据

这些代码都是些基本操作,我在这里就不在多说,  大家去参考正点原子的iic 实验就好  实在不行等我上传代码吧(不一定会整理的很好)

我们只要是去实现那个 对应的函数接口就行了

关于延时函数我们没有办法直接使用Stm23F4的延时函数,会出错误的

出错误的原因是 传入参数的类型不相同 解决的方法很简单就是加了一层壳   强制类型转换一下

反正延时的时间也不可能用到65536ms   所以可以放心大胆的舍弃掉高位

 

以上我们就实现了三个基本函数;  接下来就是进行一些初始化的操作了, 大致我分两类  一类是单片机那边的 IO初始化, 这部分不提就是IO的配置,另外一部分就是用到的结构体需要去声明,需要去进行赋值  然后还需要调用一些关键的函数去对传感器侧的寄存器进行初始化

这是 IO初始化   不赘述   PA15   PB3

 接下来是  结构体和  函数调用

 

  以上就是我的初始化函数。  主要是给结构体填上相应的数字

  这是 下面函数中的延时时间实际测试

函数的输出结果

气压101650Pa   相对湿度51%  气温21度   

剩下的空气品质那一栏 暂时还没解决改日再战

 

 

 

 

这篇关于毕业设计--2020.02.13-----基于Stm32F407的 BME680传感器库函数的迁移的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/350942

相关文章

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

CentOs7上Mysql快速迁移脚本

因公司业务需要,对原来在/usr/local/mysql/data目录下的数据迁移到/data/local/mysql/mysqlData。 原因是系统盘太小,只有20G,几下就快满了。 参考过几篇文章,基于大神们的思路,我封装成了.sh脚本。 步骤如下: 1) 先修改好/etc/my.cnf,        ##[mysqld]       ##datadir=/data/loc

CentOS下mysql数据库data目录迁移

https://my.oschina.net/u/873762/blog/180388        公司新上线一个资讯网站,独立主机,raid5,lamp架构。由于资讯网是面向小行业,初步估计一两年内访问量压力不大,故,在做服务器系统搭建的时候,只是简单分出一个独立的data区作为数据库和网站程序的专区,其他按照linux的默认分区。apache,mysql,php均使用yum安装(也尝试

Linux Centos 迁移Mysql 数据位置

转自:http://www.tuicool.com/articles/zmqIn2 由于业务量增加导致安装在系统盘(20G)磁盘空间被占满了, 现在进行数据库的迁移. Mysql 是通过 yum 安装的. Centos6.5Mysql5.1 yum 安装的 mysql 服务 查看 mysql 的安装路径 执行查询 SQL show variables like

13 transition数组的动画使用

划重点 动画:transitiontransition-group :数组动画数组的 添加 / 删除 豆腐粉丝汤 清淡又健康 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><me

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

Chapter 13 普通组件的注册使用

欢迎大家订阅【Vue2+Vue3】入门到实践 专栏,开启你的 Vue 学习之旅! 文章目录 前言一、组件创建二、局部注册三、全局注册 前言 在 Vue.js 中,组件是构建应用程序的基本单元。本章详细讲解了注册和使用 Vue 的普通组件的两种方式:局部注册和全局注册。 本篇文章参考黑马程序员 一、组件创建 ①定义 Vue 组件是一种具有特定功能的 Vue 实

基于stm32的河流检测系统-单片机毕业设计

文章目录 前言资料获取设计介绍功能介绍具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机设计精品