| |
|
开发:
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图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 5:43:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |