基于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 */
}

三、实验现象

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值