【STM32F4 HAL】MPU6050食用

关于MPU6050模块的食用>_<(本人比较菜,写的不好或有错误的地方欢迎大佬指出)

最近学校冬令营发了个MPU6050模块,第一次弄也花了我花了不少时间,于是就把其中一些步骤以及要点简单说下。

至于MPU6050的介绍啥的,我也不细说了,很多地方都有,我就说下怎么移植现成的代码。(用的核心板是F401CCU6)

把代码下载一下,芝士地址 (提取码:1145) (里面有些头文件如果报错的话删掉就行了)

代码分成两部分,一个是对mpu6050寄存器的读取,另一个是dmp库,也就是把读取的原始信息进行一系列操作得到的三轴角速度以及欧拉角等信息。

然后就是CubeMX里的配置

1、尝龟配置,开烧录口,以及时钟配置

2、与MPU6050建立IIC通信:

 

 

 

 

 

 找两个IO口,我选择的是A0与A1,都设置为开漏输出,上拉,其他不变(如图)

3、开启串口用于调试

 

这里我选择的是UART1,要是选别的串口的话后面printf重定向代码记得改一下

4、project manager里正常配置即可

 

接线:只用MPU6050的SDA,SCL,GND,VCC四个引脚即可,其他的话目前不需要,引脚对着图接即可

      我用的是DAPLINK,就用DAPLINK上的TX接单片机的RX,RX对TX即可

 

之后就是keil里的部分

先把移植文件都导入进去,根据引脚配置改一下mpuiic.h里的宏定义,然后定义一下三个欧拉角变量(pitch,roll,yaw)

再写一下printf重定向,把下面代码加在usart.c即可

复制代码
/* USER CODE BEGIN 0 */ typedef struct __FILE FILE; struct __FILE { int handle; }; FILE __stdout; /* USER CODE END 0 */ /* USER CODE BEGIN 1 */ int fputc(int ch, FILE *f) { while((USART1->SR&0X40)==0); //这里是usart1,用别的串口记得改 USART1->DR = (uint8_t) ch; return ch; } /* USER CODE END 1 */
复制代码

然后是main函数里的代码

复制代码
/* USER CODE BEGIN 2 */ MPU_Init(); printf("print ok\n"); while(mpu_dmp_init()) { HAL_Delay(20); printf("no_dmp\n"); } printf("ok_dmp\n"); /* USER CODE END 2 */ /* USER CODE BEGIN 3 */ while(mpu_dmp_get_data(&pitch,&roll,&yaw)){} printf(" pitch:%f\n roll:%f\n yaw:%f\n",pitch,roll,yaw); HAL_Delay(1000); /* USER CODE END 3 */
复制代码

然后打开串口助手,就可以收到MPU6050发送的三个欧拉角信息啦

值得注意的一些地方:

1、两个GPIO口的配置均为开漏输出,如果是推挽输出的话会导致dmp初始化不成功(返回值为4)

2、烧录的时候MPU6050记得放平,不然容易出现误差

3、因为没加地磁计,所以yaw的零点漂移会比较严重

4、其他问题可以参考这篇博客里最后的问题汇总

第一次写博客,还请多多指教>_<

后面有空可能会写pid的东西() 


__EOF__

本文作者Asaka
本文链接https://www.cnblogs.com/Asaka-QianXiang/p/17031005.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Akasa  阅读(532)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示