3800|5

4

帖子

0

资源

一粒金砂(初级)

STM32驱动LSM6DSL,读FIFO数据一直为0 [复制链接]

我用STM32 SPI驱动LSM6DSL读取加速度计和陀螺仪数据
如果不使用FIFO,用其输出源寄存器 OUTX_L_G OUTX_H_G等等   读取的数据没有问题的
配置如下
  1. uint8_t whoami,rst;
  2.         memset(&md_cfg,0,sizeof(md_cfg));
  3.         memset(&int1_ctrl,0,sizeof(int1_ctrl));
  4.        
  5.         lsm6dsl_ctx.read_reg = mt_Spi_Read;
  6.         lsm6dsl_ctx.write_reg = mt_Spi_Write;
  7.         lsm6dsl_device_id(&lsm6dsl_ctx, &whoami);
  8.         if ( whoami != LSM6DSL_ID )
  9.         {
  10.                 while(1)
  11.                 {
  12.                         printf("lsm6dsl not found\n");
  13.                         Delay_ms(500);
  14.                 }
  15.         }
  16.         printf("detect lsm6dsl success Device ID = %02x\n",whoami);
  17.         lsm6dsl_reset_set(&lsm6dsl_ctx, PROPERTY_ENABLE);//复位--恢复默认配置
  18.         do
  19.         {
  20.                 lsm6dsl_reset_get(&lsm6dsl_ctx, &rst);
  21.         } while (rst);
  22. //正常读配置
  23.         lsm6dsl_xl_full_scale_set(&lsm6dsl_ctx, FS_8g);//配置加速度满量程
  24.     lsm6dsl_gyro_full_scale_set(&lsm6dsl_ctx, FS_2000dps);//配置角速度满量程
  25.     lsm6dsl_block_data_update_set(&lsm6dsl_ctx, PROPERTY_ENABLE);//使能BDU  即读完后才更新数据
  26.     lsm6dsl_xl_data_rate_set(&lsm6dsl_ctx, XL_1kHz66Hz);//设置ODR 并开启加速度计
  27. lsm6dsl_gyro_data_rate_set(&lsm6dsl_ctx, GY_1kHz66Hz);//设置ODR 并开启陀螺仪
复制代码






但是我用FIFO定时去读取,读出来的数据一直是零,包括FIFO_DIFF_[10:0] FIFO中未读数据的个数也是零
感觉就是FIFO没有起来,但是过了几秒钟。通过读FIFO_SMART_FULL    FIFO就要满了,奇怪的是次数FIFO中的未读数据还是零
FIFO配置如下:
  1. uint8_t whoami,rst;
  2.   
  3.         memset(&md_cfg,0,sizeof(md_cfg));
  4.         memset(&int1_ctrl,0,sizeof(int1_ctrl));
  5.        
  6.         lsm6dsl_ctx.read_reg = mt_Spi_Read;
  7.         lsm6dsl_ctx.write_reg = mt_Spi_Write;
  8.         lsm6dsl_device_id(&lsm6dsl_ctx, &whoami);
  9.         if ( whoami != LSM6DSL_ID )
  10.         {
  11.                 while(1)
  12.                 {
  13.                         printf("lsm6dsl not found\n");
  14.                         Delay_ms(500);
  15.                 }
  16.         }
  17.         printf("detect lsm6dsl success Device ID = %02x\n",whoami);
  18.         lsm6dsl_reset_set(&lsm6dsl_ctx, PROPERTY_ENABLE);//复位--恢复默认配置
  19.         do
  20.         {
  21.                 lsm6dsl_reset_get(&lsm6dsl_ctx, &rst);
  22.         } while (rst);
  23.        
  24.        
  25.        
  26.         //配置FIFO
  27.         lsm6dsl_fifo_mode_set(&lsm6dsl_ctx,BYPASS);
  28.    
  29.     lsm6dsl_block_data_update_set(&lsm6dsl_ctx, PROPERTY_ENABLE);//使能BDU
  30.    
  31.     //IF_INC=1(CTRL3_C)
  32.     lsm6dsl_auto_increment_set(&lsm6dsl_ctx,PROPERTY_ENABLE);//使能IF_INC
  33.    
  34.         //rounding gyro+xl
  35.     lsm6dsl_rounding_mode_set(&lsm6dsl_ctx,GYRO_XL);
  36.        
  37.        
  38.     //设置FIFO触发 FIFO ODR和DEC
  39.     //1.有效数据信号用于写FIFO当XL/Gyro数据准备或者步数检测  DATA_VALID_SEL_FIFO=0
  40.     lsm6dsl_fifo_data_valid_set(&lsm6dsl_ctx,XL_GY_DRDY_STEP_DETECT);
  41.     //2.使能写FIFO基于XL/Gyro数据准备 TIMER_PEDO_FIFO_DRDY
  42.     lsm6dsl_fifo_write_mode_set(&lsm6dsl_ctx,ON_DRDY);
  43.    
  44.    
  45.     //2.设置FIFO ODR  F(ODR) = min(max(ODR_XL,ODR_G),ODR_FIFO)
  46.     lsm6dsl_fifo_data_rate_set(&lsm6dsl_ctx,FIFO_52Hz);
  47.     //3.FIFO_CTRL3和FIFO_CTRL4--DEC 每一笔数据都将存储FIFO
  48.     lsm6dsl_xl_decimation_set(&lsm6dsl_ctx,XL_NO_DEC);
  49.     lsm6dsl_gyro_decimation_set(&lsm6dsl_ctx,GY_NO_DEC);
  50.    
  51.     //FIFO深度不受阈值影响
  52.     lsm6dsl_fifo_stop_on_thr_set(&lsm6dsl_ctx,PROPERTY_DISABLE);
  53.    
  54.     //2.FIFO_CTRL5--FIFO_ODR    设置FIFO_ODR=52HZ  
  55.     lsm6dsl_xl_full_scale_set(&lsm6dsl_ctx, FS_8g);//配置加速度满量程
  56.     lsm6dsl_gyro_full_scale_set(&lsm6dsl_ctx, FS_2000dps);//配置角速度满量程
  57.     lsm6dsl_xl_data_rate_set(&lsm6dsl_ctx, XL_52Hz);//设置ODR 并开启加速度计
  58.     lsm6dsl_gyro_data_rate_set(&lsm6dsl_ctx, GY_52Hz);//设置ODR 并开启陀螺仪
  59.    
  60.     //3.FIFO_CTRL5--FIFO MODE   设置FIFO MODE 为当FIFO满时停止放入数据
  61.     lsm6dsl_fifo_mode_set(&lsm6dsl_ctx,CONTINUOS);
复制代码





求大神指导下,为何FIFO起不来,看了ST的LSM6DSL应用笔记,试了很多次  不知道为何FIFO读出来的数据总是零,包括FIFO中的未读数据FIFO_DIFF[10:0]也是零 很奇怪。。。




回复

4

帖子

0

资源

一粒金砂(初级)

我用的官方1.8的驱动

回复

4

帖子

0

资源

一粒金砂(初级)

ok  解决了 改用1.6驱动了。。。

回复

3

帖子

0

资源

一粒金砂(初级)

1.6的驱动哪里可以参考?我想通过FIFO触发中断,现在一直无法触发中断,想参考一下

回复

9936

帖子

21

资源

版主

我找到一个1.5的
lsm6dsl.rar (38.97 KB, 下载次数: 43)
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾

回复

5134

帖子

236

资源

管理员

@ruson525 看楼上

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表