本帖最后由 watershade 于 2015-8-22 12:39 编辑 $ o# T, i' Q/ C* z' M5 K# K: S % L8 A9 O B5 o9 @# u6 P Motion Driver6.1.2 Demo移植(需要起个大众都知道的名字,改成F4-Discovery连接MPU9250) # b! ]% R" \% W( K 最近下载了Invensense的最新姿态传感器库Motion Driver6.1.2,内含一个F4-Discovery板子的Demo。: r0 z9 D6 }, U" U* q. G/ ? 就准备了硬件MPU9250的测试板和F4-Disco的板子。, S5 i7 y# [+ U. Z" h 起初以为调试很简单。不想练在连接I2C的硬件时就犯了很大的错误。NCS起初调试的时候浮空了,AD0也是浮空。这就浪费了我不少时间,一时间信心全无。还在我之前用BB-Black运行的linux系统上的I2C-Detect测试过这块传感器板子。又仔细的检查了电路和官方的PS之后就解决了问题。 起初在的测试是在IAR上测试的,但是个人更喜欢keil上的全局搜索功能,就将工程移植到keil,以便后续工程的迁移。) f* K; i( F- l 现在将IAR移植到keil的笔记和最终代码发到论坛。期望对人有些帮助。至于后续的迁移项目,视情况而定吧。 下图是利用自导的python测试程序测试的图片截屏。- b( I! u% q3 @ e 注意在迁移的时候我将工程的标准库更新到了最新的V1.5.1. 调试记录属于随笔记录性质的,所以语言可能不流畅。勉强看吧。原本是txt的文档,因为格式不允许就压缩了。$ w a0 M- v; A9 A2 L 因为大小有限制,所以分成压缩成两个包。 |
意法半导体最具性价比、速度最快的单核MPU STM32MP13现已支持运行RTOS
【STM32MP135-DK】裸机移植shell
【STM32MP13DK】 在Linux主机上交叉编译一个Hello Word应用
STM32MP135F-DK 开箱&开发环境搭建&硬件设计分析
意法半导体在意大利建SiC整合制造厂
轻松地实现ClassB在STM32CubeIDE上的移植
ST历史小知识(6)- 与世界共同塑造美好明天
ST历史小知识(5)- SiC衬底进一步发展
ST历史小知识(4)- 投资未来
ST历史小知识(3) - 布局新兴半导体工艺
因为只贴附件不够直观(因为文件是用sublime编写的,用notepad打开可能是乱码),现在将调试记录的内容粘贴如下:
在调试的时候发现地址是很有意思的如果连接AD到GND的话,I2C地址是68. AD悬空或者拉高是69.
$ q) v. L1 t: b5 N0 M
上面的情况是我出错的一个原因,另一个原因是在I2C连接时将CS浮空,但是事实上在使用I2C的时候务必将其拉高。2 n! p1 @% Z" J8 H
2015.08.05 使用官方提供的python测试程序测试通过。解决了困扰已久的硬件问题。本次硬件问题的解决借助了BB-Black来帮忙,使用BBB内置的I2Cdetect来测试。找到了问题。
7 F l$ Y, W5 G$ \5 g; T
关于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库进行移植。
# `5 C$ l1 v& y$ H0 z
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
第二阶段:移植到keil工程中
说明:本次移植不只是简单的复制粘贴,本次移植的目的还有一个是能够将其代码F4在不同的系列上面移植,目标之一就是F401板子。/ Y( Y9 X- A' }1 o$ @* n
本次一直是利用官方的标准库结合特定的BSP来进行移植的。在移植之前需要分析工程的代码结构。
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 看代码[]% p3 {& t1 |& @6 w6 a
省略。。。
9 h6 [9 A5 [! [. m
# S/ E& Y) F& J( `) q; c: W2 T
2 硬件描述:( B+ ]! Q8 F$ _1 q4 J
2.1>传感器和开发板之间:# A6 `1 u& M1 q- }8 B/ Y
信号 MPU9250测试板 开发板 描述5 _6 y! s, X8 d
+5V VCC_IN(内含3.3V稳压) +5V 电源+3 w1 i) w( @9 f% _: Y
GND GND GND 电源-
SCL SCL/SCLK PB10(I2C2-SCL) I2C时钟线
SDA SDA/MOSI PB11(I2C2-SDA) I2C数据线+ t; n6 d: {" x9 m1 Y. n
NONE NCS(无用须拉高) +3V 高电平,MOSI时有用6 `! }8 p7 e; w' S! \
sel AD AD/MOSI GND 拉低地址68,拉高69$ _; k1 y; [, J/ z9 F. p
2.2>UART信号通过USB转TTL(FT232)引入电脑
开发板 FT232板子 描述1 {- R3 {( b5 U% T
PA2(Tx2) RX 开发板信号传出/ P( N/ [ C0 ^7 j
PA3(Rx2) TX 开发板信号引入
GND GND GND
3 文件结构分析
3.1包含目录) C& R% q0 M% G; Q
@1 STM32F4xx_StdPeriph_Driver
|+inc{}) p2 L% r2 n2 |; f7 q
|+src{}0 z- b0 M9 x7 j2 P
@2 core5 K6 L7 v/ N4 z! J+ Q( w
|+driver- }) m) v- `# C1 _- N
\+eMPL{}' w" n! v/ U1 J' [
\+include{}
\stm32L{}5 n; @/ N' N; T; q# U3 n9 }. c' h8 X
|eMPL-hal{}3 H0 H" R1 H. Z! e, d1 i. a2 R, m% g
|mllite{}* O% H( ?" W/ b$ Z2 ]
|mpl
@3 DeviceSupport3 q4 {5 C1 }6 I; k+ a8 {& z6 }
|+inc{}+ s# P6 C/ |/ {& S
|+src{}9 z- Q: K% T# t: u
@4 Peripheral3 ?7 h6 D% _8 H0 r ?" i: {# s* {
|+inc{}$ H" p7 x. W8 H9 B ]
|+src{}
@5 User* x( B* {6 A$ b2 b/ x
|+inc{}; \! w4 @# |5 d" ]. P
|+src{} & `, s' l3 Z w" ^; \/ d- r
下面列出SRC- Y) y3 ?. ^" F
$PROJ_DIR$\..\User\inc3 f, v: y8 F9 N/ h- n
$PROJ_DIR$\..\User\src
$PROJ_DIR$\..\Peripheral\inc! P& z0 G6 n! i
$PROJ_DIR$\..\Peripheral\src* A/ c- O3 s# g
$PROJ_DIR$\..\STM32F4xx_StdPeriph_Driver\inc
$PROJ_DIR$\..\STM32F4xx_StdPeriph_Driver\src
$PROJ_DIR$\..\DeviceSupport\inc1 T8 C* @! n0 o V# ~
$PROJ_DIR$\..\DeviceSupport\src; n) c# g% @6 C" N
$PROJ_DIR$\..\core\driver\include; F) S @0 ]+ q1 B1 H" H" m) y
$PROJ_DIR$\..\core\driver\eMPL
$PROJ_DIR$\..\core\driver\stm32l1 {! N, S n" }- P5 f; ~- O A$ Y, y
$PROJ_DIR$\..\core\mllite
$PROJ_DIR$\..\core\mpl5 Y3 X, i6 d! h+ w3 N5 Z
$PROJ_DIR$\..\core\eMPL-hal8 \. `* k/ x+ d- O/ d1 [0 K
转换到keil是(keil目录在):
..\User\inc
..\User\src: l+ `9 b' d; j4 J R
..\Peripheral\inc
..\Peripheral\src
..\STM32F4xx_StdPeriph_Driver\inc
..\STM32F4xx_StdPeriph_Driver\src+ \( Q! x$ g: P
..\DeviceSupport\inc
..\DeviceSupport\src: K9 n" {& E0 V5 a; Z0 q; w
..\core\driver\include
..\core\driver\eMPL
..\core\driver\stm32l# I8 T: c9 g5 K- m+ g1 v( w3 R. l
..\core\mllite
..\core\mpl
..\core\eMPL-hal; [ @ Q* |; @
keil工程位于新建的MDK-ARM文件夹内
@6 MDK-ARM; I( I$ f! ~% I2 k1 x
也新建下面目录存储二进制文件$ Q( `6 h3 [# o8 w2 h4 d s9 S: `
@7 Binary
" `3 ~$ C4 H/ n9 T+ ?
3.2预处理命令:- Z* I8 y$ ]; R: m
USE_STDPERIPH_DRIVER8 v; Z' s6 b; {
USE_DMP
MPL_LOG_NDEBUG=1
EMPL8 f% y# w9 y: s
MPU92505 Q* i' _6 W1 Z/ i; ^- i/ e* G! v
EMPL_TARGET_STM32F4
迁移到keil:
USE_STDPERIPH_DRIVER,USE_DMP,MPL_LOG_NDEBUG=1,EMPL,MPU9250,,EMPL_TARGET_STM32F4' [$ `8 h5 Z$ P
在keil的标准库中还需要添加设备名称F407的名称对应STM32F40_41xxx
这部分可参考文件stm32f4xx.h+ F8 y# I2 t# H* k5 U7 r. D3 \
/* #define STM32F40_41xxx */ /*!< STM32F405RG, STM32F405VG, STM32F405ZG, STM32F415RG, STM32F415VG, STM32F415ZG,
STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG, STM32F407IE,
STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE, STM32F417IG and STM32F417IE Devices */- Z2 ]0 `7 U2 y1 l
/* #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, : M5 q4 E5 B0 G N, i
STM32F429NG, STM32F439NI, STM32F429IG, STM32F429II, STM32F439VG, STM32F439VI,
STM32F439ZG, STM32F439ZI, STM32F439BG, STM32F439BI, STM32F439NG, STM32F439NI," Q; z+ v' ~) X T: T# g ~2 Y
STM32F439IG and STM32F439II Devices */
3 S5 R. P, g8 U, e: ~: w0 z
/* #define STM32F401xx */ /*!< STM32F401CB, STM32F401CC, STM32F401RB, STM32F401RC, STM32F401VB, STM32F401VC
STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CExx, STM32F401RE and STM32F401VE Devices */) }6 {! q, a* W- L
/* #define STM32F411xE */ /*!< STM32F411CD, STM32F411RD, STM32F411VD, STM32F411CE, STM32F411RE and STM32F411VE Devices */
9 i3 m# U, k. _5 b
/* #define STM32F446xx */ /*!< STM32F446MC, STM32F446ME, STM32F446RC, STM32F446RE, STM32F446VC, STM32F446VE, STM32F446ZC
and STM32F446ZE Devices */' c' v" f( K, Y/ N4 [
2 o# B2 k( f: v0 E, m/ x, x
3.3浮点运算: [8 I. w" T7 I" o0 m
IAR:Genaeral Options>FPU>VFPv45 Q- y/ _5 M L, j
keil: Target>Roating Point Hardware>Usr Single Precision
' u1 [% B5 U3 ?' W
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文件处修改(稍后修改)。/ R9 p% y) V, J. f0 T* `7 v7 f% ^
3.5项目目录结构9 F I3 L' |+ s! x: O: ~
参照3.1中的描述建立但是因为keil不支持多级目录所以用符号代替,同时只用包含C和s文件就足够了* g' g# |3 ]/ s$ R& K! M
3.6替换.s和.a文件
这两个文件分别位于core/mpl和DeviceSupport下面。! q: p$ p4 }/ F+ n* |& z O% U
其中.a文件换成了.lib文件,因为keil不支持.a,而支持lib
在更换.s文件时也配套更换了对应的.h文件+ A' d1 n- t$ ^. j: q
添加CMSIS目录% j. r' z- N/ K& i7 D7 `- q
@8 CMSIS
内部包含Include和lib目录2 G! Y, {0 Y8 g8 M5 W
% W& C: N( [" i1 O7 [0 c9 z
////////////////////////////////) e) W: B8 Q5 n [
编译不通过
//////////////////////////////////////////////
继续修改6 l, U' q# r# B
编译模式修改为c99模式,并包含micro lib之后去掉了多数错误+ U1 X0 w/ M/ t9 H5 a3 t4 K* ~
目前主要的警告包含两类:
一类是without a new line,另一类是void参数省略提醒。) k2 y1 d, {6 k- B6 \6 _4 }
几个小的警告:
还有几个警告是单精度转换成双精度类型。& M h, F( I1 C$ J
__no_operation();没有定义
$ ]2 E$ g; [* N6 _* K8 }! z! O
]1 Z, Y4 J! K0 W5 `1 g
目前还剩余的三处错误。但实际上是一个错误,这个错误是:
1 fputs错误:IAR的fputs原型是fputc(int ch),keil的fputs原型是fputc(int ch, FILE *f)2 ~( h2 k; ]8 }' v. x5 t K
这三个错误排出之后新增一个__no_operation()的错误,在IAR中,这一项在intrinsics.h中定义。
在keil中使用nop函数来替代,这个函数在intrins.h。但是这个语法不能用在ARM上。$ v5 O2 v0 Y8 n$ J7 a" C6 P% F! y
MDK上的替代语句是:__nop()语句
3.7测试- Q! n% [0 {& R. K7 G
忘记连接INT到PA1上,串口连线松动。修整好之后,测试通过。3 D# l6 R& n: z- P' f
/ O2 I. I" i" V, i s% R7 w) o9 l
9 a( z9 l$ Z) Q5 ~: m3 g
: f J; K9 T, }
3 K M6 u# B( S2 |' M6 J+ m' z6 Q
2 t) x. M0 X, V/ z
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