https://blog.csdn.net/wangyijieonline/article/details/52925908
最近在搞一个和加速度计相关的项目,所以接触到的传感器比较多,现在写一个总结吧,防止后来者和我一样走这么多的弯路。
首先看到的是引脚图,如果驱动不了应该首先排除硬件的问题:
SPI接法
IIC接法

接着我们就着重看下面的几个寄存器:
传感器名(读/写) 寄存器号 功能
CHIPID(R) 0x00 芯片的ID,一般用来看驱动是否正常,固定值0xD1
PMU_STATUS(R) 0x03 显示当前各传感器的电源模式,分normal\low_power\suspend三种模式
ACC_CONF(RW) 0x40 设置输出数据速率、 带宽和加速度传感器读取的模式
ACC_RANGE 0x41 允许选择的加速度 g 范围
GYR_CONF(RW) 0x42 在传感器中设置输出数据速率、 带宽和陀螺仪读取的模式。
GYR_RANGE(RW) 0x43 定义 BMI160 角速度测量范围
INT_EN(RW) 0x50-0x52 启用各种中断,包括加速度数据、角速度数据和各种特殊功能的中断,使能后映射到INT1上输出,就可以触发单片机的外部中断了。
INT_OUT_CTRL(RW) 0x53 输出控制,包括输出使能,触发电平、边沿和输出模式(推挽和开漏)
INT_LATCH(RW) 0x54 设置中断锁存模式(不是很懂,一开始就是锁存了所以一直没有中断输出…,后来关掉就好了)
CMD(R) 0x7E 命令寄存器触发操作,如 softreset、 NVM 编程等。特殊的如:start_foc、acc_set_pmu_mode、gyr_set_pmu_mode、mag_set_pmu_mode、prog_nvm、fifo_flush、int_reset、softreset、step_cnt_clr
接下来就是各种特殊功能寄存器了,就不多说了,用哪个配置那个就可以了
重点说下这个计步的功能吧,现在还比较火:
传感器名(读/写) 寄存器号 功能
STEP_CONF(RW) 0x7A-0x7B 步数检测的配置,包括Normal mode,Sensitive mode,Robust mode三种也可以自己配置
STEP_CNT(R) 0x78-0x79 直接从这两个寄存器中读出记得步数,要注意的是范围是-32768——32768
下面的代码片是计步的初始化,用的是STM32F405:
|