请教一下大家,关于库函数代码向HAL库函数移植的问题,我现在用32单片机采集LSM6DS3的数据,使用库函数已经采集成功了,但是用HAL库函数实现,输出不正常,传感器寄存器配置方面都一样,大家帮我看一下
这是库函数的
- void Lsm_Init_iic(void) //IICD-òé
- {
-
- //???12.5hz,2000dps
- //?????X,Y,Z?
- LSM_WriteOneByte(ACC_GYRO_ADDRESS,LSM6DSL_CTRL2_G,0X1C);
- LSM_WriteOneByte(ACC_GYRO_ADDRESS,LSM6DSL_CTRL10_C,0x38);
-
- LSM_WriteOneByte(ACC_GYRO_ADDRESS,LSM6DSL_CTRL1_XL,0x40);
-
- LSM_WriteOneByte(ACC_GYRO_ADDRESS,LSM6DSL_TAP_CFG,0x90);
-
- LSM_WriteOneByte(ACC_GYRO_ADDRESS,LSM6DSL_WAKE_UP_DUR,0x00);
- LSM_WriteOneByte(ACC_GYRO_ADDRESS,LSM6DSL_WAKE_UP_THS,0x02);
- LSM_WriteOneByte(ACC_GYRO_ADDRESS,LSM6DSL_MD1_CFG,0x20);
- //6D Orientation Configuration ¸ù¾YDèÇó×ÔDDìí¼ó £¨Õy·′ÃæÖμóD2îò죩
- LSM_WriteOneByte(ACC_GYRO_ADDRESS,LSM6DSL_TAP_THS_6D,0x40);
- LSM_WriteOneByte(ACC_GYRO_ADDRESS,LSM6DSL_CTRL8_XL,0x01);
-
- // LSM_WriteOneByte(ACC_GYRO_ADDRESS,LSM6DSL_INT1_CTRL,0x03); //¼óËù¶è¼ÆíóÂYòÇ£¬INT1ê1Äü
- }
- //»ñ衼óËù¶èÖμ
- void Lsm_Get_Rawacc(void) //IICD-òé
- {
- short ax,ay,az;
- uint8_t buf[6];
- if((LSM_ReadOneByte(ACC_GYRO_ADDRESS,LSM6DSL_STATUS_REG)&0x01)!=0) //óDêy¾Yéú3é
- {
- buf[0]= LSM_ReadOneByte(ACC_GYRO_ADDRESSR,LSM6DSL_OUTX_H_XL);
- buf[1]= LSM_ReadOneByte(ACC_GYRO_ADDRESSR,LSM6DSL_OUTX_L_XL);
- buf[2]= LSM_ReadOneByte(ACC_GYRO_ADDRESSR,LSM6DSL_OUTY_H_XL);
- buf[3]= LSM_ReadOneByte(ACC_GYRO_ADDRESSR,LSM6DSL_OUTY_L_XL);
- buf[4]= LSM_ReadOneByte(ACC_GYRO_ADDRESSR,LSM6DSL_OUTZ_H_XL);
- buf[5]= LSM_ReadOneByte(ACC_GYRO_ADDRESSR,LSM6DSL_OUTZ_L_XL);
- ax=(buf[0]<<8)|buf[1];
- ay=(buf[2]<<8)|buf[3];
- az=(buf[4]<<8)|buf[5];
- printf(" acceleration£o%d, %d, %d\n",ax,ay,az);
- printf("\r\n");
- //delay_ms(10);
- }
- }
复制代码 这是HAL库的,输出不对,没有反应- void LSM6DS3_init(void)
- {
- uint8_t pBuffer=0;
-
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
- //High-performance model default(Controlled by CTRL6_C register)
- pBuffer=0x1C;//Accelerometer ODR=104Hz,+/-16g,Anti-aliasing filter bandwidth:400Hz
- HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_CTRL2_G_REG,1,&pBuffer, 1, 0x2000);
- pBuffer=0x38;//enable Accelerometer X,Y,Z
- HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_CTRL10_C_REG,1,&pBuffer, 1, 0x2000);
- pBuffer=0x40;//enable accelerometer int1
- HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_CTRL1_XL_REG,1,&pBuffer, 1, 0x2000);
-
-
-
- pBuffer=0x90;//Angular:104hz(Lowpass filter) 500dps(full-scale,degree/s)
- HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_TAP_CFG_REG,1,&pBuffer, 1, 0x2000);
-
- pBuffer=0x00;//Gyroscope pitch axis (X.Y.Z) output enable.
- HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_WAKE_UP_DUR,1,&pBuffer, 1, 0x2000);
- pBuffer=0x02;//enable Gyroscope int2
- HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_WAKE_UP_THS,1,&pBuffer, 1, 0x2000);
-
- //WAKE_UP INTERRUPT Configuration
- pBuffer=0x20;//Latched Interrupt.
- HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_MD1_CFG,1,&pBuffer, 1, 0x2000);
-
- pBuffer=0x40;//Block Data Update,Register address automatically incremented
- HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_TAP_THS_6D,1,&pBuffer, 1, 0x2000);
-
- pBuffer=0x01;//Block Data Update,Register address automatically incremented
- HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_CTRL8_XL,1,&pBuffer, 1, 0x2000);
- }
- void Read_Accelerometer(uint16_t Accelerometer[3])
- {short ax,ay,az;
- uint8_t pBuffer1[1];
- uint8_t pBuffer2[1];
- uint8_t pBuffer3[1];
- uint8_t pBuffer4[1];
- uint8_t pBuffer5[1];
- uint8_t pBuffer6[1];
- uint8_t pBuffer7[1];
- if((HAL_I2C_Mem_Read(&hi2c1, LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DS3_STATUS_REG, 1, pBuffer7, 6, 0x2000)&0x01)!=0) //óDêy¾Yéú3é
- {
- HAL_I2C_Mem_Read(&hi2c1, LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DS3_OUTX_H_XL, 1, pBuffer1, 6, 0x2000);
- HAL_I2C_Mem_Read(&hi2c1, LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DS3_OUTX_L_XL, 1, pBuffer2, 6, 0x2000);
- HAL_I2C_Mem_Read(&hi2c1, LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DS3_OUTY_H_XL, 1, pBuffer3, 6, 0x2000);
- HAL_I2C_Mem_Read(&hi2c1, LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DS3_OUTY_L_XL, 1, pBuffer4, 6, 0x2000);
- HAL_I2C_Mem_Read(&hi2c1, LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DS3_OUTZ_H_XL, 1, pBuffer5, 6, 0x2000);
- HAL_I2C_Mem_Read(&hi2c1, LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DS3_OUTZ_L_XL, 1, pBuffer6, 6, 0x2000);
-
-
- ax=(pBuffer1[0]<<8)|pBuffer2[0];
- ay=(pBuffer3[0]<<8)|pBuffer4[0];
- az=(pBuffer5[0]<<8)|pBuffer6[0];
- printf(" acceleration£o%d, %d, %d\n",ax,ay,az);
- printf("\r\n");
- }
-
- }
复制代码
|