博世BMI088官方代码库解析
BMI088是一款高性能惯性测量单元,是很多商业飞控使用的传感器。
最近在自己的无人机上也用到了它,要配置它需要用到官方API,如果是用arduino的话直接下载第三方库就行了,如果是其它设备,没有第三方库,就只能苦逼的去看官方库了。
官方库还挺长挺复杂的,这里对官方库进行一个简要的解析。
首先这里是官方库链接:https://github.com/boschsensortec/BMI08x-Sensor-API
这里面有很多文件,其中基础的配置文件有三个:bmi08a.c bmi08xa.c bmi08g.c
包含的头文件有:bmi08.h bmi08x.h bmi08_defs.h
这三个头文件互相链接,最终用户需要包含的头文件只有bmi08x.h
除了这些文件之外,还有很多高级配置文件,不过只要懂了基本配置文件,高级配置文件也很简单易懂了。
官方库之所以这么复杂,是因为保留了SPI, I2C, BMI085 和BMI088四个接口,并且几乎在每一步配置后都要检查是否成功,所以代码的可读性不太高。
最重要的是bmi08_defs.h文件的最下面,定义了一个bmi08_dev的结构体,如下:
这个结构体包含了几乎所有配置所需的东西,官方API就是把这个结构体不断传递到各个配置函数中去,然后再根据结构体的数据去读写寄存器。
这个结构体有一个需要注意的东西就是其中的三个函数指针:
这三个函数就是最基本的寄存器读,写,和一个挂起延时函数。
也就是说,对于不同的设备,需要用户自行定义这三个函数!
在example/bmi08x/common中,官方给出了这三个函数的实现,但是是给博世自己的开发板用的,其中使用了coines平台,显然无法适配其它设备,不过我们通过可以参考或修改common文件来适配自己的设备。
另外我们可以参考example/bmi08x/read_sensor_data文件,来查看如何具体进行配置。但里面有一个究极大坑。
在init_bmi08(void)这个函数中,有这样一步操作:
我一直卡在这一步好几天,最后才知道这一步去配置的寄存器根本不存在!
所以在使用时忽略或者删除这一步就行了!
最后read_sensor_data文件中使用的是中断读取,实际上也可以直接读取,bmi088读取速率有好几档,最高好像是1600HZ。
看代码看得我脑袋都大了一圈,深刻明白了代码阅读器的重要性。
博世BMI088官方代码库解析相关推荐
- react相关代码库以及框架的源码解析
持续更新中react相关库源码浅析, react ts3 项目 ???对react相关代码库以及框架的源码进行了一定的分析 ?react16.6 View contents 源码实例分析:可见runl ...
- REVISITING DYNAMIC CONVOLUTION VIA MATRIXDECOMPOSITION 官方代码解析心得
概要:这篇文章是动态卷积的改进版,最近研究了下官方代码. 下文所述,如有错误,欢迎指正. 代码并不长,但是想看懂也不是那么容易.论文里讲的是动态卷积的改进,即 结构图示如下: 初看代码,大概率会错误的 ...
- C/C++使用Quirc库解析二维码(QRcode)
C/C++使用Quirc库解析二维码 Quirc介绍 Quirc库使用 遇到的坑 整理的知识点 总结 Quirc介绍 Quirc是一个基于C/C++的一个二维码库,其在码云上的官网 https://g ...
- 【三维视觉】【深度学习】ubuntu18.04下PointNet官方代码Pytorch实现
[三维视觉][深度学习]ubuntu18.04下PointNet官方代码Pytorch实现 提示:最近开始在三维深度学习方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法. 文章目录 [ ...
- python代码库-Python常用库大全
Python常用库大全,看看有没有你需要的. 环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具 ...
- python代码库-哪些 Python 库让你相见恨晚?
Awesome Python 中文版网站?jobbole.github.io Awesome Python中文版来啦! 本文由 伯乐在线 - 艾凌风 翻译,Namco 校稿.未经许可,禁止转载! 英文 ...
- Android 天气预报【解析XML / Json文件(2种方式:手动解析、Gson库解析)】
源码 [工程文件]:https://gitee.com/lwx001/Weather XML : activity_main.xml : <RelativeLayout xmlns:androi ...
- Qt Creator使用Clang代码模型解析C ++文件
Qt Creator使用Clang代码模型解析C ++文件 使用Clang代码模型解析C ++文件 关于Clang代码模型 配置C语代码模型 lang检查 在项目级别指定Clang代码模型设置 使用编 ...
- Delphi语言最好的JSON代码库 mORMot学习笔记1
mORMot没有控件安装,直接添加到lib路径, 工程中直接添加syncommons,syndb等到uses里 -------------------------------------------- ...
最新文章
- Oracle 11g r2 安装
- android clipdrawable 小例子
- 将json转换成struts参数
- 03_4_this关键字
- CVPR 2020最新热点:物体位姿估计
- php 多进程 消息队列,[PHP] 多进程通信-消息队列使用
- SDL学习——画图、点阵显示
- dz php表单发送邮件,php 发送邮件
- WordPress Exploit Scanner插件安全绕过漏洞
- 在线教学、视频会议 Webus Fox(1)文本、语音、视频聊天及电子白板基本用法...
- 一个十分简单有效的改善origin下载速度慢的方法
- Android自定义控件学习
- 桑拿锁技术升级:桑拿手牌复制休矣!
- bmp批量转换jpg的方法
- Java 获取屏幕尺寸
- 未来智安XDR与中科方德高可信服务器操作系统完成产品兼容性互认证
- 落地语音交互,出门问问从Google Glass开始
- qtCharts----柱状图、折线图、饼图、曲线图
- PyQt5制作简单的 数据标注 工具(分类用)
- bash命令补全工具bash-completion
热门文章
- 房地产税预期影响房价走势:一线城市继续上行
- C语言与JAVA内存管理_深入理解C语言内存管理
- 齐悟机器人王一_专注智能对话 王一校友当选“2020年度全美十大华人杰出青年”...
- 老字号“斗汽”登顶热搜,国产汽水打完“情怀牌”还剩什么?
- 线程的等待和唤醒机制
- 预装绿坝,Linux何以为生?
- 测试工程师提高质量的OKR该如何写?
- IP地址,子网掩码计算子网地址,广播地址,子网划分。
- V神合著的《Decentralized Society: Finding Web3’s Soul》论文中有哪些有价值的信息需要我们注意的
- 尼采:快乐的知识(下)