你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

F4-Discovery连接MPU9250【MD6.12 keil移植】 精华  

[复制链接]
watershade 发布时间:2015-8-8 14:46
本帖最后由 watershade 于 2015-8-22 12:39 编辑

Motion Driver6.1.2 Demo移植(需要起个大众都知道的名字,改成F4-Discovery连接MPU9250)


最近下载了Invensense的最新姿态传感器库Motion Driver6.1.2,内含一个F4-Discovery板子的Demo。
就准备了硬件MPU9250的测试板和F4-Disco的板子。
起初以为调试很简单。不想练在连接I2C的硬件时就犯了很大的错误。NCS起初调试的时候浮空了,AD0也是浮空。这就浪费了我不少时间,一时间信心全无。还在我之前用BB-Black运行的linux系统上的I2C-Detect测试过这块传感器板子。又仔细的检查了电路和官方的PS之后就解决了问题。
起初在的测试是在IAR上测试的,但是个人更喜欢keil上的全局搜索功能,就将工程移植到keil,以便后续工程的迁移。

现在将IAR移植到keil的笔记和最终代码发到论坛。期望对人有些帮助。至于后续的迁移项目,视情况而定吧。
下图是利用自导的python测试程序测试的图片截屏。
md62.png
注意在迁移的时候我将工程的标准库更新到了最新的V1.5.1.
调试记录属于随笔记录性质的,所以语言可能不流畅。勉强看吧。原本是txt的文档,因为格式不允许就压缩了。
因为大小有限制,所以分成压缩成两个包。 IMU调试记录.rar (3.54 KB, 下载次数: 733)

评分

参与人数 1 ST金币 -1 收起 理由
zhill -1 很给力!

查看全部评分

1 收藏 12 评论118 发布时间:2015-8-8 14:46

举报

118个回答
watershade 最优答案 回答时间:2015-8-8 18:52:09
本帖最后由 watershade 于 2015-8-9 11:46 编辑

因为只贴附件不够直观(因为文件是用sublime编写的,用notepad打开可能是乱码),现在将调试记录的内容粘贴如下:
在调试的时候发现地址是很有意思的如果连接AD到GND的话,I2C地址是68. AD悬空或者拉高是69.

上面的情况是我出错的一个原因,另一个原因是在I2C连接时将CS浮空,但是事实上在使用I2C的时候务必将其拉高。

2015.08.05 使用官方提供的python测试程序测试通过。解决了困扰已久的硬件问题。本次硬件问题的解决借助了BB-Black来帮忙,使用BBB内置的I2Cdetect来测试。找到了问题。

关于SPI和I2C的接线还要参考demo板和原理图说明。[UEVB]

PS-MPU-9250A-01.pdf文件第12页给出了I2C地址的描述。AD0 = 0时,地址1101000, AO0 =1时地址是1101001.在实际应用中这个字节的最低位会添加0或1.表示写或者读。所以读地址是11010001或11010011(D1或D3),写地址是11010000或11010010(D0或者D2)。
测试的下一个阶段是将项目移植到keil上面,进行测试。另一个阶段的工作是使用cube库进行移植。

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
第二阶段:移植到keil工程中
说明:本次移植不只是简单的复制粘贴,本次移植的目的还有一个是能够将其代码F4在不同的系列上面移植,目标之一就是F401板子。
本次一直是利用官方的标准库结合特定的BSP来进行移植的。在移植之前需要分析工程的代码结构。
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 看代码[]
省略。。。



2 硬件描述:
2.1>传感器和开发板之间:
信号        MPU9250测试板                        开发板                        描述
+5V                VCC_IN(内含3.3V稳压)        +5V                                电源+
GND                GND                                                GND                                电源-
SCL                SCL/SCLK                                PB10(I2C2-SCL)        I2C时钟线
SDA                SDA/MOSI                                PB11(I2C2-SDA)        I2C数据线
NONE        NCS(无用须拉高)                        +3V                         高电平,MOSI时有用
sel AD         AD/MOSI                                 GND                                拉低地址68,拉高69

2.2>UART信号通过USB转TTL(FT232)引入电脑
开发板                FT232板子        描述
PA2(Tx2)        RX                        开发板信号传出
PA3(Rx2)        TX                         开发板信号引入
GND                        GND                        GND

3 文件结构分析
3.1包含目录
@1 STM32F4xx_StdPeriph_Driver
        |+inc{}
        |+src{}
@2        core
        |+driver
                \+eMPL{}
                \+include{}
                \stm32L{}
        |eMPL-hal{}
        |mllite{}
        |mpl
@3        DeviceSupport
        |+inc{}
        |+src{}
@4        Peripheral
        |+inc{}
        |+src{}
@5        User
        |+inc{}
        |+src{}                                
下面列出SRC
$PROJ_DIR$\..\User\inc
$PROJ_DIR$\..\User\src
$PROJ_DIR$\..\Peripheral\inc
$PROJ_DIR$\..\Peripheral\src
$PROJ_DIR$\..\STM32F4xx_StdPeriph_Driver\inc
$PROJ_DIR$\..\STM32F4xx_StdPeriph_Driver\src
$PROJ_DIR$\..\DeviceSupport\inc
$PROJ_DIR$\..\DeviceSupport\src
$PROJ_DIR$\..\core\driver\include
$PROJ_DIR$\..\core\driver\eMPL
$PROJ_DIR$\..\core\driver\stm32l
$PROJ_DIR$\..\core\mllite
$PROJ_DIR$\..\core\mpl
$PROJ_DIR$\..\core\eMPL-hal
转换到keil是(keil目录在):
..\User\inc
..\User\src
..\Peripheral\inc
..\Peripheral\src
..\STM32F4xx_StdPeriph_Driver\inc
..\STM32F4xx_StdPeriph_Driver\src
..\DeviceSupport\inc
..\DeviceSupport\src
..\core\driver\include
..\core\driver\eMPL
..\core\driver\stm32l
..\core\mllite
..\core\mpl
..\core\eMPL-hal
keil工程位于新建的MDK-ARM文件夹内
@6        MDK-ARM
也新建下面目录存储二进制文件
@7        Binary

3.2预处理命令:
USE_STDPERIPH_DRIVER
USE_DMP
MPL_LOG_NDEBUG=1
EMPL
MPU9250
EMPL_TARGET_STM32F4
迁移到keil:
USE_STDPERIPH_DRIVER,USE_DMP,MPL_LOG_NDEBUG=1,EMPL,MPU9250,,EMPL_TARGET_STM32F4
在keil的标准库中还需要添加设备名称F407的名称对应STM32F40_41xxx
这部分可参考文件stm32f4xx.h
  /* #define STM32F40_41xxx */   /*!< STM32F405RG, STM32F405VG, STM32F405ZG, STM32F415RG, STM32F415VG, STM32F415ZG,  
                                      STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG, STM32F407IE,
                                      STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE, STM32F417IG and STM32F417IE Devices */

  /* #define STM32F427_437xx */  /*!< STM32F427VG, STM32F427VI, STM32F427ZG, STM32F427ZI, STM32F427IG, STM32F427II,  
                                      STM32F437VG, STM32F437VI, STM32F437ZG, STM32F437ZI, STM32F437IG, STM32F437II Devices */

  /* #define STM32F429_439xx */  /*!< STM32F429VG, STM32F429VI, STM32F429ZG, STM32F429ZI, STM32F429BG, STM32F429BI,  
                                      STM32F429NG, STM32F439NI, STM32F429IG, STM32F429II, STM32F439VG, STM32F439VI,
                                      STM32F439ZG, STM32F439ZI, STM32F439BG, STM32F439BI, STM32F439NG, STM32F439NI,
                                      STM32F439IG and STM32F439II Devices */

  /* #define STM32F401xx */      /*!< STM32F401CB, STM32F401CC,  STM32F401RB, STM32F401RC, STM32F401VB, STM32F401VC  
                                      STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CExx, STM32F401RE and STM32F401VE Devices */

  /* #define STM32F411xE */      /*!< STM32F411CD, STM32F411RD, STM32F411VD, STM32F411CE, STM32F411RE and STM32F411VE Devices */
  
  /* #define STM32F446xx */      /*!< STM32F446MC, STM32F446ME, STM32F446RC, STM32F446RE, STM32F446VC, STM32F446VE, STM32F446ZC
                                      and STM32F446ZE Devices */



3.3浮点运算
IAR:Genaeral Options>FPU>VFPv4
keil: Target>Roating Point Hardware>Usr Single Precision

3.4堆栈大小
IAR:Linker>Config>Override default>$PROJ_DIR$\stm32f40x_flash.icf>[.intec=0x08000000,ROM{S=0x8000000,E=0x080FFFFF},RAM{S=0x20000000,E=0x2001BFFF},CSTACK=0x1000,HEAP=0x800]
Keil分别在Target>IROM1/IRAM1(保持默认),和.s文件处修改(稍后修改)。

3.5项目目录结构
参照3.1中的描述建立但是因为keil不支持多级目录所以用符号代替,同时只用包含C和s文件就足够了

3.6替换.s和.a文件
这两个文件分别位于core/mpl和DeviceSupport下面。
其中.a文件换成了.lib文件,因为keil不支持.a,而支持lib
在更换.s文件时也配套更换了对应的.h文件
添加CMSIS目录
@8        CMSIS
内部包含Include和lib目录

////////////////////////////////
编译不通过

//////////////////////////////////////////////
继续修改
编译模式修改为c99模式,并包含micro lib之后去掉了多数错误
目前主要的警告包含两类:
一类是without a new line,另一类是void参数省略提醒。
几个小的警告:
还有几个警告是单精度转换成双精度类型。
__no_operation();没有定义




目前还剩余的三处错误。但实际上是一个错误,这个错误是:
1        fputs错误:IAR的fputs原型是fputc(int ch),keil的fputs原型是fputc(int ch, FILE *f)

这三个错误排出之后新增一个__no_operation()的错误,在IAR中,这一项在intrinsics.h中定义。
在keil中使用nop函数来替代,这个函数在intrins.h。但是这个语法不能用在ARM上。
MDK上的替代语句是:__nop()语句

3.7测试
忘记连接INT到PA1上,串口连线松动。修整好之后,测试通过。







怀念过去1 回答时间:2016-11-16 17:33:45
lzm1019 发表于 2016-3-26 18:32
您好!对比您之前#1的代码,发现invensense_adv.h文件有变更,具体为:
---------------------
调用#incl ...

invensense_adv.h文件中,包含了两个mag_disturb.h  但是落下了inv_math.h没有include进去,所以楼主更改了其中一个!
priestyoyo 回答时间:2015-8-25 10:03:14
watershade 发表于 2015-8-24 22:31
现在还是不清楚你遇到的具体是什么问题?是通过SPI不能读取原始数据吧? Hom Wang 提供的程序不能工作吗 ...

嗯,问题是这样的。MPU9250这个芯片的磁力计AK8963只有I2C接口,而加速度计陀螺仪MPU6500模块是I2C接口与SPI都有的, 08N`N[WZ$RE%S3ZB[E(5B.png 看他手册的block diagram描述应该就是这样,所以如果使用SPI接口,我们只能通过配置内部的I2C master模块,让i2c matster通过内部的i2c总线来读取磁力计数据。。。所以总结我遇到的问题就是,当使用SPI接口时,我用i2c master碰到问题了,无论如何尝试都不能通过i2c master读取磁力计,只能读到加速度和陀螺仪数据。而我使用i2c的bypass模式可以读取所有的9轴数据。他的程序我以前也试过了,初始化的时候就是失败的,所以已经放弃SPI读取地磁很久了。。不过看到你发帖,突然很激动。。希望多多交流
motianlun1111 回答时间:2015-8-21 22:19:13
像这个5.1版本的库的这个文件呢?Embedded Motion Driver v5.1.1 APIs Specification
yanhaijian 回答时间:2015-8-8 16:52:43
老师讲讲啊。

评分

参与人数 1ST金币 +30 收起 理由
沐紫 + 30 赞一个!

查看全部评分

watershade 回答时间:2015-8-8 18:47:53

刚开始移植,回头搞完了,没准发个教程。
alles_ok>>0_0<< 回答时间:2015-8-10 05:49:49
多谢大师分享,学习了。
苏柚 回答时间:2015-8-10 09:57:12
大神
JackieLaura 回答时间:2015-8-10 11:47:32
水哥的东西好高深,看不懂。。。
watershade 回答时间:2015-8-11 20:39:15
JackieLaura 发表于 2015-8-10 11:47
水哥的东西好高深,看不懂。。。

自己在移植时的笔记,只是简单的记录。如果又需要,凑合看吧。看不懂问我。
motianlun1111 回答时间:2015-8-21 22:04:23
楼主你好,这个6.1.2的用户手册有没有?我找不到,
watershade 回答时间:2015-8-21 22:10:29
motianlun1111 发表于 2015-8-21 22:04
楼主你好,这个6.1.2的用户手册有没有?我找不到,

有,我待会上传一下。你记得下载

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版