实验中使用的代码主体是从 MPU6050官方提供的驱动《motion_driver_6.12》移植过来
的,该资料包里提供了基于 STM32F4 控制器的源代码(本工程正是利用该代码移植到
STM32F1 上的)及使用 python 语言编写的上位机,资料中还附带了说明文档,请您充分利
用官方自带的资料学习。
47.5.1 硬件设计
硬件设计与上一小节实验中的完全一样,且软件中使用了 INT 引脚产生的中断信号,
本小节中的代码默认使用软件 I2C。
47.5.2 软件设计
本小节讲解的是“3.MPU6050_python 上位机”实验,请打开配套的代码工程阅读理解。
本工程是从官方代码移植过来的(IAR 工程移植至 MDK),改动并不多,我们主要给读者讲
解一下该驱动的设计思路,方便应用。由于本工程的代码十分庞大,在讲解到某些函数时,
请善用 MDK 的搜索功能,从而在工程中查找出对应的代码。
1. 程序设计要点
(1) 提供 I2C 读写接口、定时服务及 INT 中断处理;
(2) 从陀螺仪中获取原始数据并处理;
(3) 更新数据并输出。
2. 代码分析
官方的驱动主要是了 MPL 软件库(Motion Processing Library),要移植该软件库我们需
要为它提供 I2C 读写接口、定时服务以及 MPU6050的数据更新标志。若需要输出调试信息
到上位机,还需要提供串口接口。
I2C 读写接口
MPL库的内部对 I2C 读写时都使用 i2c_write 及 i2c_read 函数,在文件“inv_mpu.c”中
给出了它们的接口格式,见代码清单 47-1。
代码清单 47-9 I2C 读写接口(inv_mpu.c 文件)
1 /* 以下函数需要定义成如下格式:
2 * i2c_write(unsigned char slave_addr, unsigned char reg_addr,
3 * unsigned char length, unsigned char const *data)
4 * i2c_read(unsigned char slave_addr, unsigned char reg_addr,
5 * unsigned char length, unsigned char *data)
6 */