BMX055驱动日记

上一篇提到过位域的问题,而我学习位域主要是,运用在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
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值