特立独行的猪 · 2022年01月19日

《XR806开发板试用》硬件IIC驱动MPU6050

1.环境配置

总结一下遇到的问题:
1.需要修改配置文件中的文件路径1642582492(1).png
2.固件编译出现以下问题时,需要修改文件内容
05135a4763d139273c9352a66edb7b7.png
ad0097275648ffa83802c4f17d64568.png

2.工程目录结构

device/xradio/xr806/ohosdemo/car_demo

└── src                #源文件
    └── main.c         #主函数
    └── mpu6050.c      #驱动代码
└── include            #头文件
    └── mpu6050.h      #驱动头文件   
└──BUILD.gn            #编译脚本

在ohosdemo文件夹下的BUILD.gn编译脚本文件修改为工程文件名
image.png
修改car_demo文件夹中的编译脚本,加入头文件路径
image.png

3.驱动函数

1.向MPU6050指定寄存器写一个字节

  uint8_t MPU_Write_Byte(uint32_t reg,uint8_t data)
{
     uint8_t res;
 write_buffer[0]=data;
 res=HAL_I2C_Master_Transmit_Mem_IT(I2C0_ID,0x68,reg,I2C_MEMADDR_SIZE_8BIT,write_buffer,1);
if(res==-1)
{
    printf("MPU_WRITE_Byte_%d error",data);
    return 1;
}
else

 return 0;   
 }
 

2.读MPU6050指定寄存器的数据

uint8_t MPU_Read_Byte(uint32_t reg)
 {
   HAL_I2C_Master_Receive_Mem_IT(I2C0_ID, 0x68, (uint32_t)reg, I2C_MEMADDR_SIZE_8BIT, read_buffer, 1);
    return read_buffer[0];
    
 }

3.连续写字节

uint8_t MPU_Write_Len(uint16_t addr,uint32_t reg,int32_t len,uint8_t *buf)
 {
 
     HAL_I2C_Master_Transmit_Mem_IT(I2C0_ID,addr,reg,I2C_MEMADDR_SIZE_8BIT,buf,len);
     return 0;
    
 
 }

4.连续读字节

uint8_t MPU_Read_Len(uint16_t addr,uint32_t reg,int32_t len,uint8_t *buf)
 {
    HAL_I2C_Master_Receive_Mem_IT(I2C0_ID,addr,reg,I2C_MEMADDR_SIZE_8BIT,buf,len);
    return 0;
    
 }
 

5.主函数,创建初始化线程,并采集数据,通过串口打印出来

image.png

6.效果展示

1642596054(1).png
调整MPU6050的姿态可以持续采集到数据

推荐阅读
关注数
13823
内容数
139
全志XR806开发板相关的知识介绍以及应用专栏。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息