已回答假定已回答

ADXL372初始化的一些问题

edc 在 2018-5-11 詢問的問題

ADXL372振动数据采集传感器,MPU使用的stm32L4系列,使用了ADXL372的官方给的函数库。

问题1:初始化需要写5遍,否则不能正常读数。

问题2:若重新上电,则进入硬件中断,无法工作。

问题3:FIFO BYPASSED模式可以使用adxl372_get_accel_data()采集么,还是必须使用中断。

//=========================== include =========================================

#include "board.h"

#include "timers.h"

#include "scheduler.h"

#include "applications.h"

#include "vibration.h"

//=========================== main ============================================

int main(void)

{

   /* Initialize. */

   board_init();

   timers_init();

   scheduler_init();

 

   adxl372_dev *dev;

   adxl372_init_param param;

 

   param.spi_init = hspi2.Init;

   param.bw                        = ADXL372_BW_1600HZ;

   param.odr                       = ADXL372_ODR_3200HZ;

   param.op_mode                   = ADXL372_FULL_BW_MEASUREMENT;

   param.fifo_config.fifo_mode     = ADXL372_FIFO_BYPASSED;

   param.fifo_config.fifo_samples  = 0 ;

   adxl372_xyz_accel_data temp[1]={0};

 

   dev->spi_desc = &hspi2;

   adxl372_init(&dev, param);

   adxl372_init(&dev, param);

   adxl372_init(&dev, param);

   adxl372_init(&dev, param);

   adxl372_init(&dev, param);

 

   while(1){

   for(int i=0;i<6400;i++){

   adxl372_get_accel_data(dev, temp);

   }

   led_toggle();

   HAL_Delay(1000);

   }

   return 0;

}

 

 

int32_t adxl372_get_accel_data(adxl372_dev *dev,

       adxl372_xyz_accel_data *accel_data)

{

uint8_t buf[6];

uint8_t status1, status2;

uint16_t fifo_entries;

int32_t ret=0;

 

do {

adxl372_get_status(dev, &status1, &status2, &fifo_entries);

} while(!(ADXL372_STATUS_1_DATA_RDY(status1)));

 

 

ret = adxl372_spi_reg_read_multiple(dev,

    ADXL372_X_DATA_H,

    buf, 6);

 

if (ret)

return -1;

 

accel_data->x = (buf[0] << 4) | (buf[1] >> 4);

accel_data->y = (buf[2] << 4) | (buf[3] >> 4);

accel_data->z = (buf[4] << 4) | (buf[5] >> 4);

 

return ret;

}

結果