利用lis3dh 的驱动做的LIS3DH初始化函数如下: LIS3DH_SetODR(LIS3DH_ODR_50Hz); LIS3DH_SetMode(LIS3DH_NORMAL); LIS3DH_SetFullScale(LIS3DH_FULLSCALE_2); LIS3DH_SetAxis(LIS3DH_X_ENABLE | LIS3DH_Y_ENABLE | LIS3DH_Z_ENABLE); LIS3DH_SetBDU(MEMS_ENABLE); LIS3DH_FIFOModeEnable(LIS3DH_FIFO_MODE); 然后利用设计FIFO读取数据的函数; #define ACC_DATA_LEN 32 AxesRaw_t accData[ACC_DATA_LEN]; void LIS3DH_GetFifoData(u8_t * val) { u8_t index = 0; u8_t fss = 0; u8_t ovrun; LIS3DH_GetFifoSourceBit(LIS3DH_FIFO_SRC_OVRUN, &ovrun); /* Read transaction */ LIS3DH_GetFifoSourceFSS(&fss);//这里打印函数内的value是零 if(MEMS_SET == ovrun)//MEMS_SET = 1 { fss = ACC_DATA_LEN; } fss = (fss >> 2) << 2; Report("FSS len %d, ovrun:%d\n\r", fss, ovrun);// 这里打印fss 的值为零,ovrun也是零 for(index = 0; index < fss; index ++) { //ASSERT(LIS3DH_GetFifoSourceFSS(val)); LIS3DH_GetAccAxesRaw(accData+index);//这里是自己封装的读取XYZ轴的原始数据,单独使用验证过正确; } *val = fss; LIS3DH_FIFOModeEnable(LIS3DH_FIFO_BYPASS_MODE);//清空FIFO数据,以备再次写入数据。 LIS3DH_FIFOModeEnable(LIS3DH_FIFO_MODE); } 为什么以上函数中,从寄存器FIFO_SRC_REG(2FH)读取的fss值一直是零呢?是不是少初始化了什么? help,急急急! |
我现在也遇到这个问题了 lz当时怎么解决的 好着急 |