当前位置:网站首页>LSM6DSL之SPI驱动
LSM6DSL之SPI驱动
2022-06-29 08:33:00 【小飞侠123!】
先附代码:
/* sensor control reg */
#define LSM6DSL_FIFO_CTRL5 0X0A
#define LSM6DSL_CTRL1_XL 0X10
#define LSM6DSL_CTRL2_G 0X11
#define LSM6DSL_CTRL3_C 0X12
#define LSM6DSL_CTRL4_C 0X13
#define LSM6DSL_CTRL5_C 0X14
#define LSM6DSL_CTRL6_C 0X15
#define LSM6DSL_CTRL7_G 0X16
#define LSM6DSL_CTRL8_XL 0X17
#define LSM6DSL_CTRL9_XL 0X18
#define LSM6DSL_CTRL10_C 0X19
#define LSM6DSL_INT1_CTRL 0X0D
#define LSM6DSL_INT2_CTRL 0X0E
#define LSM6DSL_WHO_AM_I 0x0F //get id
/* sensor output data */
#define LSM6DSL_OUTX_L_G 0X22
#define LSM6DSL_OUTX_H_G 0X23
#define LSM6DSL_OUTY_L_G 0X24
#define LSM6DSL_OUTY_H_G 0X25
#define LSM6DSL_OUTZ_L_G 0X26
#define LSM6DSL_OUTZ_H_G 0X27
#define LSM6DSL_OUTX_L_XL 0X28
#define LSM6DSL_OUTX_H_XL 0X29
#define LSM6DSL_OUTY_L_XL 0X2A
#define LSM6DSL_OUTY_H_XL 0X2B
#define LSM6DSL_OUTZ_L_XL 0X2C
#define LSM6DSL_OUTZ_H_XL 0X2D
#define LSM6DSL_SENSORHUB1_REG 0X2E
#define LSM6DSL_SENSORHUB2_REG 0X2F
#define LSM6DSL_SENSORHUB3_REG 0X30
#define LSM6DSL_SENSORHUB4_REG 0X31
#define LSM6DSL_SENSORHUB5_REG 0X32
#define LSM6DSL_SENSORHUB6_REG 0X33
#define LSM6DSL_SENSORHUB7_REG 0X34
#define LSM6DSL_SENSORHUB8_REG 0X35
#define LSM6DSL_SENSORHUB9_REG 0X36
#define LSM6DSL_SENSORHUB10_REG 0X37
#define LSM6DSL_SENSORHUB11_REG 0X38
#define LSM6DSL_SENSORHUB12_REG 0X39
#define LSM6DSL_FIFO_STATUS1 0X3A
#define LSM6DSL_FIFO_STATUS2 0X3B
#define LSM6DSL_FIFO_STATUS3 0X3C
#define LSM6DSL_FIFO_STATUS4 0X3D
#define LSM6DSL_FIFO_DATA_OUT_L 0X3E
#define LSM6DSL_FIFO_DATA_OUT_H 0X3F
#define LSM6DSL_TIMESTAMP0_REG 0X40
#define LSM6DSL_TIMESTAMP1_REG 0X41
#define LSM6DSL_TIMESTAMP2_REG 0X42
#define LSM6DSL_STEP_TIMESTAMP_L 0X49
#define LSM6DSL_STEP_TIMESTAMP_H 0X4A
#define LSM6DSL_STEP_COUNTER_L 0X4B
#define LSM6DSL_STEP_COUNTER_H 0X4C
#define LSM6DSL_SENSORHUB13_REG 0X4D
#define LSM6DSL_SENSORHUB14_REG 0X4E
#define LSM6DSL_SENSORHUB15_REG 0X4F
#define LSM6DSL_SENSORHUB16_REG 0X50
#define LSM6DSL_SENSORHUB17_REG 0X51
#define LSM6DSL_SENSORHUB18_REG 0X52
#define LSM6DSL_FUNC_SRC1 0X53
#define LSM6DSL_FUNC_SRC2 0X54
#define LSM6DSL_TAP_CFG 0X58
#define LSM6DSL_TAP_THS_6D 0X59
#define LSM6DSL_INT_DUR2 0X5A
#define LSM6DSL_WAKE_UP_THS 0X5B
#define LSM6DSL_WAKE_UP_DUR 0X5C
#define LSM6DSL_FREE_FALL 0X5D
#define LSM6DSL_MD1_CFG 0X5E
#define LSM6DSL_MD2_CFG 0X5F
/************** Access Device RAM *******************/
#define LSM6DSL_MASTER_CMD_CODE 0X60
#define LSM6DSL_SENS_SYNC_SPI_ERROR_CODE 0X61
/************** Embedded functions register mapping *******************/
#define LSM6DSL_OUT_MAG_RAW_X_L 0x66
#define LSM6DSL_OUT_MAG_RAW_X_H 0x67
#define LSM6DSL_OUT_MAG_RAW_Y_L 0x68
#define LSM6DSL_OUT_MAG_RAW_Y_H 0x69
#define LSM6DSL_OUT_MAG_RAW_Z_L 0x6A
#define LSM6DSL_OUT_MAG_RAW_Z_H 0x6B
#define LSM6DSL_X_OFS_USR 0x73
#define LSM6DSL_Y_OFS_USR 0x74
#define LSM6DSL_Z_OFS_USR 0x75
#define LSM6DSL_STATUS_REG 0x1E
/******************************************************************************* * Register : CTRL1_XL * Address : 0X10 * Bit Group Name: FS_XL * Permission : RW *******************************************************************************/
typedef enum {
LSM6DSL_FS_XL_2g = 0x00,
LSM6DSL_FS_XL_16g = 0x04,
LSM6DSL_FS_XL_4g = 0x08,
LSM6DSL_FS_XL_8g = 0x0C,
} LSM6DSL_FS_XL_t;
/******************************************************************************* * Register : CTRL1_XL * Address : 0X10 * Bit Group Name: ODR_XL * Permission : RW *******************************************************************************/
typedef enum {
LSM6DSL_ODR_XL_POWER_DOWN = 0x00,
LSM6DSL_ODR_XL_13Hz = 0x10,
LSM6DSL_ODR_XL_26Hz = 0x20,
LSM6DSL_ODR_XL_52Hz = 0x30,
LSM6DSL_ODR_XL_104Hz = 0x40,
LSM6DSL_ODR_XL_208Hz = 0x50,
LSM6DSL_ODR_XL_416Hz = 0x60,
LSM6DSL_ODR_XL_833Hz = 0x70,
LSM6DSL_ODR_XL_1660Hz = 0x80,
LSM6DSL_ODR_XL_3330Hz = 0x90,
LSM6DSL_ODR_XL_6660Hz = 0xA0,
LSM6DSL_ODR_XL_13330Hz = 0xB0,
} LSM6DSL_ODR_XL_t;
extern short Ax,Ay,Az;
extern short Gx,Gy,Gz;
/******USE SPI MODEL****/
void LSM6DSL_Init_spi(void) ;
void LSM6DSL_Get_RawAcc(void); // 获取加速度值
void LSM6DSL_Get_RawGryo(void); // 获取陀螺仪值
void LSM6DSL_Init_spi(void)
{
// LSM6DSL_Write_Reg(LSM6DSL_CTRL2_G,0X1C); //陀螺仪12.5hz,2000dps
LSM6DSL_Write_Reg(LSM6DSL_CTRL2_G,0X40); //陀螺仪12.5hz,2000dps
LSM6DSL_Write_Reg(LSM6DSL_CTRL10_C,0x38); //使能陀螺仪X,Y,Z轴 //启用内置功能和加速计过滤器的功能 使能计步器算法 使能倾斜的计算
//唤醒中断寄存器配置
LSM6DSL_Write_Reg(LSM6DSL_CTRL1_XL,0x60); // Acc = 416Hz(高性能模式)加速度±2g
LSM6DSL_Write_Reg(LSM6DSL_TAP_CFG,0x90); //启用中断 X方向上启用
// LSM6DSL_Write_Reg(LSM6DSL_TAP_CFG,0x1E); //关闭中断 XYZ方向上启用
LSM6DSL_Write_Reg(LSM6DSL_WAKE_UP_DUR,0x00);
LSM6DSL_Write_Reg(LSM6DSL_WAKE_UP_THS,0x02);
LSM6DSL_Write_Reg(LSM6DSL_MD1_CFG,0x20); //启用INT1唤醒事件路由
// 6D Orientation Configuration 根据需求自行添加 (正反面值有差异)
LSM6DSL_Write_Reg(LSM6DSL_TAP_THS_6D,0x40); //4D/6D功能的阈值 60 degrees(度)
LSM6DSL_Write_Reg(LSM6DSL_CTRL8_XL,0x01); //LPF2对6D功能选择
```void LSM6DSL_Init_spi(void)
{
#if 1
// LSM6DSL_Write_Reg(LSM6DSL_CTRL2_G,0X1C); //陀螺仪12.5hz,2000dps
LSM6DSL_Write_Reg(LSM6DSL_CTRL2_G,0X40); //陀螺仪12.5hz,2000dps
LSM6DSL_Write_Reg(LSM6DSL_CTRL10_C,0x38); //使能陀螺仪X,Y,Z轴 //启用内置功能和加速计过滤器的功能 使能计步器算法 使能倾斜的计算
//唤醒中断寄存器配置
LSM6DSL_Write_Reg(LSM6DSL_CTRL1_XL,0x60); // Acc = 416Hz(高性能模式)加速度±2g
LSM6DSL_Write_Reg(LSM6DSL_TAP_CFG,0x90); //启用中断 X方向上启用
// LSM6DSL_Write_Reg(LSM6DSL_TAP_CFG,0x1E); //关闭中断 XYZ方向上启用
LSM6DSL_Write_Reg(LSM6DSL_WAKE_UP_DUR,0x00);
LSM6DSL_Write_Reg(LSM6DSL_WAKE_UP_THS,0x02);
LSM6DSL_Write_Reg(LSM6DSL_MD1_CFG,0x20); //启用INT1唤醒事件路由
// 6D Orientation Configuration 根据需求自行添加 (正反面值有差异)
LSM6DSL_Write_Reg(LSM6DSL_TAP_THS_6D,0x40); //4D/6D功能的阈值 60 degrees(度)
LSM6DSL_Write_Reg(LSM6DSL_CTRL8_XL,0x01); //LPF2对6D功能选择
}
short Ax,Ay,Az;
short Gx,Gy,Gz;
/************************* 获取加速度值 **********************/
void LSM6DSL_Get_RawAcc(void) //SPI协议
{
uint8_t buf[6];
LSM6DSL_Get_RawGryo();
if((LSM6DSL_Read_Reg(LSM6DSL_STATUS_REG)&0x01)!=0) //有数据生成
{
buf[0]= LSM6DSL_Read_Reg(LSM6DSL_OUTX_H_XL);
buf[1]= LSM6DSL_Read_Reg(LSM6DSL_OUTX_L_XL);
buf[2]= LSM6DSL_Read_Reg(LSM6DSL_OUTY_H_XL);
buf[3]= LSM6DSL_Read_Reg(LSM6DSL_OUTY_L_XL);
buf[4]= LSM6DSL_Read_Reg(LSM6DSL_OUTZ_H_XL);
buf[5]= LSM6DSL_Read_Reg(LSM6DSL_OUTZ_L_XL);
Ax=(buf[0]<<8)|buf[1];
Ay=(buf[2]<<8)|buf[3];
Az=(buf[4]<<8)|buf[5];
}
}
/******************** 获取陀螺仪值 ************************/
//int16_t Gx,Gy,Gz;
void LSM6DSL_Get_RawGryo(void) //SPI协议
{
uint8_t buf[6];
if((LSM6DSL_Read_Reg(LSM6DSL_STATUS_REG)&0x02)!=0) //有数据生成
{
buf[0]= LSM6DSL_Read_Reg(LSM6DSL_OUTX_H_G);
buf[1]= LSM6DSL_Read_Reg(LSM6DSL_OUTX_L_G);
buf[2]= LSM6DSL_Read_Reg(LSM6DSL_OUTY_H_G);
buf[3]= LSM6DSL_Read_Reg(LSM6DSL_OUTY_L_G);
buf[4]= LSM6DSL_Read_Reg(LSM6DSL_OUTZ_H_G);
buf[5]= LSM6DSL_Read_Reg(LSM6DSL_OUTZ_L_G);
Gx=(buf[0]<<8)|buf[1];
Gy=(buf[2]<<8)|buf[3];
Gz=(buf[4]<<8)|buf[5];
}
}
main.c中
while (1)
{
LSM6DSL_Get_RawAcc(); // 获取加速度值
Delay_ms(10);
LSM6DSL_Get_RawGryo(); // 获取陀螺仪值
Delay_ms(10);
}

边栏推荐
- Jar package and war package
- AugFPN:改進多尺度特征學習用於目標檢測
- Wechat applet sharing page, sharing to the circle of friends
- UE4 去掉材质中Mask透明白边
- Wechat applet user refuses to authorize geographic location information and calls up the authorization window again
- NPM common commands
- How is epoll encapsulated in golang?
- 记微信小程序setData动态修改字段名
- pytorch总结学习系列-操作
- SSD improvements cfenet
猜你喜欢

Instance error iopub data rate exceeded

UE4 display 3D editable points in Viewport

五心公益红红娘团队

什么是超融合?与传统架构有什么区别?.

Written test question "arrange version numbers from large to small"

数据处理时代,数据质量建设才是企业的生存之道

微信小程序子组件向页面传值(父子组件间的通信)带源码

keras转tf.keras中VGG19 input_shape

Open3d farthest point sampling (FPS)

3DMax 卡死、白屏、渲染死机问题总结
随机推荐
Wechat applet user refuses to authorize geographic location information and calls up the authorization window again
Multiplier design (pipeline) Verilog code
easyexecl导出100万行execl报字体错误的解决办法
训练查看(问题暂存)
pytorch学习总结—运算的内存开销
微信小程序项目:tab导航栏
UE4 去掉材质中Mask透明白边
Hb5470 combustion test of non-metallic materials in civil aircraft cabin
Twinmotion beginner tutorial
微信小程序底部导航栏中间突出
(转)MySQL: ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
Verilog equivalent operator
promise方法的简单使用
Wechat applet jump to official account image and text content
Wechat applet project: tab navigation bar
Verilog shift operator
HB5470民用飞机机舱内部非金属材料燃烧测试
Unity C # e-learning (12) -- protobuf generation protocol
UE4 VS的Visual Assist插件设置
Research progress of target detection in the era of deep convolutional neural network