本帖最后由 watershade 于 2015-8-22 12:39 编辑 Motion Driver6.1.2 Demo移植(需要起个大众都知道的名字,改成F4-Discovery连接MPU9250) 最近下载了Invensense的最新姿态传感器库Motion Driver6.1.2,内含一个F4-Discovery板子的Demo。3 l' ]+ l" l" x6 d) `) }3 _ 就准备了硬件MPU9250的测试板和F4-Disco的板子。+ |( z- [3 v# k. l 起初以为调试很简单。不想练在连接I2C的硬件时就犯了很大的错误。NCS起初调试的时候浮空了,AD0也是浮空。这就浪费了我不少时间,一时间信心全无。还在我之前用BB-Black运行的linux系统上的I2C-Detect测试过这块传感器板子。又仔细的检查了电路和官方的PS之后就解决了问题。 起初在的测试是在IAR上测试的,但是个人更喜欢keil上的全局搜索功能,就将工程移植到keil,以便后续工程的迁移。 现在将IAR移植到keil的笔记和最终代码发到论坛。期望对人有些帮助。至于后续的迁移项目,视情况而定吧。 下图是利用自导的python测试程序测试的图片截屏。1 t- c" Q/ N2 ? t5 O 注意在迁移的时候我将工程的标准库更新到了最新的V1.5.1. 调试记录属于随笔记录性质的,所以语言可能不流畅。勉强看吧。原本是txt的文档,因为格式不允许就压缩了。 因为大小有限制,所以分成压缩成两个包。 |
意法半导体最具性价比、速度最快的单核MPU STM32MP13现已支持运行RTOS
【STM32MP135-DK】裸机移植shell
【STM32MP13DK】 在Linux主机上交叉编译一个Hello Word应用
STM32MP135F-DK 开箱&开发环境搭建&硬件设计分析
意法半导体在意大利建SiC整合制造厂
轻松地实现ClassB在STM32CubeIDE上的移植
ST历史小知识(6)- 与世界共同塑造美好明天
ST历史小知识(5)- SiC衬底进一步发展
ST历史小知识(4)- 投资未来
ST历史小知识(3) - 布局新兴半导体工艺
! k9 e" s( C( [8 X- r
因为只贴附件不够直观(因为文件是用sublime编写的,用notepad打开可能是乱码),现在将调试记录的内容粘贴如下:* t% R. `0 m; F5 l% [5 h
在调试的时候发现地址是很有意思的如果连接AD到GND的话,I2C地址是68. AD悬空或者拉高是69.0 O6 u) Z9 i( m' P
上面的情况是我出错的一个原因,另一个原因是在I2C连接时将CS浮空,但是事实上在使用I2C的时候务必将其拉高。
2015.08.05 使用官方提供的python测试程序测试通过。解决了困扰已久的硬件问题。本次硬件问题的解决借助了BB-Black来帮忙,使用BBB内置的I2Cdetect来测试。找到了问题。
关于SPI和I2C的接线还要参考demo板和原理图说明。[UEVB]
6 x% ^( G6 h, _- o
PS-MPU-9250A-01.pdf文件第12页给出了I2C地址的描述。AD0 = 0时,地址1101000, AO0 =1时地址是1101001.在实际应用中这个字节的最低位会添加0或1.表示写或者读。所以读地址是11010001或11010011(D1或D3),写地址是11010000或11010010(D0或者D2)。" z1 J5 `" A7 `$ Q. ]5 _ }7 C7 k
测试的下一个阶段是将项目移植到keil上面,进行测试。另一个阶段的工作是使用cube库进行移植。: E. N/ i8 y# m, I/ o
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||/ g* j; e q L# n L) l
第二阶段:移植到keil工程中! W/ j) V8 f, {8 E" V% |
说明:本次移植不只是简单的复制粘贴,本次移植的目的还有一个是能够将其代码F4在不同的系列上面移植,目标之一就是F401板子。
本次一直是利用官方的标准库结合特定的BSP来进行移植的。在移植之前需要分析工程的代码结构。
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 看代码[]2 s' |9 T1 s: z2 j o9 t; N
省略。。。
& H' B/ ~7 _7 I
2 硬件描述:
2.1>传感器和开发板之间:8 Q- N, M4 P5 G9 F+ ?( K
信号 MPU9250测试板 开发板 描述
+5V VCC_IN(内含3.3V稳压) +5V 电源+
GND GND GND 电源-: {3 O* s9 y- Q* n2 P8 A# M
SCL SCL/SCLK PB10(I2C2-SCL) I2C时钟线" @: l J8 a" U
SDA SDA/MOSI PB11(I2C2-SDA) I2C数据线
NONE NCS(无用须拉高) +3V 高电平,MOSI时有用$ K0 U3 {* T. @5 ^3 ?0 ^* r
sel AD AD/MOSI GND 拉低地址68,拉高69
, N1 Y, W3 J* T0 d; K/ ?
2.2>UART信号通过USB转TTL(FT232)引入电脑
开发板 FT232板子 描述
PA2(Tx2) RX 开发板信号传出
PA3(Rx2) TX 开发板信号引入
GND GND GND
3 文件结构分析
3.1包含目录- ^/ ^( p8 ^; B& |6 Z
@1 STM32F4xx_StdPeriph_Driver
|+inc{}4 E1 [" M8 A& Y1 R# {
|+src{}# O6 K& ]0 `' H2 {( R, F6 v
@2 core
|+driver
\+eMPL{}& W7 N/ m( C& b/ B6 v
\+include{}
\stm32L{}
|eMPL-hal{}* p' [/ Q6 L* x- q
|mllite{}8 R* J- D* x9 M5 y; g4 b+ A
|mpl
@3 DeviceSupport0 A; p5 Y f X* O) E
|+inc{}
|+src{}6 Z4 L4 s7 d% X' w" B3 s6 T) U ^
@4 Peripheral
|+inc{}+ ^# v; e# S& W: f/ E" @
|+src{}
@5 User% ?; F& v# T' w1 M
|+inc{}
|+src{}
下面列出SRC7 {; ~) ?9 p; t; }# B; r; |% V. Q6 R
$PROJ_DIR$\..\User\inc
$PROJ_DIR$\..\User\src/ Y, d; u6 R5 H" a, O# d
$PROJ_DIR$\..\Peripheral\inc6 Y$ x' t2 f Y9 U0 H" y* f8 |
$PROJ_DIR$\..\Peripheral\src- s1 P G2 M* S' p7 f$ e. F
$PROJ_DIR$\..\STM32F4xx_StdPeriph_Driver\inc( @7 O. G" x9 {, `. \. [% I
$PROJ_DIR$\..\STM32F4xx_StdPeriph_Driver\src% x# |2 L# ]( _8 I# ~ k) A/ E2 u
$PROJ_DIR$\..\DeviceSupport\inc
$PROJ_DIR$\..\DeviceSupport\src
$PROJ_DIR$\..\core\driver\include
$PROJ_DIR$\..\core\driver\eMPL
$PROJ_DIR$\..\core\driver\stm32l) t5 L# E, W) ]6 E
$PROJ_DIR$\..\core\mllite) F) d8 c; G2 F' l; m
$PROJ_DIR$\..\core\mpl3 U; h' K! r5 ^/ H+ m
$PROJ_DIR$\..\core\eMPL-hal
转换到keil是(keil目录在):
..\User\inc3 n- `; R0 |5 P: [3 e$ S
..\User\src
..\Peripheral\inc! {% u, w0 W; A* H# k7 k. X+ V* x5 L* ~
..\Peripheral\src' ~; T3 k. K/ n; ~
..\STM32F4xx_StdPeriph_Driver\inc1 \+ |2 f3 g& x1 u$ |
..\STM32F4xx_StdPeriph_Driver\src$ A2 d- l8 T+ J& Y
..\DeviceSupport\inc( U& M9 s* f' x5 N5 @; E2 t4 \" B
..\DeviceSupport\src$ U; T5 d# y! _/ J8 Y& c
..\core\driver\include8 b$ q+ J) k5 D' n
..\core\driver\eMPL
..\core\driver\stm32l
..\core\mllite
..\core\mpl. s/ M7 b! o/ l7 P
..\core\eMPL-hal2 i# \& }$ P' `0 _+ P* v9 p2 }
keil工程位于新建的MDK-ARM文件夹内0 I3 r2 W3 s8 r" v. |3 d
@6 MDK-ARM9 B- Y3 G k& B9 ?& |7 c
也新建下面目录存储二进制文件3 w) _$ J8 U! q' W; m! I, l
@7 Binary- [2 Z3 G6 M& J' x7 |1 \$ W8 R0 ]% N
$ Y9 }! F* `% c& \4 ^' j
3.2预处理命令:
USE_STDPERIPH_DRIVER5 M/ l! Y- w- s: B
USE_DMP
MPL_LOG_NDEBUG=1
EMPL
MPU92501 ^( s$ U: W. Z; o1 Q: C
EMPL_TARGET_STM32F40 v# s: V5 `3 u. Q( S; n( }
迁移到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, & [2 U, \. } W2 b( T z' W# _
STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG, STM32F407IE,
STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE, STM32F417IG and STM32F417IE Devices */% S1 ^* o: n" S1 b4 N$ V- t
/* #define STM32F427_437xx */ /*!< STM32F427VG, STM32F427VI, STM32F427ZG, STM32F427ZI, STM32F427IG, STM32F427II, ! F# c1 X# j6 i6 Z
STM32F437VG, STM32F437VI, STM32F437ZG, STM32F437ZI, STM32F437IG, STM32F437II Devices */* P4 I. A1 C7 |# j& W4 I) m3 \1 F
" g4 d9 Z. D1 E; C; d6 \
/* #define STM32F429_439xx */ /*!< STM32F429VG, STM32F429VI, STM32F429ZG, STM32F429ZI, STM32F429BG, STM32F429BI, / s/ M) N- `+ L3 _2 B5 `7 R7 S
STM32F429NG, STM32F439NI, STM32F429IG, STM32F429II, STM32F439VG, STM32F439VI, " Q( d' w. f1 I* u2 D
STM32F439ZG, STM32F439ZI, STM32F439BG, STM32F439BI, STM32F439NG, STM32F439NI,
STM32F439IG and STM32F439II Devices */
! Y2 P! _6 n- R% L- p- {: ^
/* #define STM32F401xx */ /*!< STM32F401CB, STM32F401CC, STM32F401RB, STM32F401RC, STM32F401VB, STM32F401VC 6 u8 m/ D! ^8 e
STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CExx, STM32F401RE and STM32F401VE Devices */
2 F5 `; t0 P: O" g
/* #define STM32F411xE */ /*!< STM32F411CD, STM32F411RD, STM32F411VD, STM32F411CE, STM32F411RE and STM32F411VE Devices */
. C6 i l8 h9 P) I5 ~1 k" q' h1 d
/* #define STM32F446xx */ /*!< STM32F446MC, STM32F446ME, STM32F446RC, STM32F446RE, STM32F446VC, STM32F446VE, STM32F446ZC ) L+ M k P s/ r* {$ J6 L
and STM32F446ZE Devices */" m0 o( Z$ I- n Z: h- J6 l8 ?
1 H& ]; M8 G% Y' g9 A' C3 A5 v
3.3浮点运算
IAR:Genaeral Options>FPU>VFPv4
keil: Target>Roating Point Hardware>Usr Single Precision5 ]' H) F' z) t0 |, p
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文件处修改(稍后修改)。! v' s, K) t7 u# ~
9 Z& K5 T- c' D, l0 ?8 k$ a5 ~7 c1 A
3.5项目目录结构
参照3.1中的描述建立但是因为keil不支持多级目录所以用符号代替,同时只用包含C和s文件就足够了9 b; D, @7 X& T' T7 F
4 _; l3 h# G. ~
3.6替换.s和.a文件" d8 M% P9 S! n
这两个文件分别位于core/mpl和DeviceSupport下面。0 `1 K5 d- q; g/ D1 P2 T6 P
其中.a文件换成了.lib文件,因为keil不支持.a,而支持lib
在更换.s文件时也配套更换了对应的.h文件( T7 d% X, T' N Z9 l" j5 @
添加CMSIS目录
@8 CMSIS
内部包含Include和lib目录
( D1 C0 t3 A1 ~/ c4 g% J
////////////////////////////////
编译不通过
//////////////////////////////////////////////# {. \& [$ F* q8 O5 |
继续修改) L# N& R5 Q' x( N0 v
编译模式修改为c99模式,并包含micro lib之后去掉了多数错误9 @$ p3 ^0 ^* Z0 o. M8 O( z
目前主要的警告包含两类:1 b }9 K9 o3 z5 B9 [$ K' _; t' e
一类是without a new line,另一类是void参数省略提醒。
几个小的警告:7 j( u/ t1 g. |% `$ c8 e
还有几个警告是单精度转换成双精度类型。
__no_operation();没有定义
t. H( }" z! M6 e
目前还剩余的三处错误。但实际上是一个错误,这个错误是:
1 fputs错误:IAR的fputs原型是fputc(int ch),keil的fputs原型是fputc(int ch, FILE *f)
2 T5 b9 e, y+ M
这三个错误排出之后新增一个__no_operation()的错误,在IAR中,这一项在intrinsics.h中定义。
在keil中使用nop函数来替代,这个函数在intrins.h。但是这个语法不能用在ARM上。& t4 m( X- ~: j+ D1 d
MDK上的替代语句是:__nop()语句
' Q4 ~/ B: N6 b+ t
3.7测试$ Y/ b$ R' E0 s2 B" D7 }
忘记连接INT到PA1上,串口连线松动。修整好之后,测试通过。" D; b# M8 }' b2 O Z" I6 Y
/ J) t/ r; w" g, C( F2 U
' _# `+ Y3 _) U
! r" |/ ]0 F8 H5 @6 h
1 F. x. c0 R: w
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
4 o5 S: K- r6 o! W& x