当前位置:网站首页>SPI drive of lsm6dsl
SPI drive of lsm6dsl
2022-06-29 09:28:00 【Xiaofeixia 123!】
Code attached first :
/* 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); // Get the acceleration value
void LSM6DSL_Get_RawGryo(void); // Get the gyro value
void LSM6DSL_Init_spi(void)
{
// LSM6DSL_Write_Reg(LSM6DSL_CTRL2_G,0X1C); // gyroscope 12.5hz,2000dps
LSM6DSL_Write_Reg(LSM6DSL_CTRL2_G,0X40); // gyroscope 12.5hz,2000dps
LSM6DSL_Write_Reg(LSM6DSL_CTRL10_C,0x38); // Enable gyroscope X,Y,Z Axis // Enable built-in functions and accelerometer filter functions Enable pedometer algorithm Enable tilt calculation
// Wake up interrupt register configuration
LSM6DSL_Write_Reg(LSM6DSL_CTRL1_XL,0x60); // Acc = 416Hz( High performance mode ) The acceleration ±2g
LSM6DSL_Write_Reg(LSM6DSL_TAP_CFG,0x90); // Enable interrupt X Direction enable
// LSM6DSL_Write_Reg(LSM6DSL_TAP_CFG,0x1E); // Turn off interrupt XYZ Direction enable
LSM6DSL_Write_Reg(LSM6DSL_WAKE_UP_DUR,0x00);
LSM6DSL_Write_Reg(LSM6DSL_WAKE_UP_THS,0x02);
LSM6DSL_Write_Reg(LSM6DSL_MD1_CFG,0x20); // Enable INT1 Wake up event routing
// 6D Orientation Configuration Add as needed ( There is difference between positive and negative face value )
LSM6DSL_Write_Reg(LSM6DSL_TAP_THS_6D,0x40); //4D/6D Threshold of the function 60 degrees( degree )
LSM6DSL_Write_Reg(LSM6DSL_CTRL8_XL,0x01); //LPF2 Yes 6D Functional selection
```void LSM6DSL_Init_spi(void)
{
#if 1
// LSM6DSL_Write_Reg(LSM6DSL_CTRL2_G,0X1C); // gyroscope 12.5hz,2000dps
LSM6DSL_Write_Reg(LSM6DSL_CTRL2_G,0X40); // gyroscope 12.5hz,2000dps
LSM6DSL_Write_Reg(LSM6DSL_CTRL10_C,0x38); // Enable gyroscope X,Y,Z Axis // Enable built-in functions and accelerometer filter functions Enable pedometer algorithm Enable tilt calculation
// Wake up interrupt register configuration
LSM6DSL_Write_Reg(LSM6DSL_CTRL1_XL,0x60); // Acc = 416Hz( High performance mode ) The acceleration ±2g
LSM6DSL_Write_Reg(LSM6DSL_TAP_CFG,0x90); // Enable interrupt X Direction enable
// LSM6DSL_Write_Reg(LSM6DSL_TAP_CFG,0x1E); // Turn off interrupt XYZ Direction enable
LSM6DSL_Write_Reg(LSM6DSL_WAKE_UP_DUR,0x00);
LSM6DSL_Write_Reg(LSM6DSL_WAKE_UP_THS,0x02);
LSM6DSL_Write_Reg(LSM6DSL_MD1_CFG,0x20); // Enable INT1 Wake up event routing
// 6D Orientation Configuration Add as needed ( There is difference between positive and negative face value )
LSM6DSL_Write_Reg(LSM6DSL_TAP_THS_6D,0x40); //4D/6D Threshold of the function 60 degrees( degree )
LSM6DSL_Write_Reg(LSM6DSL_CTRL8_XL,0x01); //LPF2 Yes 6D Functional selection
}
short Ax,Ay,Az;
short Gx,Gy,Gz;
/************************* Get the acceleration value **********************/
void LSM6DSL_Get_RawAcc(void) //SPI agreement
{
uint8_t buf[6];
LSM6DSL_Get_RawGryo();
if((LSM6DSL_Read_Reg(LSM6DSL_STATUS_REG)&0x01)!=0) // With data generation
{
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];
}
}
/******************** Get the gyro value ************************/
//int16_t Gx,Gy,Gz;
void LSM6DSL_Get_RawGryo(void) //SPI agreement
{
uint8_t buf[6];
if((LSM6DSL_Read_Reg(LSM6DSL_STATUS_REG)&0x02)!=0) // With data generation
{
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 in
while (1)
{
LSM6DSL_Get_RawAcc(); // Get the acceleration value
Delay_ms(10);
LSM6DSL_Get_RawGryo(); // Get the gyro value
Delay_ms(10);
}

边栏推荐
- Highlight in the middle of the navigation bar at the bottom of wechat applet
- 微信小程序项目:tab导航栏
- 3DMax 卡死、白屏、渲染死机问题总结
- Universal target detection based on region attention
- GD32F4xx 以太网芯片(enc28j60)驱动移植
- Open3d farthest point sampling (FPS)
- [to.Net] C data model, from Entity Framework core to LINQ
- 超融合架构和传统架构有什么区别?
- 微信小程序子组件向页面传值(父子组件间的通信)带源码
- How to implement observer mode
猜你喜欢

AugFPN:改進多尺度特征學習用於目標檢測

MySQL uses union all to count the total number of combinations of multiple tables and the number of tables respectively

Pytorch Summary - Automatic gradient

UE4 材质UV纹理不随模型缩放拉伸

pytorch总结—自动求梯度

easyexecl导出100万行execl报字体错误的解决办法

商业智能BI的未来,如何看待AI+BI这种模式?

SSD改進CFENet

Find the most repeated element in the string

js轮播图观后重做(较长的完整版,可运行)
随机推荐
YOLO Nano:一种高度紧凑的只看一次的卷积神经网络用于目标检测
Lffd: a lightweight fast face detector for edge detection
Recursive RBAC menu level display infinite classification
Abstract classes and interfaces
cmd进入虚拟机
Uber 前安全主管面临欺诈指控,曾隐瞒数据泄露事件
SSD改進CFENet
pytorch总结学习系列-广播机制
Wechat applet jump to official account image and text content
UE4 在viewport视口中显示3D可编辑点
Universal target detection based on region attention
jar包和war包
Research progress of target detection in the era of deep convolutional neural network
train_ on_ Batch save the image of the loss function change
【目标检测】|指标 A probabilistic challenge for object detection
What is hyperfusion? What is the difference with traditional architecture
Handwriting Redux thunk
UE4 VS的Visual Assist插件设置
[to.Net] C data model, from Entity Framework core to LINQ
微信小程序项目:微信小程序页面布局