6250|6

9798

帖子

24

TA的资源

版主

楼主
 

LSM6DSL读取数据STM32L4R5中断方式 [复制链接]

 
使用STMems_Standard_C_drivers库
先通过lsm6dsl_pin_int1_route_set(&dev_ctx,lsm6dsl_int1_route);函数设置传感器DRDY中断输出引脚为INT1
再循环检测INT1引脚电平,产生中断后先读取状态寄存器再读取加速度、陀螺仪和温度传感器数据
  1. /* datalog_int1 Example --------------------------------------------------------------*/
  2. void datalog_int1(void)
  3. {
  4.   /*
  5.    *  Initialize mems driver interface
  6.    */
  7.   dev_ctx.write_reg = platform_write;
  8.   dev_ctx.read_reg = platform_read;
  9.   dev_ctx.handle = &hi2c1;  
  10.   
  11.   /*
  12.    *  Check device ID
  13.    */
  14.   whoamI = 0;
  15.   lsm6dsl_device_id_get(&dev_ctx, &whoamI);
  16.   if ( whoamI != LSM6DSL_ID )
  17.     while(1); /*manage here device not found */
  18.   /*
  19.    *  Restore default configuration
  20.    */
  21.   lsm6dsl_reset_set(&dev_ctx, PROPERTY_ENABLE);
  22.   do {
  23.     lsm6dsl_reset_get(&dev_ctx, &rst);
  24.   } while (rst);
  25.   /*
  26.    *  Enable Block Data Update
  27.    */
  28.   lsm6dsl_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);
  29.   /*
  30.    * Set Output Data Rate
  31.    */
  32.   lsm6dsl_xl_data_rate_set(&dev_ctx, LSM6DSL_XL_ODR_12Hz5);
  33.   lsm6dsl_gy_data_rate_set(&dev_ctx, LSM6DSL_GY_ODR_12Hz5);
  34.   /*
  35.    * Set full scale
  36.    */  
  37.   lsm6dsl_xl_full_scale_set(&dev_ctx, LSM6DSL_2g);
  38.   lsm6dsl_gy_full_scale_set(&dev_ctx, LSM6DSL_2000dps);
  39.   
  40.   /*
  41.    * Configure filtering chain(No aux interface)
  42.    */  
  43.   /* Accelerometer - analog filter */
  44.   lsm6dsl_xl_filter_analog_set(&dev_ctx, LSM6DSL_XL_ANA_BW_400Hz);
  45.   
  46.   /* Accelerometer - LPF1 path ( LPF2 not used )*/
  47.   //lsm6dsl_xl_lp1_bandwidth_set(&dev_ctx, LSM6DSL_XL_LP1_ODR_DIV_4);
  48.   
  49.   /* Accelerometer - LPF1 + LPF2 path */   
  50.   lsm6dsl_xl_lp2_bandwidth_set(&dev_ctx, LSM6DSL_XL_LOW_NOISE_LP_ODR_DIV_100);
  51.   
  52.   /* Accelerometer - High Pass / Slope path */
  53.   //lsm6dsl_xl_reference_mode_set(&dev_ctx, PROPERTY_DISABLE);
  54.   //lsm6dsl_xl_hp_bandwidth_set(&dev_ctx, LSM6DSL_XL_HP_ODR_DIV_100);
  55.   
  56.   /* Gyroscope - filtering chain */
  57.   lsm6dsl_gy_band_pass_set(&dev_ctx, LSM6DSL_HP_260mHz_LP1_STRONG);
  58.   
  59.   //使能加速度和陀螺仪DRDY中断
  60.   lsm6dsl_int1_route_t lsm6dsl_int1_route;
  61.   lsm6dsl_int1_route.int1_drdy_xl = 1;
  62.   lsm6dsl_int1_route.int1_drdy_g = 1;
  63.   lsm6dsl_pin_int1_route_set(&dev_ctx,lsm6dsl_int1_route);
  64.   /*
  65.    * Read samples in polling mode (no int)
  66.    */
  67.   while(1)
  68.   {
  69.     if(int1_flag == 1)
  70.     {
  71.       int1_flag = 0;
  72.       /*
  73.        * Read output only if new value is available
  74.        */
  75.       lsm6dsl_reg_t reg;
  76.       lsm6dsl_status_reg_get(&dev_ctx, ®.status_reg);
  77.       if (reg.status_reg.xlda)
  78.       {
  79.         /* Read magnetic field data */
  80.         memset(data_raw_acceleration.u8bit, 0x00, 3*sizeof(int16_t));
  81.         lsm6dsl_acceleration_raw_get(&dev_ctx, data_raw_acceleration.u8bit);
  82.         acceleration_mg[0] = LSM6DSL_FROM_FS_2g_TO_mg( data_raw_acceleration.i16bit[0]);
  83.         acceleration_mg[1] = LSM6DSL_FROM_FS_2g_TO_mg( data_raw_acceleration.i16bit[1]);
  84.         acceleration_mg[2] = LSM6DSL_FROM_FS_2g_TO_mg( data_raw_acceleration.i16bit[2]);
  85.         
  86.         sprintf((char*)tx_buffer, "Acceleration [mg]:%4.2f\t%4.2f\t%4.2f\r\n",
  87.                 acceleration_mg[0], acceleration_mg[1], acceleration_mg[2]);
  88.         tx_com( tx_buffer, strlen( (char const*)tx_buffer ) );
  89.       }
  90.       if (reg.status_reg.gda)
  91.       {
  92.         /* Read magnetic field data */
  93.         memset(data_raw_angular_rate.u8bit, 0x00, 3*sizeof(int16_t));
  94.         lsm6dsl_angular_rate_raw_get(&dev_ctx, data_raw_angular_rate.u8bit);
  95.         angular_rate_mdps[0] = LSM6DSL_FROM_FS_2000dps_TO_mdps(data_raw_angular_rate.i16bit[0]);
  96.         angular_rate_mdps[1] = LSM6DSL_FROM_FS_2000dps_TO_mdps(data_raw_angular_rate.i16bit[1]);
  97.         angular_rate_mdps[2] = LSM6DSL_FROM_FS_2000dps_TO_mdps(data_raw_angular_rate.i16bit[2]);
  98.         
  99.         sprintf((char*)tx_buffer, "Angular rate [mdps]:%4.2f\t%4.2f\t%4.2f\r\n",
  100.                 angular_rate_mdps[0], angular_rate_mdps[1], angular_rate_mdps[2]);
  101.         tx_com( tx_buffer, strlen( (char const*)tx_buffer ) );
  102.       }   
  103.       if (reg.status_reg.tda)
  104.       {   
  105.         /* Read temperature data */
  106.         memset(data_raw_temperature.u8bit, 0x00, sizeof(int16_t));
  107.         lsm6dsl_temperature_raw_get(&dev_ctx, data_raw_temperature.u8bit);
  108.         temperature_degC = LSM6DSL_FROM_LSB_TO_degC( data_raw_temperature.i16bit );
  109.          
  110.         sprintf((char*)tx_buffer, "Temperature [degC]:%6.2f\r\n", temperature_degC );
  111.         tx_com( tx_buffer, strlen( (char const*)tx_buffer ) );
  112.       }
  113.     }
  114.   }
  115. }
复制代码



工程文件:
stm32l4r5 datalog int1.rar (9.52 MB, 下载次数: 305)

最新回复

请问你问题解决了嘛?我也遇到类似的问题了,可以进中断但过一个时间段会卡死   详情 回复 发表于 2019-11-7 09:15
点赞 关注
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 

回复
举报

875

帖子

1

TA的资源

纯净的硅(高级)

沙发
 
能给我一个联系方式吗?扣扣或者微信都行,有几个地方没有搞懂或者你家我的扣扣921288716,谢谢

点评

144050柒22酒 低消息不能插图片,低通,低噪声,带宽为ODR/100 [attachimg]362086[/attachimg] [attachimg]362085[/attachimg] [attachimg]362084[/attachimg]  详情 回复 发表于 2018-7-3 17:48
 
 
 

回复

9798

帖子

24

TA的资源

版主

板凳
 
曹伟1993 发表于 2018-7-3 16:08
能给我一个联系方式吗?扣扣或者微信都行,有几个地方没有搞懂或者你家我的扣扣921288716,谢谢

144050柒22酒
消息不能插图片,低通,低噪声,带宽为ODR/100





个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

31

帖子

0

TA的资源

一粒金砂(中级)

4
 

请问为什么我用同样的方式利用中断读取数据,中断只能进入一次,下面是我的配置代码:

  lsm9ds1_pin_int1_route_t lsm9ds1_pin_int1_route;
  lsm9ds1_pin_int1_route.int1_ig_xl = 1;
  lsm9ds1_pin_int1_route.int1_drdy_xl = 1;
  lsm9ds1_pin_int1_route_set(&dev_ctx_imu, lsm9ds1_pin_int1_route);

点评

数据要在下次中断出发前读取  详情 回复 发表于 2019-11-8 09:04
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

5
 
duguyining 发表于 2019-8-1 11:14 请问为什么我用同样的方式利用中断读取数据,中断只能进入一次,下面是我的配置代码:   lsm9ds1_p ...

请问你问题解决了嘛?我也遇到类似的问题了,可以进中断但过一个时间段会卡死

点评

数据要在下次中断出发前读取  详情 回复 发表于 2019-11-8 09:05
 
 
 

回复

9798

帖子

24

TA的资源

版主

6
 
duguyining 发表于 2019-8-1 11:14
请问为什么我用同样的方式利用中断读取数据,中断只能进入一次,下面是我的配置代码:

  lsm9ds1_p ...

数据要在下次中断出发前读取
 
 
 

回复

9798

帖子

24

TA的资源

版主

7
 
houlai 发表于 2019-11-7 09:15
请问你问题解决了嘛?我也遇到类似的问题了,可以进中断但过一个时间段会卡死

数据要在下次中断出发前读取
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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