| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 嵌入式 -> 基于STM32的MPU6050 -> 正文阅读 |
|
|
[嵌入式]基于STM32的MPU6050 |
|
热泪盈眶? 最近的考核任务是基于STM32的MPU6050 我移植的是正点的模板 1.第一个出现的问题 #define SDA_IN() ?{GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=0<<9*2;}?? ?//PB9输入模式 正点软件模拟IIC用的IO口是B8B9 我的板子是B6B7 而上面两句话不知道怎么改 在网上看了很多资料后初步了解? 复制一下 ? 3是二进制的11,~(3<<(92)是将11左移9*2=18位,也就是第18位和第19位为11,其他各位为0,。然后取反,即除了第18位和第19位为0,其他各位都为1。这里可能默认3是int型,占据4个字节32位。然后再与GPIOB组的moder寄存器取与,即将moder寄存器第18位和第19位置0,其他各位保持不变。由moder寄存器各位功能可知,就是讲PB9口设置为复位模式(即输入模式)。而GPIOB->MODER|=0<<92同样的过程,由于0<<92最后的结果是各位都是0,再与moder寄存器取或,即moder寄存器各位都不变,所以最终设置PB9为输入模式。 ?所以??变为B6B7则变成 #define SDA_IN() ?{GPIOB->MODER&=~(3<<(7*2));GPIOB->MODER|=0<<7*2;}?? ? ? ?//PB7输入模式 不得不说? 看完上边博主的话我直接恍然大悟 2,第二个出现的问题? ?? ?MPU_Init();?? ??? ??? ??? ??? ?//初始化MPU6050? ? ? ?? ?? 第二个是? MPU和DMP的初始化 MPU与单片机的连线 VCC接5V? GND接GND SCL SDA是初始化IIC中的两个IO口 还有一根线 AD0(这里太太太需要注意了) //如果AD0脚(9脚)接地,IIC地址为0X68(不包含最低位). 这是正点原子里例程的原话!!! 如果你的AD0接地或者接3.3V时地址没改会出现以下问题 (1)定义全局变量a 使a=MPU_Init();? ? ? ?则debug显示值会为1或非0即MPU初始化失败 我一开始并没有debug? ?MPU_Init();? 的值就导致接下来一直卡在 ?? ?while(mpu_dmp_init())//? 检验dmp是否初始化成功 通过设置全局变量a检测到?mpu_dmp_init() 的值为1 。。。。。。。。。。 网上各种找以为是FIFO没有开启? 也特意在mpu_write_mem中设置延时。。并没用。。 并没有用!于是我发现了? 我的AD0接3.3v 而地址初始设置的是 0X68 (微笑🙂) AD0接地后MPU初始化成功 (2)mpu_dmp_init()返回值为4 !!!有和我一样设置全局变量的好兄弟们注意!!
?mpu_dmp_init()为4是加载DMP固件库失败 !!!! 大家一定要记得看看前面是否加载过DMP 比如设置a=mpu_dmp_init()来debugDMP是否初始化成功🙂 (3)mpu_dmp_init()返回值为8 返回值为8是自检未通过? ?可以将MPU6050水平放置 水平放置之后我的就为0啦?? ------------------------------------------------------------------------ (吃完饭继续调) 3.第三个出现的问题 mpu_dmp_get_data(&pitch,&roll,&yaw)返回值为1 网上有很多mpu_dmp_get_data(&pitch,&roll,&yaw)的解决方案 我真傻真的(哭泣) 但大多都是这么写的 while(mpu_dmp_get_data(&pitch,&roll,&yaw)!=0);//返回值:0,DMP成功解出欧拉角
printf("pitch=%f\troll=%f\tyaw=%f\r\n",pitch,roll,yaw);
结合正点原子的代码应该是这样的 ? ??? ?while(1)
?? ??? ??? ?{
?? ??? ??? ????while(mpu_dmp_get_data(&pitch,&roll,&yaw)!=0){}
?? ??? ? ? ?}
过程——————在debug中一直查看Go to definition of mpu_dmp_get_data——dmp_read_fifo——mpu_read_fifo_stream——mpu_read_fifo_stream ?这才发现 fifo_count < length 也就是FIFO溢出 这时候只需要一直重复读取FIFO寄存器 值得一说的是在??MPU_Init(void )? ?即MPU初始化代码中进行了 MPU_Write_Byte(MPU_FIFO_EN_REG,0X00);?? ?//关闭FIFO 但在mpu_dmp_init 即DMP初始化函数中又打开了FIFO ?? ?res=mpu_configure_fifo(INV_XYZ_GYRO | INV_XYZ_ACCEL);//设置FIFO 今天的任务结束啦? 明天再继续! |
|
|
| 嵌入式 最新文章 |
| 基于高精度单片机开发红外测温仪方案 |
| 89C51单片机与DAC0832 |
| 基于51单片机宠物自动投料喂食器控制系统仿 |
| 《痞子衡嵌入式半月刊》 第 68 期 |
| 多思计组实验实验七 简单模型机实验 |
| CSC7720 |
| 启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
| STM32初探 |
| STM32 总结 |
| 【STM32】CubeMX例程四---定时器中断(附工 |
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年12日历 | -2025/12/27 10:48:29- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |