BMX055驱动日记
来源:互联网 发布:宝鸡加工中心编程招聘 编辑:程序博客网 时间:2024/05/01 23:52
上一篇提到过位域的问题,而我学习位域主要是,运用在BMX055的驱动上,这篇博客讲讲怎么驱动BMX055,BMX055是一款九轴传感器(包含陀螺仪,加速度计和地磁计)。用店家的例程时候发现数据完全不对,但是至少出来了数据,说明I2C部分是对的,于是我把原工程的I2C部分保留了下来,其余部分准备自己翻看手册来写。翻看手册后,大概看了一下,前面一大堆讲的是芯片特性,各种模式,中断配置等等,由于之前使用过MPU6050,所以对这类传感器的配置较为熟悉,所以直接直接跳到了寄存器部分,找到软件复位的寄存器,配置让加速度计先软件复位,之后再设置了传感器的范围,然后开始从寄存器读数据,加速度计是12位的,存在两个寄存器里面,所以需要将两个寄存器的数据相或,并且用位域的方法取出12位有效数据并强制转化为32位,同样的方法用于陀螺仪的时候不行,看了好久才发现问题所在。错误代码如下:
for(i = 0; i < 3;i ++)//0 1 2 0 1 2 3 4 5{Gyro_dat[i] = (float)((int)(BMX055_GBUF[2*i] | BMX055_GBUF[2*i+1]<<8))*GyroSen;}
其中,int是32位的,而数组定义是无符号8位,首先ARM存储数据是按4字节空间来存储的,所以8位char类型可以直接左移,但是,左移后直接转化为32的数据这个过程中会丢掉符号位,所以实验结果陀螺仪数据全是正数,这里算是个小坑,把int 换为 short int 结果就正常了。
最后用同样的方法处理地磁计,结果地磁计的数据还是全0,回去翻看数据手册,看到磁力计有四种模式,睡眠,挂起,掉电,工作模式,手册上写着“Soft reset always brings the device into sleep mode”,意思软复位会将传感器变为睡眠模式,所以需要再将传感器变为工作模式,之后数据终于正常了。至此,BMX055驱动编写完成。
另外BMX055还有其他一些功能,包括支持SPI接口,暂时用不到所以没有继续研究。
0 0
- BMX055驱动日记
- wifi驱动开发日记
- 【日记】转行驱动
- android wifi驱动开发日记
- android wifi驱动开发日记
- android wifi驱动开发日记
- 日记 nand驱动移植简介
- android wifi驱动开发日记
- [懒人日记6]驱动程序开发---驱动安装
- 驱动编程实习日记——规划
- android wifi驱动开发日记(一)
- android wifi驱动开发日记(二)
- android wifi驱动开发日记(一)
- android wifi驱动开发日记(二)
- 210学习日记(17)_IIS驱动框架
- android wifi驱动开发日记(一)
- android wifi驱动开发日记(一)
- android wifi驱动开发日记(二)
- DB进阶--mysql的索引
- 以Attention Model为例谈谈两种研究创新模式
- ionic开发——手机相机摄像头与相册的调用
- 无辅助存储空间判断回文数字
- js的12个鸡肋 ---来自《javascript语言精粹》
- BMX055驱动日记
- CSS 选择器参考手册
- JDK源码解析(1)——数据数组排序:Arrays.sort()
- css3中background-clip和background-origin的区别
- 使用三极管时的注意事项
- 由货币的属性推想到,怎样的货币是凌驾于科技之上的最大限度地安全货币
- 流水线调度dp问题
- 关于mysql hibernate视图
- java学习2