3308|0

9790

帖子

24

TA的资源

版主

楼主
 

LSM6DSL 单、双击检测 STMems_Standard_C_drivers库 [复制链接]

 工程使用NUCLEO-L4R5ZI测试
程序参考了STM32CubeExpansion MEMS-XT1的SingleDoubleTap
  1. void single_double_tap(uint8_t double_mode)
  2. {
  3.   lsm6dsl_all_sources_t lsm6dsl_all_sources;
  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_416Hz);
  33.   /*
  34.    * Set full scale
  35.    */  
  36.   lsm6dsl_xl_full_scale_set(&dev_ctx, LSM6DSL_2g);
  37.   /* Enable x direction in tap recognition. */
  38.   lsm6dsl_tap_detection_on_x_set(&dev_ctx,PROPERTY_ENABLE);
  39.   /* Enable y direction in tap recognition. */
  40.   lsm6dsl_tap_detection_on_y_set(&dev_ctx,PROPERTY_ENABLE);
  41.   /* Enable z direction in tap recognition. */
  42.   lsm6dsl_tap_detection_on_z_set(&dev_ctx,PROPERTY_ENABLE);
  43.   /* Set tap threshold. LSM6DSL_TAP_THRESHOLD_MID_LOW 08*/
  44.   lsm6dsl_tap_threshold_x_set(&dev_ctx,0x08);
  45.   /*双击*/
  46.   if(double_mode == 1)
  47.   {   
  48.     /* Set tap shock time window. LSM6DSL_TAP_SHOCK_TIME_HIGH      0x03*/
  49.     lsm6dsl_tap_shock_set(&dev_ctx,0x03);
  50.     /* Set tap quiet time window. LSM6DSL_TAP_QUIET_TIME_HIGH      0x03*/
  51.     lsm6dsl_tap_quiet_set(&dev_ctx,0x03);
  52.     /* Set tap duration time window. LSM6DSL_TAP_DURATION_TIME_MID       0x08*/
  53.     lsm6dsl_tap_dur_set(&dev_ctx,0x08);
  54.     lsm6dsl_tap_mode_set(&dev_ctx,LSM6DSL_BOTH_SINGLE_DOUBLE);
  55.     /*
  56.      * 中断
  57.      */  
  58.     lsm6dsl_int1_route_t lsm6dsl_int1_route;
  59.     lsm6dsl_int1_route.int1_double_tap = PROPERTY_ENABLE;
  60.     lsm6dsl_pin_int1_route_set(&dev_ctx,lsm6dsl_int1_route);
  61.   }
  62.   /*单击*/
  63.   else
  64.   {   
  65.    
  66.     /* Set tap shock time window. LSM6DSL_TAP_SHOCK_TIME_MID_HIGH  0x02*/
  67.     lsm6dsl_tap_shock_set(&dev_ctx,0x02);
  68.     /* Set tap quiet time window. LSM6DSL_TAP_QUIET_TIME_MID_LOW   0x01*/
  69.     lsm6dsl_tap_quiet_set(&dev_ctx,0x01);
  70.     /* Reset tap duration time window.*/
  71.     lsm6dsl_tap_dur_set(&dev_ctx,0x00);
  72.     /*
  73.      * 中断
  74.      */  
  75.     lsm6dsl_int1_route_t lsm6dsl_int1_route;
  76.     lsm6dsl_int1_route.int1_single_tap = PROPERTY_ENABLE;
  77.     lsm6dsl_pin_int1_route_set(&dev_ctx,lsm6dsl_int1_route);
  78.   }
  79.   
  80.   while(1)
  81.   {
  82.     if(int1_flag == 1)
  83.     {
  84.       int1_flag = 0;
  85.       lsm6dsl_all_sources_get(&dev_ctx,&lsm6dsl_all_sources);
  86.       
  87.       if(double_mode == 1)
  88.       {
  89.         if(lsm6dsl_all_sources.reg.tap_src.double_tap == 1)
  90.         {         
  91.             snprintf(data_out, MAX_BUF_SIZE, "Double tap indication.\r\n");
  92.             tx_com((uint8_t*)data_out, strlen(data_out));
  93.         }
  94.       }
  95.       else
  96.       {        
  97.         if(lsm6dsl_all_sources.reg.tap_src.single_tap == 1)
  98.         {
  99.             snprintf(data_out, MAX_BUF_SIZE, "Single tap indication.\r\n");
  100.             tx_com((uint8_t*)data_out, strlen(data_out));
  101.         }
  102.       }
  103.     }
  104.    
  105.   }
  106. }
复制代码



工程文件:
lsm6dsl single double tap stm32l4r5 .rar (1.64 MB, 下载次数: 20)
点赞 关注
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表