本篇博客只介绍如何在HAL库进行移植代码,所以只开启了一些必要的端口:I2C1,USART1,另外介绍一下本文基于芯片STM32F411CEU6,大鱼电子的DMP库,STM32F10x系列移植方法相同。
首先,需要从大鱼电子里面移植需要的库函数,在自己创建的工程里面自己新建一个文件夹用来存放用户自己的一些代码。
其次在工程里面将每一个模块“Add New Group”,简介清晰,以便后期做一些代码的调试。
然后串口输出的话,还需要进行USART串口的重定义,我习惯性的放在usart.c里面,这里的红叉叉的消除,需要添加头文件#include “stdio.h”
然后进行编译,不出意外的话就是这个样子。
将“sys.h"改为”main.h“,删去”delay.h“.因为稍微看过后”sys.h“会发现,它里面存放的是用户自己配置的代码的.h库,因此,你可以更改为main.h,再将自己配置的.h库放main.h里面(这一步之后会有介绍)
打开mpu6050.h,将"mpuiic.h" 改为”i2c.h“,因为你配置的是硬件IIC的代码,不需要自己另外配置IIC函数
将初始化软件IIC函数删去 MPU_IIC_Init();更改为硬件IIC初始化;将delay_ms()改为HAL_Delay()
在mpu6050.h里面添加 #define u8 uint8_t; #define u16 uint16_t
配置完这些之后,你就会发现红叉叉比较少,但是还有一个地方需要更改,将原本的这四个软件IIC的读写函数(存在于mpu6050.c),更改为硬件IIC的读写函数;一定要注意HAL_Delay(1)不可以删去,删去后将无法实现IIC的读写
uint8_t MPU_Write_Len(uint8_t reg,uint8_t len,uint8_t *buf)
{
extern I2C_HandleTypeDef hi2c1;
HAL_I2C_Mem_Write(&hi2c1, MPU_WRITE, reg, I2C_MEMADD_SIZE_8BIT, buf, len, 0xfff);
HAL_Delay(1);
return 0;
}
uint8_t MPU_Read_Len(uint8_t reg,uint8_t len,uint8_t *buf)
{
extern I2C_HandleTypeDef hi2c1;
HAL_I2C_Mem_Read(&hi2c1, MPU_READ, reg, I2C_MEMADD_SIZE_8BIT, buf, len, 0xfff);
HAL_Delay(1);
return 0;
}
uint8_t MPU_Write_Byte(uint8_t reg,uint8_t data)
{
extern I2C_HandleTypeDef hi2c1;
unsigned char W_Data=0;
W_Data = data;
HAL_I2C_Mem_Write(&hi2c1, MPU_WRITE, reg, I2C_MEMADD_SIZE_8BIT, &W_Data, 1, 0xfff);
HAL_Delay(1);
return 0;
}
uint8_t MPU_Read_Byte(uint8_t reg)
{
extern I2C_HandleTypeDef hi2c1;
unsigned char R_Data=0;
HAL_I2C_Mem_Read(&hi2c1, MPU_READ, reg, I2C_MEMADD_SIZE_8BIT, &R_Data, 1, 0xfff);
HAL_Delay(1);
return R_Data;
}
然后就是更新一下.h库,并且编译一下,看一下错误.
第一种:找到类似的错误,这样更改
第二种:多了一个参数,删去,因为自己写的硬件IIC的读写函数的器件地址,是直接在函数内部就写好的,不需要作为一个形参
再编译一下,查看错误,更改错误(u8的更改,delay.h的删去)
再进行一次编译,就发现了这种错误
这种错误其实是,用户自己写的IIC读写函数,与DMP的内部解码函数的形参不匹配,最好的修改方法就是,用户再增加两个IIC读写函数,放到mpu6050.c里面;区别于之前的MPU_Write_Len,于是将函数名称改为DMP_Write_Len;并更改对应的.h库
uint8_t DMP_Write_Len(uint8_t addr, uint8_t reg,uint8_t len,uint8_t *buf)
{
extern I2C_HandleTypeDef hi2c1;
HAL_I2C_Mem_Write(&hi2c1, addr, reg, I2C_MEMADD_SIZE_8BIT, buf, len, 0xfff);
HAL_Delay(1);
return 0;
}
uint8_t DMP_Read_Len(uint8_t addr, uint8_t reg,uint8_t len,uint8_t *buf)
{
extern I2C_HandleTypeDef hi2c1;
HAL_I2C_Mem_Read(&hi2c1, addr, reg, I2C_MEMADD_SIZE_8BIT, buf, len, 0xfff);
HAL_Delay(1);
return 0;
}
并且将DMP的IIC的读写函数的宏定义修改(在imv_mpu.h中)然后编译,这些问题,读者可以进行自己解决了.
最后一定要显示这些代码,用来后续的调整
然后这样就是0 error, 0 warring.
然后进行测试,这里就要注意将自己添加代码的.h文件全部添加到main.h里面
到了这一步,你用串口打印出来后就会发现,可以显示原始数据,但是DMP并没有解算。所以查找原因。
但是我不敢保证不一样的芯片,他们出错的原因是否一样。
第一个错误:Unsupported software product rev;可以这样修改:
第二个错误:给mpu_dmp_init一个返回值,串口打印出来后显示8,这时候你直接把这个隐去就可以
总的来说呢,就是这样,要是有读者还有其他的问题都可以跟我私信交流。当然我可以附上移植DMP所需的文件,读者直接私信我,我不喜欢用下载,这样对很多CSDN读者不友好,成了氪金的一个blog。
文章浏览阅读958次。1、切换到oracle用户 创建一个导出目录 mkdir /home/expdp/ chown oracle:dba /home/expdp/2、登陆客户端sqlplus /nologconnect /as sysdba3、在Oracle里配置好Directory映射SQL> create directory somtemp as '/home/expdp';4、然后给要expdp的用户授权SQL>grant read,write on dire..._linux环境 oracle expdp数据迁移
文章浏览阅读6.7k次。WebSocket是什么?websocket是html5规范提出的一种协议;它基于TCP和HTTP协议是并存的两种协议。html5 web socket规范定义了webSocket API ,支持页面使用webSocket协议与远程主机进行全双工的通信,它引入了websocket接口并且定义了一个全双工的通信通道,通过单一的套接字在web上进行操作。 html5 web sockets 以最小的开销高效的提供了web链接,相较于经常使用推送实时数据到客户端甚至通过维护两个http链接来模拟全双工链接的旧_socket和websocket
文章浏览阅读9.7w次,点赞307次,收藏975次。1.莫尔斯电码是一种早期的数字化通信形式,它通过“·”和“-”的不同排列顺序来表示不同的英文字母、数字以及标点符号。试编写程序,使用字典存放下表的内容,将用户输入的字符串(假设只包含英文字母)以莫尔斯电码的形式输出。dic_morse={"A":"•−","B":"−•••","C":"−•−•","D":"−••","E":"•","F":"••−•","G":"−−•", "H":"••••","I":"••","J":"•−−−","K":"−•−","L":"•−••","M_以下是某电商卖家在售产品价目一览表
文章浏览阅读1.8w次,点赞5次,收藏16次。请教:运放噪声 5nV/根号Hz 什么意思啊? - 维库电子市场网 http://www.dzsc.com/dzbbs/20060929/20076518228437300.html 其实噪声是个能量概念或者说功率概念白噪声总功率(W)与带宽(Hz)成正比所以噪声密度的单位是 W/Hz但是平常习惯用电压电流表示信号,所以要把功率换算成电压 功率跟电压是平方关系,所以开平方后..._电流噪声密度
文章浏览阅读971次。Android:项目引入module导致Duplicate class…或Program type already present okhttp3 OkUrlFactory_android okurlfactory
文章浏览阅读595次。现在很多开源项目使用hsqldb作为数据库。了解hsqldb的基本使用方法还是很必要的。这篇不是全面介绍hsqldb的文字,但我认为用这个笔记的内容调试程序够用了。 一、下载数据库,地址在http://sourceforge.net/projects/hsqldb/files/hsqldb/ 我使用的是1.8.0版本。假定下载解压后的目录是D:/hsqldb/, 那么hsqldb.jar在D:/hsqldb/lib目录下。这个jar文件是hsqldb的核心包 二、启动数据库,比如数据库名称为tes_hsqldb的使用
文章浏览阅读768次。一.概述 Window表示一个窗口的概念,通过源码我们可以知道,Window是一个抽象类,那么到底Window的实现类是什么呢?其实是PhoneWindow。创建一个Window是一件很简单的事,只需要通过WindowManager即可完成。WindowManager是外界访问Window的入口,Window的具体实现位于WindowManagerService中,WindowManager和Wi_viewrootlmpl
文章浏览阅读2.1w次,点赞3次,收藏2次。原文链接系统:suse 11 Linux版本:SUSE Linux Enterprise Server 11 (i586)VERSION = 11PATCHLEVEL = 0 简单介绍一下配置文件方式添加静态路由的方法 配置文件路径:vim /etc/sysconfig/network/routes按以下格式添加内容:192._a 1p@1p@7t@
文章浏览阅读198次。计算机一级笔试模拟试题2(答案) (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.9 积分《大学计算机基础》For Windows (本试卷答卷时间为60分钟)学院: 专业: 年级: 学号: 姓名: 说明:本试卷全部为选择题,每题可供选择的答案中,只有一个正确或最佳答案。第一部分:基础知识(每项1.5分,14项,共21分)一、下列叙述正确的是 ..._以下算式中,相减结果得到十进制数0的是( )
文章浏览阅读2.4w次。PHP是越来越受欢的开发语言,PHP是因网络而生,是专业于网络程序开发的基础平台.很多优势在些不作太多介绍.对于我们习惯了windows操作系统技术人员来讲,在windows系统上架设PHP环境更轻松些.接下来由向大家介绍2008 R2 64位的服务器如何配置最新PHP环境._在2008服务器上面配置phpmyadmin访问
文章浏览阅读719次。1. 特征选择------sklearn代码1.1 特征选择------方差法忽略warning错误import warningswarnings.filterwarnings("ignore")# 方差法from sklearn.feature_selection import VarianceThresholdX = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1..._python 方差法选择特征
文章浏览阅读2.3k次,点赞2次,收藏11次。WebGL是一种用于在Web浏览器中实现高性能3D图形的技术。本文将帮助读者快速入门WebGL,了解其基本概念和使用方法。我们将介绍WebGL的基本架构和API,包括如何创建WebGL上下文、渲染对象和着色器编程等。此外,我们还会深入探讨WebGL的基本原理和渲染管线,以及如何通过优化渲染流程来提升性能。通过学习本文,读者将能够理解WebGL的核心概念和使用方法,并能够开始开发高性能的3D应用程序。_webgl入门