本帖最后由 watershade 于 2015-8-22 12:39 编辑 ) D: T$ D) K; Y9 x ; Z v# h8 |* |$ h! p) F Motion Driver6.1.2 Demo移植(需要起个大众都知道的名字,改成F4-Discovery连接MPU9250) 5 L4 ^! e$ S7 I( a ) o7 c9 K! z- t3 O; k+ S5 ]) a8 e 最近下载了Invensense的最新姿态传感器库Motion Driver6.1.2,内含一个F4-Discovery板子的Demo。0 [4 T% V( u5 ~* D8 { 就准备了硬件MPU9250的测试板和F4-Disco的板子。 起初以为调试很简单。不想练在连接I2C的硬件时就犯了很大的错误。NCS起初调试的时候浮空了,AD0也是浮空。这就浪费了我不少时间,一时间信心全无。还在我之前用BB-Black运行的linux系统上的I2C-Detect测试过这块传感器板子。又仔细的检查了电路和官方的PS之后就解决了问题。* l# K4 a$ B) w2 N$ O. E4 w, ] 起初在的测试是在IAR上测试的,但是个人更喜欢keil上的全局搜索功能,就将工程移植到keil,以便后续工程的迁移。 ) y! v# [+ ^2 u( X; } 现在将IAR移植到keil的笔记和最终代码发到论坛。期望对人有些帮助。至于后续的迁移项目,视情况而定吧。4 P/ O* ?) A. U. |5 ]1 I 下图是利用自导的python测试程序测试的图片截屏。 注意在迁移的时候我将工程的标准库更新到了最新的V1.5.1. 调试记录属于随笔记录性质的,所以语言可能不流畅。勉强看吧。原本是txt的文档,因为格式不允许就压缩了。 \8 `9 v9 Y% ^/ E4 m2 d9 e 因为大小有限制,所以分成压缩成两个包。 |
意法半导体最具性价比、速度最快的单核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打开可能是乱码),现在将调试记录的内容粘贴如下:' Z! x* ^: t% f! D
在调试的时候发现地址是很有意思的如果连接AD到GND的话,I2C地址是68. AD悬空或者拉高是69.
上面的情况是我出错的一个原因,另一个原因是在I2C连接时将CS浮空,但是事实上在使用I2C的时候务必将其拉高。/ m' j0 Y* F# T: u3 v! A' ]
' ^/ z# v! w! Z0 C' t$ o# ~" X
2015.08.05 使用官方提供的python测试程序测试通过。解决了困扰已久的硬件问题。本次硬件问题的解决借助了BB-Black来帮忙,使用BBB内置的I2Cdetect来测试。找到了问题。/ H% A) @- N. N Z, s. d4 K- @
# M2 ^7 T0 }; ?) p6 E
关于SPI和I2C的接线还要参考demo板和原理图说明。[UEVB]# u1 \" ]7 ]: L- ~5 j8 o
3 r0 c! p0 c; ^# b4 h; U0 V1 o
PS-MPU-9250A-01.pdf文件第12页给出了I2C地址的描述。AD0 = 0时,地址1101000, AO0 =1时地址是1101001.在实际应用中这个字节的最低位会添加0或1.表示写或者读。所以读地址是11010001或11010011(D1或D3),写地址是11010000或11010010(D0或者D2)。! E8 p$ q' }! u- }: j1 l( u
测试的下一个阶段是将项目移植到keil上面,进行测试。另一个阶段的工作是使用cube库进行移植。
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
第二阶段:移植到keil工程中: J+ C0 k( P" r; O# ]
说明:本次移植不只是简单的复制粘贴,本次移植的目的还有一个是能够将其代码F4在不同的系列上面移植,目标之一就是F401板子。5 B: A! }3 Q" u8 Z/ c# E
本次一直是利用官方的标准库结合特定的BSP来进行移植的。在移植之前需要分析工程的代码结构。
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||7 m1 e3 w$ ?. L
1 看代码[]9 k8 h* u+ w$ A
省略。。。
2 硬件描述:
2.1>传感器和开发板之间:
信号 MPU9250测试板 开发板 描述
+5V VCC_IN(内含3.3V稳压) +5V 电源+
GND GND GND 电源-
SCL SCL/SCLK PB10(I2C2-SCL) I2C时钟线- m! Z' ?: ]/ s& t. o0 O# a! _
SDA SDA/MOSI PB11(I2C2-SDA) I2C数据线
NONE NCS(无用须拉高) +3V 高电平,MOSI时有用
sel AD AD/MOSI GND 拉低地址68,拉高69; l0 ]8 K6 |8 Q5 X! G
2.2>UART信号通过USB转TTL(FT232)引入电脑
开发板 FT232板子 描述$ @6 Y# p2 h5 i# k6 X# D
PA2(Tx2) RX 开发板信号传出6 @+ @ G, \- P1 p7 Y; C S* \$ V# E
PA3(Rx2) TX 开发板信号引入
GND GND GND8 X, F" X' m8 I. ?0 L. [* ]( ~, H, o
3 文件结构分析, Y1 p1 T5 b3 T: z4 e# F% A
3.1包含目录4 p" |, a8 ^$ C& R2 q
@1 STM32F4xx_StdPeriph_Driver
|+inc{}
|+src{}
@2 core& ^5 g+ P. h) p) h$ s( t* j
|+driver# d# l* O, B( x- b1 m6 T
\+eMPL{}% U, m. v' P5 e
\+include{}+ R2 P" N9 j& c1 E% S# K
\stm32L{}9 t- D. x# _4 H" Q% o3 P, l
|eMPL-hal{}
|mllite{}
|mpl
@3 DeviceSupport
|+inc{}
|+src{}& [& S' J- ~# W! Q1 c* x0 J6 L) D
@4 Peripheral
|+inc{}5 ]0 S3 Y6 P& ]
|+src{}' G# o" H8 G% x' Q3 U$ P5 m
@5 User
|+inc{}
|+src{} ' q( b, a+ ?; s4 i1 r% _2 O# g% |; R
下面列出SRC3 g# s6 N/ i' U* }2 I
$PROJ_DIR$\..\User\inc
$PROJ_DIR$\..\User\src
$PROJ_DIR$\..\Peripheral\inc' {; N2 u5 {4 k/ M2 A4 a5 a ^
$PROJ_DIR$\..\Peripheral\src
$PROJ_DIR$\..\STM32F4xx_StdPeriph_Driver\inc
$PROJ_DIR$\..\STM32F4xx_StdPeriph_Driver\src
$PROJ_DIR$\..\DeviceSupport\inc- _6 [ d; w) M& a* W$ g7 ~$ M% @
$PROJ_DIR$\..\DeviceSupport\src9 ?- z. n$ l; k) v' J) y
$PROJ_DIR$\..\core\driver\include
$PROJ_DIR$\..\core\driver\eMPL
$PROJ_DIR$\..\core\driver\stm32l
$PROJ_DIR$\..\core\mllite
$PROJ_DIR$\..\core\mpl4 D% I; `. i! S, e' T! ^, e4 F% G
$PROJ_DIR$\..\core\eMPL-hal
转换到keil是(keil目录在):
..\User\inc/ c {( F# B, `
..\User\src
..\Peripheral\inc. u3 r0 b0 B! {" M' L
..\Peripheral\src
..\STM32F4xx_StdPeriph_Driver\inc
..\STM32F4xx_StdPeriph_Driver\src- a+ ~& `6 V2 Z6 R0 G7 M
..\DeviceSupport\inc
..\DeviceSupport\src# [- u, K2 Z# P) w5 F6 ?. J3 \$ A
..\core\driver\include
..\core\driver\eMPL
..\core\driver\stm32l& k0 U0 A3 L/ @0 t& i
..\core\mllite
..\core\mpl, _" V: e5 c9 b) I$ R7 P2 ~
..\core\eMPL-hal
keil工程位于新建的MDK-ARM文件夹内
@6 MDK-ARM7 Y$ h) S2 h* R8 \
也新建下面目录存储二进制文件
@7 Binary* e( h, x' ?5 a- A5 W0 I
$ h# f0 ^# i# {9 n
3.2预处理命令:
USE_STDPERIPH_DRIVER
USE_DMP+ L# O: z: p& ?
MPL_LOG_NDEBUG=1
EMPL) }- K# [% J+ \" B0 g
MPU9250
EMPL_TARGET_STM32F4
迁移到keil:, B) i5 M* U. r# h- N
USE_STDPERIPH_DRIVER,USE_DMP,MPL_LOG_NDEBUG=1,EMPL,MPU9250,,EMPL_TARGET_STM32F4: b1 n( s: e& r6 I% Q
在keil的标准库中还需要添加设备名称F407的名称对应STM32F40_41xxx
这部分可参考文件stm32f4xx.h* `. D, J- V5 N% U3 D% ?3 e: c( l2 B4 [
/* #define STM32F40_41xxx */ /*!< STM32F405RG, STM32F405VG, STM32F405ZG, STM32F415RG, STM32F415VG, STM32F415ZG, & O9 L5 y4 v8 C# ?0 F$ ^
STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG, STM32F407IE, 7 T. c( J/ W8 k5 N9 R/ I5 v
STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE, STM32F417IG and STM32F417IE Devices */5 @; a+ e" C1 N2 B
1 z; O- W( B! }4 t( l
/* #define STM32F427_437xx */ /*!< STM32F427VG, STM32F427VI, STM32F427ZG, STM32F427ZI, STM32F427IG, STM32F427II,
STM32F437VG, STM32F437VI, STM32F437ZG, STM32F437ZI, STM32F437IG, STM32F437II Devices */
n1 n+ ]5 d( z6 B& N
/* #define STM32F429_439xx */ /*!< STM32F429VG, STM32F429VI, STM32F429ZG, STM32F429ZI, STM32F429BG, STM32F429BI, ( \ A* i+ ~, D) e- }
STM32F429NG, STM32F439NI, STM32F429IG, STM32F429II, STM32F439VG, STM32F439VI,
STM32F439ZG, STM32F439ZI, STM32F439BG, STM32F439BI, STM32F439NG, STM32F439NI,
STM32F439IG and STM32F439II Devices */
9 P/ W, ]7 U ^% ~% e& I& K
/* #define STM32F401xx */ /*!< STM32F401CB, STM32F401CC, STM32F401RB, STM32F401RC, STM32F401VB, STM32F401VC
STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CExx, STM32F401RE and STM32F401VE Devices */# ]! S- T5 @5 s8 q* y6 P# a/ s
/* #define STM32F411xE */ /*!< STM32F411CD, STM32F411RD, STM32F411VD, STM32F411CE, STM32F411RE and STM32F411VE Devices */. M6 U( t) h6 Q1 I! p
/* #define STM32F446xx */ /*!< STM32F446MC, STM32F446ME, STM32F446RC, STM32F446RE, STM32F446VC, STM32F446VE, STM32F446ZC 1 f" b% z- D! H/ e6 I/ H
and STM32F446ZE Devices */; U% r, Y! s5 Y8 Z
; W. E; X$ T# x C
3.3浮点运算! f& p( o( j# r
IAR:Genaeral Options>FPU>VFPv4
keil: Target>Roating Point Hardware>Usr Single Precision3 `0 F, W* Y& Y) N/ F
" U- w# T" @# p, ]# ]' V- R
3.4堆栈大小0 g k' K" w( M2 e5 Q
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文件处修改(稍后修改)。
0 G4 @* W7 @( r. Q& u' V* W
3.5项目目录结构" \. k2 I2 L, n0 a! p( |+ Z$ w3 v
参照3.1中的描述建立但是因为keil不支持多级目录所以用符号代替,同时只用包含C和s文件就足够了
; ~9 ^' r6 p7 v* n6 r- v5 c
3.6替换.s和.a文件 E( d! j( w+ ~& v; {2 b
这两个文件分别位于core/mpl和DeviceSupport下面。( G% e% s/ O' H) P! F
其中.a文件换成了.lib文件,因为keil不支持.a,而支持lib& v6 t8 R. m m/ F# K$ a m; r+ I+ ?) s
在更换.s文件时也配套更换了对应的.h文件
添加CMSIS目录) o3 u; v, h1 n s
@8 CMSIS
内部包含Include和lib目录
////////////////////////////////9 P7 d( V4 q( V7 D
编译不通过
//////////////////////////////////////////////
继续修改
编译模式修改为c99模式,并包含micro lib之后去掉了多数错误
目前主要的警告包含两类:
一类是without a new line,另一类是void参数省略提醒。
几个小的警告:
还有几个警告是单精度转换成双精度类型。* w0 D4 @- W9 l
__no_operation();没有定义
6 `! H3 _' X1 N3 A' X4 x# t- M
/ C' B4 A$ z" [
目前还剩余的三处错误。但实际上是一个错误,这个错误是:
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()语句* a7 x0 \: A( O2 E: @
/ `$ p5 n( Q7 R; s; T; G
3.7测试6 Q" o0 c5 j8 U2 F% r
忘记连接INT到PA1上,串口连线松动。修整好之后,测试通过。1 B, I' N" M2 n# ?9 ~7 F! d
$ U5 w2 }! y }% K
( Z2 ~% U$ g3 j
* l0 L% Y8 W1 X8 s t$ D: Q
7 v+ j3 G9 m6 {/ A6 a# y
1 E% ^' w1 F8 r% `2 l
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! ~$ E- E. }! [1 u; z o7 Z