ADXL362 初次使用总结
最近的一次项目中使用到了ADI的三轴加速度传感器ADXL362,出现了一些问题,这里做一下总结,问题包括这几点:
1. 从spi读取的数据一直为0
2. 随后读取芯片ID正常,但是读取加速度一直为0
3. 第一次读取加速值为0,第一次之后就正常了
以上的问题,都跟spi配置相关。
ADXL362是一款不错的三轴加速度传感器,他的特性包括:
* 1.8 µA @ 100 Hz ODR、2.0 V电源
* 3.0 µA @ 400 Hz ODR、2.0 V电源
* 270 nA运动唤醒模式
* 10 nA待机电流
* 分辨率 1mg/LSB
可谓是功耗非常低,ADLX362支持SPI的通信方式。本节内容讨论ADLX362 SPI的相关配置内容。
ADXL基本情况
通过数据手册可以知道ADLX362 SPI遵循模式为* CPHA = CPOL = 0 *(不工作时,时钟状态是低电平;在上升沿即第一个时钟沿采样数据)

数据手册中还提到,SPI操作使用多字节结构,第一个字节是命令。
* 0x0A 写入寄存器
* 0x0B 读取寄存器
* 0x0D 读取FIFO
也就是说在配置寄存器时,要先发送0x0A,紧接着是地址,然后是所要写入的内容,这样设备才能够确认是要写入寄存器。
而要读出寄存器内容时,要先发送0x0B,然后是地址,这样才能读出寄存器内容(以往好多设备是以地址的最高位来判断读写的,通常最高位是1就是读;最高位是0,表示写,这里有点不同)
如果是从fifo中读取加速度的值,需要先发送0x0D,紧接着就是读取数据了。
使用STM32l4xx HAL库配置SPI
本适合使用stm32 提供的HAL库,初始化函数为:
void spi1_init(void)
{
SpiHandle_1.Instance = SPI1;
SpiHandle_1.Init.BaudRatePrescaler = SPI_BAUD