|
本帖最后由 watershade 于 2015-8-22 12:39 编辑 6 P, [4 i# {; N; c& i Motion Driver6.1.2 Demo移植(需要起个大众都知道的名字,改成F4-Discovery连接MPU9250)9 K0 `: p& r" @& J+ e 最近下载了Invensense的最新姿态传感器库Motion Driver6.1.2,内含一个F4-Discovery板子的Demo。. u* y9 n4 Z8 X1 V! M/ }' | 就准备了硬件MPU9250的测试板和F4-Disco的板子。 起初以为调试很简单。不想练在连接I2C的硬件时就犯了很大的错误。NCS起初调试的时候浮空了,AD0也是浮空。这就浪费了我不少时间,一时间信心全无。还在我之前用BB-Black运行的linux系统上的I2C-Detect测试过这块传感器板子。又仔细的检查了电路和官方的PS之后就解决了问题。 起初在的测试是在IAR上测试的,但是个人更喜欢keil上的全局搜索功能,就将工程移植到keil,以便后续工程的迁移。 : ?" O% X0 _% I% ^5 G 现在将IAR移植到keil的笔记和最终代码发到论坛。期望对人有些帮助。至于后续的迁移项目,视情况而定吧。4 d( r3 A2 V7 D9 u 下图是利用自导的python测试程序测试的图片截屏。
注意在迁移的时候我将工程的标准库更新到了最新的V1.5.1.. q4 v0 L* E* U 调试记录属于随笔记录性质的,所以语言可能不流畅。勉强看吧。原本是txt的文档,因为格式不允许就压缩了。 因为大小有限制,所以分成压缩成两个包。
IMUè°è¯è®°å½.rar
(3.54 KB, 下载次数: 734)
|
STM32MP1 自举程序编程:USB DFU/USART 协议全解析
实战经验 | 如何配置STM32MP257的RMII Switch
OpenSTLinux 6.1发布:M33-TD加持+安全升级,STM32MPU开发效率翻倍!
STM32MP135 MP157 MP257 CoreMark移植&&跑分对比&&多核心负载不均衡问题排查与解决
实战经验 | 1小时在STM32MPU上运行YOLOv8——训练篇
实战经验 | 1小时在STM32MPU上运行YOLOv8——训练篇
利用STM32MP1和STM32MP2为嵌入式Linux提供有效的安全措施:供当今决策者参考的3条宝贵经验
有奖直播 | STM32MP2x 资源隔离架构 (RIF) 介绍与使用
白皮书下载|边缘 AI 变革:MCU集成 NPU 的破局与领航
OpenSTLinux:为STM32 MPU生态系统带来超强助力
微信公众号
手机版
/ B* C! l7 z* a( p0 [3 m6 `3 f. z9 f
因为只贴附件不够直观(因为文件是用sublime编写的,用notepad打开可能是乱码),现在将调试记录的内容粘贴如下:
在调试的时候发现地址是很有意思的如果连接AD到GND的话,I2C地址是68. AD悬空或者拉高是69.
上面的情况是我出错的一个原因,另一个原因是在I2C连接时将CS浮空,但是事实上在使用I2C的时候务必将其拉高。
2015.08.05 使用官方提供的python测试程序测试通过。解决了困扰已久的硬件问题。本次硬件问题的解决借助了BB-Black来帮忙,使用BBB内置的I2Cdetect来测试。找到了问题。3 n/ @& L: q. U4 d, b0 K7 Y9 O
; g/ R; i# i J) I4 i, C
关于SPI和I2C的接线还要参考demo板和原理图说明。[UEVB]
6 B; l6 |) P2 V0 S$ t
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库进行移植。2 u) M' g! _4 x; ?7 a
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||6 {9 o6 N6 D1 K# A9 `4 n+ \
第二阶段:移植到keil工程中
说明:本次移植不只是简单的复制粘贴,本次移植的目的还有一个是能够将其代码F4在不同的系列上面移植,目标之一就是F401板子。
本次一直是利用官方的标准库结合特定的BSP来进行移植的。在移植之前需要分析工程的代码结构。& r2 O, q6 l2 L8 r
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 看代码[]
省略。。。7 @: `: \' R/ p
5 k3 X1 e ]8 m. r( ?' D. L
2 硬件描述:- o) j8 o" l3 G1 d
2.1>传感器和开发板之间:
信号 MPU9250测试板 开发板 描述7 ?" c" C/ q& |# _& S; L4 l8 _
+5V VCC_IN(内含3.3V稳压) +5V 电源+
GND GND GND 电源-* V. ^% z) L9 ^6 T% ~3 J
SCL SCL/SCLK PB10(I2C2-SCL) I2C时钟线
SDA SDA/MOSI PB11(I2C2-SDA) I2C数据线; n# S5 Y- {8 p& O/ b4 ]
NONE NCS(无用须拉高) +3V 高电平,MOSI时有用
sel AD AD/MOSI GND 拉低地址68,拉高69# ?6 W( U0 G' `1 R* k8 H
0 p( _( l% K( ~/ P. w" ]2 o
2.2>UART信号通过USB转TTL(FT232)引入电脑" F7 j2 ~7 |& f+ ~: x8 T. A
开发板 FT232板子 描述 p$ l3 {8 \( \7 S S* y
PA2(Tx2) RX 开发板信号传出
PA3(Rx2) TX 开发板信号引入
GND GND GND
! N" ]8 K' S C5 [: L
3 文件结构分析
3.1包含目录$ |9 G8 p# S! }) R
@1 STM32F4xx_StdPeriph_Driver
|+inc{}3 d! M" ?4 t' W! z8 [
|+src{}
@2 core
|+driver
\+eMPL{}
\+include{}/ |, P- R# r# g) ~
\stm32L{}- T- W- h; G8 _% \
|eMPL-hal{}
|mllite{}$ M" g8 E8 w( u2 y8 V7 n) Y3 H
|mpl& s: e3 a. l1 O9 |/ }2 @2 d
@3 DeviceSupport
|+inc{}0 O3 p, g/ `: u+ p" Y
|+src{}
@4 Peripheral
|+inc{}: O. J+ k2 ?9 G& \" o5 t. Q& m
|+src{}
@5 User
|+inc{}. O; p5 K! y, W9 X. J! _
|+src{}
下面列出SRC
$PROJ_DIR$\..\User\inc; D% t" V2 N {
$PROJ_DIR$\..\User\src1 o$ h+ T' g. [* Q/ j
$PROJ_DIR$\..\Peripheral\inc% @7 ?: S1 N0 `' m6 j7 s4 G, m
$PROJ_DIR$\..\Peripheral\src3 W9 s B! n% W5 D
$PROJ_DIR$\..\STM32F4xx_StdPeriph_Driver\inc
$PROJ_DIR$\..\STM32F4xx_StdPeriph_Driver\src
$PROJ_DIR$\..\DeviceSupport\inc4 @3 R& {+ G0 M0 x( c# P9 T
$PROJ_DIR$\..\DeviceSupport\src
$PROJ_DIR$\..\core\driver\include+ V8 b3 L, B( {
$PROJ_DIR$\..\core\driver\eMPL! u% `$ n: x2 O
$PROJ_DIR$\..\core\driver\stm32l& S4 \- M. g; k" ?# M! a+ W
$PROJ_DIR$\..\core\mllite
$PROJ_DIR$\..\core\mpl! `- @) F+ l6 f* U+ P
$PROJ_DIR$\..\core\eMPL-hal8 ^2 b6 U% ? H6 p+ m
转换到keil是(keil目录在):
..\User\inc0 N6 h; ?5 S$ J7 Q7 L2 r! K
..\User\src
..\Peripheral\inc
..\Peripheral\src1 z% A4 \7 y- f% a& E4 v" S! j9 N2 I
..\STM32F4xx_StdPeriph_Driver\inc4 ~8 F, |* R8 R% I0 n( Q
..\STM32F4xx_StdPeriph_Driver\src
..\DeviceSupport\inc, [2 E7 r) W/ u% S2 p9 E7 x
..\DeviceSupport\src
..\core\driver\include
..\core\driver\eMPL
..\core\driver\stm32l
..\core\mllite0 m. ^' j$ i+ K: o
..\core\mpl
..\core\eMPL-hal, M0 ^& c8 i% J: U/ |8 e
keil工程位于新建的MDK-ARM文件夹内: z6 F' y/ N8 k7 A
@6 MDK-ARM! F1 Q: p) t4 g) |9 f6 h
也新建下面目录存储二进制文件
@7 Binary& l$ P1 p) x k
3.2预处理命令:* P! N$ Y' z3 x1 U) f: c
USE_STDPERIPH_DRIVER
USE_DMP
MPL_LOG_NDEBUG=1: P3 ?. P( {6 \; O$ d: u# t- R
EMPL7 y% o4 ~1 R+ L: C! @; p" k9 @! d
MPU9250
EMPL_TARGET_STM32F4# Q0 F9 E- f* N
迁移到keil:3 q! ~2 w, M, A& v! A
USE_STDPERIPH_DRIVER,USE_DMP,MPL_LOG_NDEBUG=1,EMPL,MPU9250,,EMPL_TARGET_STM32F4
在keil的标准库中还需要添加设备名称F407的名称对应STM32F40_41xxx
这部分可参考文件stm32f4xx.h, |* h0 N% n' U% Q# s! l8 v
/* #define STM32F40_41xxx */ /*!< STM32F405RG, STM32F405VG, STM32F405ZG, STM32F415RG, STM32F415VG, STM32F415ZG,
STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG, STM32F407IE, 2 k3 i, A( D* d; j" `+ i
STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE, STM32F417IG and STM32F417IE Devices */
/* #define STM32F427_437xx */ /*!< STM32F427VG, STM32F427VI, STM32F427ZG, STM32F427ZI, STM32F427IG, STM32F427II,
STM32F437VG, STM32F437VI, STM32F437ZG, STM32F437ZI, STM32F437IG, STM32F437II Devices */$ R- A# R$ b k& A* t: }7 X ~! L
/* #define STM32F429_439xx */ /*!< STM32F429VG, STM32F429VI, STM32F429ZG, STM32F429ZI, STM32F429BG, STM32F429BI,
STM32F429NG, STM32F439NI, STM32F429IG, STM32F429II, STM32F439VG, STM32F439VI,
STM32F439ZG, STM32F439ZI, STM32F439BG, STM32F439BI, STM32F439NG, STM32F439NI," u/ N" U; g/ s3 P- y
STM32F439IG and STM32F439II Devices */
/* #define STM32F401xx */ /*!< STM32F401CB, STM32F401CC, STM32F401RB, STM32F401RC, STM32F401VB, STM32F401VC & L4 Q! v* N) Y2 v- D& N: B
STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CExx, STM32F401RE and STM32F401VE Devices */
/* #define STM32F411xE */ /*!< STM32F411CD, STM32F411RD, STM32F411VD, STM32F411CE, STM32F411RE and STM32F411VE Devices */" L! L, x8 Z& g$ }3 `$ J7 m, R7 i$ q
/* #define STM32F446xx */ /*!< STM32F446MC, STM32F446ME, STM32F446RC, STM32F446RE, STM32F446VC, STM32F446VE, STM32F446ZC + C, y- W0 T1 F2 S) T
and STM32F446ZE Devices */
3.3浮点运算
IAR:Genaeral Options>FPU>VFPv40 @& V. z& H8 D/ e' [) M
keil: Target>Roating Point Hardware>Usr Single Precision4 k3 S; {: e5 s0 ~( g
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文件就足够了# X- C$ u" U( W4 h
3.6替换.s和.a文件
这两个文件分别位于core/mpl和DeviceSupport下面。9 t+ W, U9 e9 U% y9 ]
其中.a文件换成了.lib文件,因为keil不支持.a,而支持lib/ i7 Q/ L7 P+ `( Q0 s, j
在更换.s文件时也配套更换了对应的.h文件' P4 X/ n- p. w) f
添加CMSIS目录6 y* B5 s7 @5 C! h# c! G3 J( _: e
@8 CMSIS+ z0 t9 H* y- K& s1 ~+ c S
内部包含Include和lib目录/ P: T- T* {6 `3 t- k) B
( K' F4 o9 v9 X1 t4 y
////////////////////////////////, H+ m1 P! K$ Y. U: i
编译不通过
* s9 p a) A% K2 W* u1 V' T
//////////////////////////////////////////////
继续修改
编译模式修改为c99模式,并包含micro lib之后去掉了多数错误3 z6 ^9 ?7 M5 M& v$ o/ H
目前主要的警告包含两类:
一类是without a new line,另一类是void参数省略提醒。 n0 F; {( d3 V* n! M2 F
几个小的警告:- A+ l+ ~3 i+ D7 [/ i8 V
还有几个警告是单精度转换成双精度类型。
__no_operation();没有定义
9 R" k* l( Z/ n" z" _9 C' A
7 B7 p M4 ^- }! p4 t9 O8 T8 R- t
8 `7 ?- f2 [* B7 s
目前还剩余的三处错误。但实际上是一个错误,这个错误是:3 j; z) N5 [7 {4 n' [1 O/ k3 S2 `
1 fputs错误:IAR的fputs原型是fputc(int ch),keil的fputs原型是fputc(int ch, FILE *f), r/ i( r/ J5 Y
" t/ |& S% \) |* N1 v! [
这三个错误排出之后新增一个__no_operation()的错误,在IAR中,这一项在intrinsics.h中定义。
在keil中使用nop函数来替代,这个函数在intrins.h。但是这个语法不能用在ARM上。
MDK上的替代语句是:__nop()语句
! f( x$ `% m4 X. H
3.7测试
忘记连接INT到PA1上,串口连线松动。修整好之后,测试通过。- V% R4 T6 w+ U* n
2 R! n' e+ E: j' B9 O3 |
0 D( \- M( K) H# i! S6 U) V1 c
4 `! R) ~2 ]8 z1 P7 G" |
- _$ \ m) M- [
$ H: y* a8 N6 k
0 c6 g1 m5 o& [4 G# @: W" r
invensense_adv.h文件中,包含了两个mag_disturb.h 但是落下了inv_math.h没有include进去,所以楼主更改了其中一个!
嗯,问题是这样的。MPU9250这个芯片的磁力计AK8963只有I2C接口,而加速度计陀螺仪MPU6500模块是I2C接口与SPI都有的,
评分
查看全部评分
刚开始移植,回头搞完了,没准发个教程。
自己在移植时的笔记,只是简单的记录。如果又需要,凑合看吧。看不懂问我。
有,我待会上传一下。你记得下载
App Note 1 - Motion Driver 6.12 Getting Started.pdf
2015-8-21 22:11 上传
点击文件名下载附件
1.02 MB, 下载次数: 585
App Note 2- Motion Driver 6.12 Features Guide.pdf
2015-8-21 22:11 上传
点击文件名下载附件
347.33 KB, 下载次数: 127
App Note 3- Motion Driver 6.12 Porting Guide.pdf
2015-8-21 22:11 上传
点击文件名下载附件
684.45 KB, 下载次数: 118
MPU HW Offset Registers 1.2.pdf
2015-8-21 22:11 上传
点击文件名下载附件
309.28 KB, 下载次数: 122
Orientation Matrix Transformation chart.pdf
2015-8-21 22:11 上传
点击文件名下载附件
184.32 KB, 下载次数: 120
; P/ a# g0 H; A# \