使用HAL库实现STM32硬件IIC读写MPU6050
一、接口介绍
1.1HAL_I2C_Mem_Write()
参数1:I2C句柄,如&hi2c1;
参数2:从机设备地址(呼叫),如陀螺仪,写为0xD0(…0);
参数3:从机寄存器地址(具体的读写位置);
参数4:从机寄存器地址长度,I2C_MEMADD_SIZE_8BIT或I2C_MEMADD_SIZE_16BIT;
参数5:发送的数据的起始地址(写入什么);
参数6:传输数据的大小如1代表1字节;
参数7:操作超时时间如0x10…。
1.2HAL_I2C_Mem_Read()
参数2:如陀螺仪,读为0xD1(…1);
参数5:读到哪里
二、实验代码(注释很重要)
uint8_t Senddata0x00 = 0x00;
uint8_t Senddata0xaa = 0xaa;
uint8_t Receivedata;
...
void T1(void const * argument)//freertos任务1
{
/* USER CODE BEGIN T1 */
HAL_I2C_Mem_Write(&hi2c1, 0xD0, 0x6B, I2C_MEMADD_SIZE_8BIT, &Senddata0x00, 1, 0x10);//以写的方式呼叫陀螺仪->写在0x6B->8BIT->写入0x00->大小为1字节->时间0x10(唤醒陀螺仪)
osDelay(100);
HAL_I2C_Mem_Write(&hi2c1, 0xD0, 0x19, I2C_MEMADD_SIZE_8BIT, &Senddata0xaa, 1, 0x10);//以写的方式呼叫陀螺仪->写在0x19->8BIT->写入0xaa->大小为1字节->时间0x10
osDelay(100);
HAL_I2C_Mem_Read(&hi2c1, 0xD1, 0x19, I2C_MEMADD_SIZE_8BIT, &Receivedata, 1, 0x10);//以读的方式呼叫陀螺仪->读其0x19->8BIT->存入Receivedata中->大小为1字节->时间0x10
osDelay(200);
if(Receivedata == Senddata0xaa) {//读写一致验证
printf("The test has been completed\r\n");
printf("%#x\r\n", Receivedata);//打印读取到的数据(写入的数据)
}
/* Infinite loop */
for(;;)
{
osDelay(1);
}
/* USER CODE END T1 */
}
三、实验现象