系列文章目录
【STM32】HAL库 新建MDK工程
【STM32】HAL库 串口轮询发送
前言
使用IIC读取,MPU6050
一、STM32CubeMX设置
二、代码
#define MPU6050_SMPLRT_DIV 0x19
#define MPU6050_ACCEL_XOUT_H 0x3B
#define MPU6050_GYRO_XOUT_H 0x43
#define MPU6050_PWR_MGMT_1 0x6B
#define MPU6050_WHO_AM_I 0x75
uint8_t MPU6050_init[6] = {0x01 ,0x00 ,0x09 ,0x06 ,0x18 ,0x18};
void MPU6050_Init(void)
{
HAL_I2C_Mem_Write(&hi2c2,0xD0,MPU6050_PWR_MGMT_1, I2C_MEMADD_SIZE_8BIT,&MPU6050_init[0],2,10);
HAL_I2C_Mem_Write(&hi2c2,0xD0,MPU6050_SMPLRT_DIV, I2C_MEMADD_SIZE_8BIT,&MPU6050_init[2],4,10);
}
void MPU6050_GetData(uint8_t *Arr)
{
HAL_I2C_Mem_Read(&hi2c2,0xD0,MPU6050_ACCEL_XOUT_H ,I2C_MEMADD_SIZE_8BIT,Arr,6,10000);
HAL_I2C_Mem_Read(&hi2c2,0xD0,MPU6050_GYRO_XOUT_H ,I2C_MEMADD_SIZE_8BIT,Arr+6,6,10000);
}
void convert_uint8_to_uint16(int16_t *output)
{
static uint8_t arr[12];
MPU6050_GetData(arr);
for (int i = 0; i < 12; i += 2)
{
output[i / 2] = (arr[i] << 8) | arr[i + 1];
}
}
/* USER CODE BEGIN 2 */
MPU6050_Init();
/* USER CODE END 2 */
/* Infinite loop */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
convert_uint8_to_uint16(arr16);
for(i = 0; i < 6; i++)
{
printf("%d\r\n",arr16[i]);
}
HAL_Delay(1000);
}
/* USER CODE END 3 */