使用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 */
}

三、实验现象

 

物联沃分享整理
物联沃-IOTWORD物联网 » 使用HAL库实现STM32硬件IIC读写MPU6050

发表评论