drv_lsm6ds3tr_c.h 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. #ifndef __DRV_LSM6DS3TR_C_H__
  2. #define __DRV_LSM6DS3TR_C_H__
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. /*Includes ------------------------------------------------------*/
  7. #include <stdint.h>
  8. #include <stdio.h>
  9. #include <stdbool.h>
  10. #include "lsm6ds3tr-c_reg.h"
  11. /*STRUCTION -----------------------------------------------------*/
  12. typedef enum{
  13. LSM_ACC_ODR_OFF = LSM6DS3TR_C_XL_ODR_OFF, //关闭加速度
  14. LSM_ACC_ODR_12HZ5 = LSM6DS3TR_C_XL_ODR_12Hz5, //采样频率 - 12.5赫兹
  15. LSM_ACC_ODR_104HZ = LSM6DS3TR_C_XL_ODR_104Hz, //采样频率 - 104赫兹
  16. LSM_ACC_ODR_208HZ = LSM6DS3TR_C_XL_ODR_208Hz, //采样频率 - 208赫兹
  17. LSM_ACC_ODR_416HZ = LSM6DS3TR_C_XL_ODR_416Hz, //采样频率 - 416赫兹
  18. LSM_ACC_ODR_833HZ = LSM6DS3TR_C_XL_ODR_833Hz, //采样频率 - 833赫兹
  19. } LSM_ACC_ODR_e;
  20. typedef enum{
  21. LSM_GRY_ODR_OFF = LSM6DS3TR_C_GY_ODR_OFF, //关闭陀螺仪
  22. LSM_GRY_ODR_12HZ5 = LSM6DS3TR_C_GY_ODR_12Hz5, //采样频率 - 12.5赫兹
  23. LSM_GRY_ODR_104HZ = LSM6DS3TR_C_GY_ODR_104Hz, //采样频率 - 104赫兹
  24. LSM_GRY_ODR_208HZ = LSM6DS3TR_C_GY_ODR_208Hz, //采样频率 - 208赫兹
  25. LSM_GRY_ODR_416HZ = LSM6DS3TR_C_GY_ODR_416Hz, //采样频率 - 416赫兹
  26. LSM_GRY_ODR_833HZ = LSM6DS3TR_C_GY_ODR_833Hz, //采样频率 - 833赫兹
  27. } LSM_GRY_ODR_e;
  28. typedef enum{
  29. LSM_MAG_ODR_OFF = 0x00, //关闭地磁计
  30. LSM_MAG_ODR_10HZ = 0x31, //采样频率 - 10赫兹
  31. LSM_MAG_ODR_100HZ = 0x39, //采样频率 - 100赫兹
  32. LSM_MAG_ODR_200HZ = 0x3D, //采样频率 - 200赫兹
  33. } LSM_MAG_ODR_e;
  34. typedef enum{
  35. LSM_FIFO_ODR_OFF = LSM6DS3TR_C_FIFO_DISABLE, //关闭FIFO
  36. LSM_FIFO_ODR_12HZ5 = LSM6DS3TR_C_FIFO_12Hz5, //采样频率 - 12.5赫兹
  37. LSM_FIFO_ODR_104HZ = LSM6DS3TR_C_FIFO_104Hz, //采样频率 - 104赫兹
  38. LSM_FIFO_ODR_208HZ = LSM6DS3TR_C_FIFO_208Hz, //采样频率 - 208赫兹
  39. LSM_FIFO_ODR_416HZ = LSM6DS3TR_C_FIFO_416Hz, //采样频率 - 416赫兹
  40. LSM_FIFO_ODR_833HZ = LSM6DS3TR_C_FIFO_833Hz, //采样频率 - 833赫兹
  41. } LSM_FIFO_ODR_e;
  42. typedef enum{
  43. LSM_ACC_POWER_MODE_HIGH_PERFORMANCE = LSM6DS3TR_C_XL_HIGH_PERFORMANCE, //加速度工作模式 - 高性能
  44. LSM_ACC_POWER_MODE_NORMAL = LSM6DS3TR_C_XL_NORMAL, //加速度工作模式 - 正常
  45. } LSM_ACC_POWER_MODE_e;
  46. typedef enum{
  47. LSM_GRY_POWER_MODE_HIGH_PERFORMANCE = LSM6DS3TR_C_GY_HIGH_PERFORMANCE, //陀螺仪工作模式 - 高性能
  48. LSM_GRY_POWER_MODE_NORMAL = LSM6DS3TR_C_GY_NORMAL, //陀螺仪工作模式 - 正常
  49. } LSM_GRY_POWER_MODE_e;
  50. typedef enum{
  51. LSM_TIMESTAMP_6MS4 = LSM6DS3TR_C_LSB_6ms4, //时间戳精度 - 6.4毫秒
  52. LSM_TIMESTAMP_25US = LSM6DS3TR_C_LSB_25us, //时间戳精度 - 25微妙
  53. } LSM_TIMESTAMP_RESOLUTION_e;
  54. typedef enum{
  55. LSM_TIMESTAMP_OFF = 0, //时间戳关闭
  56. LSM_TIMESTAMP_ON = 1, //时间戳开启
  57. } LSM_TIMESTAMP_SWITCH_e;
  58. typedef enum{
  59. LSM_ACC_FS_2G = LSM6DS3TR_C_2g, //量程 - 2倍重力加速度
  60. LSM_ACC_FS_16G = LSM6DS3TR_C_16g, //量程 - 16倍重力加速度
  61. } LSM_ACC_FS_e;
  62. typedef enum{
  63. LSM_GRY_FS_250DPS = LSM6DS3TR_C_250dps, //量程 - 250角速度/秒
  64. LSM_GRY_FS_2000DPS = LSM6DS3TR_C_2000dps, //量程 - 2000角速度/秒
  65. } LSM_GRY_FS_e;
  66. typedef enum{
  67. LSM_MAG_FS_30GS = 0x00, //量程 - 30高斯
  68. } LSM_MAG_FS_e;
  69. typedef struct
  70. {
  71. LSM_ACC_POWER_MODE_e acc_power_mode; //加速度工作模式
  72. LSM_GRY_POWER_MODE_e gry_power_mode; //陀螺仪工作模式
  73. LSM_FIFO_ODR_e fifo_odr; //FIFO采样频率
  74. LSM_TIMESTAMP_RESOLUTION_e timestamp_resolution; //时间戳精度
  75. LSM_TIMESTAMP_SWITCH_e timestamp_switch; //时间戳开关,注:时间戳采样率和FIFO采样率一致
  76. LSM_ACC_ODR_e acc_odr; //加速度采样频率
  77. LSM_GRY_ODR_e gry_odr; //陀螺仪采样频率
  78. LSM_MAG_ODR_e mag_odr; //地磁计采样频率
  79. LSM_ACC_FS_e acc_fs; //加速度量程
  80. LSM_GRY_FS_e gry_fs; //陀螺仪量程
  81. LSM_MAG_FS_e mag_fs; //地磁计量程
  82. } drv_lsm_config_param_t;
  83. typedef struct
  84. {
  85. int16_t acc[3]; //加速度三轴
  86. int16_t gry[3]; //陀螺仪三轴
  87. int16_t mag[3]; //地磁计三轴
  88. int32_t fifo_timestamp; //fifo时间戳
  89. } lsm_data_t;
  90. /*API -------------------------------------------------------*/
  91. /**
  92. @brief 初始化LSM驱动
  93. @param 无
  94. @return 错误代码 - [out] -1失败,0成功
  95. */
  96. int drv_lsm_Init(void);
  97. /**
  98. @brief LSM断电
  99. @param 无
  100. @return 错误代码 - [out] -1失败,0成功
  101. */
  102. int drv_lsm_power_off(void);
  103. /**
  104. @brief LSM上电(默认配置挂起)
  105. @param 无
  106. @return 错误代码 - [out] -1失败,0成功
  107. */
  108. int drv_lsm_power_on(void);
  109. /**
  110. @brief 设置加速度工作模式
  111. @param acc_power_mode - [in] 加速度工作模式
  112. @return 错误代码 - [out] -1失败,0成功
  113. */
  114. int drv_lsm_set_acc_power_mode(LSM_ACC_POWER_MODE_e acc_power_mode);
  115. /**
  116. @brief 设置陀螺仪工作模式
  117. @param gry_power_mode - [in] 陀螺仪工作模式
  118. @return 错误代码 - [out] -1失败,0成功
  119. */
  120. int drv_lsm_set_gry_power_mode(LSM_GRY_POWER_MODE_e gry_power_mode);
  121. /**
  122. @brief 设置时间戳精度
  123. @param timestamp_resolution - [in] 时间戳精度
  124. @return 错误代码 - [out] -1失败,0成功
  125. */
  126. int drv_lsm_set_timestamp_resolution(LSM_TIMESTAMP_RESOLUTION_e timestamp_resolution);
  127. /**
  128. @brief 设置时间戳开关
  129. @param timestamp_switch - [in] 时间戳开关
  130. @return 错误代码 - [out] -1失败,0成功
  131. */
  132. int drv_lsm_set_timestamp_switch(LSM_TIMESTAMP_SWITCH_e timestamp_switch);
  133. /**
  134. @brief 设置FIFO采样频率
  135. @param fifo_odr - [in] FIFO采样频率
  136. @param acc_odr - [in] 加速度采样频率
  137. @param gry_odr - [in] 陀螺仪采样频率
  138. @param mag_odr - [in] 地磁计采样频率
  139. @param timestamp_switch - [in] 时间戳开关
  140. @return 错误代码 - [out] -1失败,0成功
  141. */
  142. int drv_lsm_set_fifo_odr(LSM_FIFO_ODR_e fifo_odr, LSM_ACC_ODR_e acc_odr, LSM_GRY_ODR_e gry_odr, LSM_MAG_ODR_e mag_odr, LSM_TIMESTAMP_SWITCH_e timestamp_switch);
  143. /**
  144. @brief 设置ACC量程
  145. @param acc_fs - [in] ACC量程
  146. @return 错误代码 - [out] -1失败,0成功
  147. */
  148. int drv_lsm_set_acc_fs(LSM_ACC_FS_e acc_fs);
  149. /**
  150. @brief 设置ACC采样频率
  151. @param acc_odr - [in] ACC采样频率
  152. @return 错误代码 - [out] -1失败,0成功
  153. */
  154. int drv_lsm_set_acc_odr(LSM_ACC_ODR_e acc_odr);
  155. /**
  156. @brief 设置GRY量程
  157. @param gry_fs - [in] GRY量程
  158. @return 错误代码 - [out] -1失败,0成功
  159. */
  160. int drv_lsm_set_gry_fs(LSM_GRY_FS_e gry_fs);
  161. /**
  162. @brief 设置GRY采样频率
  163. @param gry_odr - [in] GRY采样频率
  164. @return 错误代码 - [out] -1失败,0成功
  165. */
  166. int drv_lsm_set_gry_odr(LSM_GRY_ODR_e gry_odr);
  167. /**
  168. @brief 获取配置MAG量程需要的步骤数量
  169. @return 错误代码 - [out] 配置MAG量程需要的步骤数量
  170. */
  171. int drv_lsm_get_mag_fs_flow(void);
  172. /**
  173. @brief 设置MAG量程
  174. @param mag_fs - [in] MAG量程
  175. @param flow - [in] 当前需要处理的步骤
  176. @return 错误代码 - [out] -1失败,0成功
  177. */
  178. int drv_lsm_set_mag_fs(LSM_MAG_FS_e mag_fs, int flow);
  179. /**
  180. @brief 获取配置MAG采样频率需要的步骤数量
  181. @return 错误代码 - [out] 配置MAG采样频率需要的步骤数量
  182. */
  183. int drv_lsm_get_mag_odr_flow(void);
  184. /**
  185. @brief 设置MAG采样频率
  186. @param mag_odr - [in] MAG采样频率
  187. @param set_hub - [in] 是否配置hub
  188. @param flow - [in] 当前需要处理的步骤
  189. @return 错误代码 - [out] -1失败,0成功
  190. */
  191. int drv_lsm_set_mag_odr(LSM_MAG_ODR_e mag_odr, bool set_hub, int flow);
  192. /**
  193. @brief 获取LSM配置参数
  194. @param param - [in] LSM配置参数
  195. @return 错误代码 - [out] -1失败,0成功
  196. */
  197. int drv_lsm_get_config_param(drv_lsm_config_param_t *p_param);
  198. /**
  199. @brief 当前LSM的FIFO有几组数据
  200. @return 错误代码 - [out] FIFO当前有几组数据
  201. */
  202. int drv_lsm_get_fifo_group_num(void);
  203. /**
  204. @brief 获取LSM的FIFO数据
  205. @param p_data - [out] 返回的FIFO数据
  206. @return 错误代码 - [out] -1失败,0成功
  207. */
  208. int drv_lsm_get_fifo_data(lsm_data_t *p_data);
  209. /**
  210. @brief 获取LSM的ACC数据
  211. @param p_data - [out] 返回的ACC三轴数据
  212. @return 错误代码 - [out] -1失败,0成功
  213. */
  214. int drv_lsm_get_acc_data(lsm_data_t *p_data);
  215. /**
  216. @brief LSM自检步骤拆分——1,执行玩需等待100ms稳定输出才能执行步骤2
  217. @param 无
  218. @return 错误代码 - [out] -1失败,0成功
  219. */
  220. int drv_lsm_self_check_1(void);
  221. /**
  222. @brief LSM自检步骤拆分——2,执行玩需等待100ms稳定输出才能执行步骤3
  223. @param 无
  224. @return 错误代码 - [out] -1失败,0成功
  225. */
  226. int drv_lsm_self_check_2(void);
  227. /**
  228. @brief LSM自检步骤拆分——3,执行玩需等待150ms稳定输出才能执行步骤4
  229. @param 无
  230. @return 错误代码 - [out] -1失败,0成功
  231. */
  232. int drv_lsm_self_check_3(void);
  233. /**
  234. @brief LSM自检步骤拆分——4,执行玩需等待50ms稳定输出才能执行步骤5
  235. @param 无
  236. @return 错误代码 - [out] -1失败,0成功
  237. */
  238. int drv_lsm_self_check_4(void);
  239. /**
  240. @brief LSM自检步骤拆分——5,获取自检结果。
  241. @param 无
  242. @return 错误代码 - [out] -1失败,0成功
  243. */
  244. int drv_lsm_self_check_5(void);
  245. int drv_lsm_get_lsm_id(void);
  246. int drv_lsm_get_mag_id(void);
  247. #ifdef __cplusplus
  248. }
  249. #endif
  250. #endif