[原创] ST-MEMS传感器驱动移植

电子烂人   2024-6-12 15:19 楼主

最近在用ST的传感器和开发板做东西,在这里写点移植的教程给学弟参考用,参考了好多帖子和文章,可能有雷同,如有错误请大佬指出

 

所用板卡:nucleo-H563ZI

所用传感器:MK192(lsm6dso)

开发环境:STM32CUBEIDE

 

在cubeide里新建一个工程,选择板卡为H563:

微信截图_20240612130540.png
这个板卡的晶振是配置好的,只需要配置基本的DEBUG
微信截图_20240612130956.png
由于需要和传感器通信,所以额外配置一组I2C,速度选择FAST(400KHZ):
image.png  
 

双击Middleware 中的MEMS进入包选择LSM6DSOX,通信方式选择I2C:

image.png    

 

使能ACCGYR,并连接到I2C上,我用的IKS01A1的mems板,故引脚为PB8\PB9

image.png  

保存以生成代码,H5有icache,我们这里不用,直接生成代码

这样工程就建好了,不过还没有传感器的驱动,需要再新建一个示例工程:

这里以    U575的"Active Time "为例:

1718169872457.png  

这个工程导入后如图,我们需要移植图中的三个文件到H5的工程目录下

   image.png  

复制如图的几个文件:

image.png  

复制后还需要导入到工程中:

image.png  

image.png  

同时在SOURE里添加代码所在的文件夹

image.png  

先写这样  ,备考四六级去了,等我回来再更新

 

本帖最后由 电子烂人 于 2024-6-14 14:08 编辑
没用比没有强

回复评论 (7)

四六级一起备考啊

祝楼主考好,归来继续更新,哈哈

点赞  2024-6-14 17:06

st传感器的例程封装挺深的,会移植也是很不错的~

点赞  2024-6-14 17:24
用多了mdk,感觉eclipse下面添加文件,也是挺麻烦的事。
点赞  2024-6-15 06:19
引用: lugl4313820 发表于 2024-6-15 06:19 用多了mdk,感觉eclipse下面添加文件,也是挺麻烦的事。

eclipse下面添加文件是不是不用主动添加啊,只要放到文件夹上刷新一下就出来了

在爱好的道路上不断前进,在生活的迷雾中播撒光引
点赞  2024-6-17 09:11
引用: 秦天qintian0303 发表于 2024-6-17 09:11 eclipse下面添加文件是不是不用主动添加啊,只要放到文件夹上刷新一下就出来了

有时会提示找不到文件,可能我没有用习惯,有时好象给的是快捷方式。

点赞  2024-6-17 10:13
引用: lugl4313820 发表于 2024-6-17 10:13 有时会提示找不到文件,可能我没有用习惯,有时好象给的是快捷方式。

一定要放到已经添加路径下面,找不到文件可能就是没有添加路径

在爱好的道路上不断前进,在生活的迷雾中播撒光引
点赞  2024-6-17 10:55

继续回来更新:
生成代码后会发现,根目录多了一个
x-cube-mems1的文件夹,里面包含几种传感器
image-20240620221239-1.png  

先来介绍下这三个代码文件的含义:

1.Custom_mems_conf_app.h:这里面包含了传感器的几种参数,如量程、速度等;


#ifdef USE_CUSTOM_MOTION_SENSOR_LSM6DSO_0
  #if (USE_CUSTOM_MOTION_SENSOR_LSM6DSO_0 == 1)
    #ifndef CUSTOM_ACC_INSTANCE_0
      #define CUSTOM_ACC_INSTANCE_0 CUSTOM_LSM6DSO_0
      #define CUSTOM_ACC_INSTANCE_NAME_0 "LSM6DSO"
      #define CUSTOM_ACC_INSTANCE_ODR_0 {10, 12.5, 26, 52, 104, 208, 417, 833, 1667, 3333, 6667} /* Hz */
      #define CUSTOM_ACC_INSTANCE_FS_0 {4, 2, 4, 8, 16} /* g */
      #ifndef ACC_GYR_UNICLEO_ID
        #define ACC_GYR_UNICLEO_ID LSM6DSO_UNICLEO_ID
      #endif
    #endif
    #ifndef CUSTOM_GYR_INSTANCE_0
      #define CUSTOM_GYR_INSTANCE_0 CUSTOM_LSM6DSO_0
      #define CUSTOM_GYR_INSTANCE_NAME_0 "LSM6DSO"
      #define CUSTOM_GYR_INSTANCE_ODR_0 {10, 12.5, 26, 52, 104, 208, 417, 833, 1667, 3333, 6667} /* Hz */
      #define CUSTOM_GYR_INSTANCE_FS_0 {5, 125, 250, 500, 1000, 2000} /* dps */
      #ifndef ACC_GYR_UNICLEO_ID
        #define ACC_GYR_UNICLEO_ID LSM6DSO_UNICLEO_ID
      #endif
    #endif
  #endif
#endif

2. Custom_mems_conf.h:这里面包含着传感器的初始化、读取写入等指令操作

#define USE_CUSTOM_MOTION_SENSOR_LSM6DSO_0        0U


#define CUSTOM_LSM6DSO_0_I2C_Init BSP_I2C1_Init
#define CUSTOM_LSM6DSO_0_I2C_DeInit BSP_I2C1_DeInit
#define CUSTOM_LSM6DSO_0_I2C_ReadReg BSP_I2C1_ReadReg
#define CUSTOM_LSM6DSO_0_I2C_WriteReg BSP_I2C1_WriteReg

#ifdef __cplusplus
}
#endif

3.sensor_unicleo.h:这里面包含着诸多传感器的UNICLEO_ID用于 Unicleo-GUI 应用程序区分诸多传感器。

#define LSM6DSO_UNICLEO_ID          7

 

本帖最后由 电子烂人 于 2024-6-21 01:44 编辑
没用比没有强
点赞  2024-6-20 22:11
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复