本帖最后由 watershade 于 2015-8-22 12:39 编辑 ; i) O4 m. D$ Q$ u Motion Driver6.1.2 Demo移植(需要起个大众都知道的名字,改成F4-Discovery连接MPU9250) 最近下载了Invensense的最新姿态传感器库Motion Driver6.1.2,内含一个F4-Discovery板子的Demo。: D( W# c ]# b( H1 A 就准备了硬件MPU9250的测试板和F4-Disco的板子。 起初以为调试很简单。不想练在连接I2C的硬件时就犯了很大的错误。NCS起初调试的时候浮空了,AD0也是浮空。这就浪费了我不少时间,一时间信心全无。还在我之前用BB-Black运行的linux系统上的I2C-Detect测试过这块传感器板子。又仔细的检查了电路和官方的PS之后就解决了问题。 起初在的测试是在IAR上测试的,但是个人更喜欢keil上的全局搜索功能,就将工程移植到keil,以便后续工程的迁移。% t( K- U/ u9 R) ]0 ` 现在将IAR移植到keil的笔记和最终代码发到论坛。期望对人有些帮助。至于后续的迁移项目,视情况而定吧。& B5 s2 J6 D& ?. D# T! p 下图是利用自导的python测试程序测试的图片截屏。 注意在迁移的时候我将工程的标准库更新到了最新的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) - 布局新兴半导体工艺
- P: c" w& }& S4 P. W# @7 ^3 {
因为只贴附件不够直观(因为文件是用sublime编写的,用notepad打开可能是乱码),现在将调试记录的内容粘贴如下:% J" U$ n* H8 |- D. {& o! l
在调试的时候发现地址是很有意思的如果连接AD到GND的话,I2C地址是68. AD悬空或者拉高是69.0 D& z& T9 o+ U1 u7 N( }
/ n/ I, W- f- m- q" S! F/ ~' {7 z
上面的情况是我出错的一个原因,另一个原因是在I2C连接时将CS浮空,但是事实上在使用I2C的时候务必将其拉高。$ s3 ^: o( I* v
2015.08.05 使用官方提供的python测试程序测试通过。解决了困扰已久的硬件问题。本次硬件问题的解决借助了BB-Black来帮忙,使用BBB内置的I2Cdetect来测试。找到了问题。' i/ y0 j# `2 I" K) a/ |$ S( y
关于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库进行移植。
# ~( J3 g- g% S+ w- a+ W
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||( P( y) K- A/ d9 h- z
第二阶段:移植到keil工程中
说明:本次移植不只是简单的复制粘贴,本次移植的目的还有一个是能够将其代码F4在不同的系列上面移植,目标之一就是F401板子。
本次一直是利用官方的标准库结合特定的BSP来进行移植的。在移植之前需要分析工程的代码结构。
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 看代码[]
省略。。。
% u2 q6 U. ^' E. W( W z G# b- F
2 硬件描述:
2.1>传感器和开发板之间:$ E! z7 x4 }- G+ r7 C7 K
信号 MPU9250测试板 开发板 描述
+5V VCC_IN(内含3.3V稳压) +5V 电源+" ~, _9 O: `' m0 f. Y' Q
GND GND GND 电源-
SCL SCL/SCLK PB10(I2C2-SCL) I2C时钟线8 J2 } v% f L
SDA SDA/MOSI PB11(I2C2-SDA) I2C数据线" i/ ?; N x# |8 F7 V
NONE NCS(无用须拉高) +3V 高电平,MOSI时有用% J% `$ D8 o! _+ b9 S
sel AD AD/MOSI GND 拉低地址68,拉高69) w1 r% q9 B& `: a. _9 |
" s! |' |8 R; z8 T0 R4 U
2.2>UART信号通过USB转TTL(FT232)引入电脑7 q* I/ C! ^0 V: {5 e* r
开发板 FT232板子 描述
PA2(Tx2) RX 开发板信号传出/ ~0 a+ I5 ~, U; N- I) j* Q
PA3(Rx2) TX 开发板信号引入
GND GND GND
( a$ O* R$ G0 O9 |4 \
3 文件结构分析) f9 B- A' H, Z3 F3 l' s, }) f
3.1包含目录& h- Y: e* Y! E) Z) t j* c4 p
@1 STM32F4xx_StdPeriph_Driver
|+inc{}
|+src{}
@2 core! k' K+ F5 [4 D5 T
|+driver
\+eMPL{}
\+include{}: @. |" p5 |9 f2 s/ H. b- y. ^2 z
\stm32L{}
|eMPL-hal{}( J) n& ^: D+ r( B/ F( |+ @& I
|mllite{} D8 b& W5 [' `1 _ B& s W
|mpl
@3 DeviceSupport) n: o0 X) m$ f. q0 U
|+inc{}$ a" D% q2 B J$ u) W- i
|+src{}
@4 Peripheral: M9 {1 W& i% m
|+inc{}
|+src{}
@5 User& I; j- `1 f% _# }! p; N! V! }
|+inc{}9 k0 g! M3 J; j3 t
|+src{}
下面列出SRC$ ]- k8 R: f4 y2 C$ I
$PROJ_DIR$\..\User\inc! Y8 o! a) q) C- |7 m) V* J
$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 O% u2 P' L, C8 C
$PROJ_DIR$\..\DeviceSupport\src( c% J+ D1 J0 Y& q" V. J
$PROJ_DIR$\..\core\driver\include
$PROJ_DIR$\..\core\driver\eMPL
$PROJ_DIR$\..\core\driver\stm32l: x0 G1 w+ Y; D) V7 k& Z
$PROJ_DIR$\..\core\mllite
$PROJ_DIR$\..\core\mpl: i5 V8 d" P6 {9 O; D
$PROJ_DIR$\..\core\eMPL-hal
转换到keil是(keil目录在):) `+ ~& Y0 h2 h) |7 j, k& _' A. b
..\User\inc
..\User\src
..\Peripheral\inc
..\Peripheral\src
..\STM32F4xx_StdPeriph_Driver\inc
..\STM32F4xx_StdPeriph_Driver\src% ? ~% H' Y6 m4 N& y3 E
..\DeviceSupport\inc
..\DeviceSupport\src
..\core\driver\include
..\core\driver\eMPL/ U, d6 a8 L' Z7 `5 {- O5 z9 s
..\core\driver\stm32l* P& B: T7 i" B8 i; L8 Z
..\core\mllite P2 ]- |. Y; Y8 l
..\core\mpl' K1 B ^) x% i2 Z f3 W: t
..\core\eMPL-hal. y* S1 v& j: N* l2 D S) i
keil工程位于新建的MDK-ARM文件夹内
@6 MDK-ARM
也新建下面目录存储二进制文件
@7 Binary. H5 W, V/ D3 }9 B1 o/ J% T" ?
3.2预处理命令:/ C5 w( V- E5 X; B4 }* @4 |
USE_STDPERIPH_DRIVER
USE_DMP( P/ `& `$ @& L2 k6 }
MPL_LOG_NDEBUG=14 q3 w; e# O/ L' Y) g+ A
EMPL
MPU9250$ {0 i/ N* f' j: _! t
EMPL_TARGET_STM32F48 A5 `7 }' B% d6 f( `. }$ u
迁移到keil:. r( B5 ^% Y6 V& D' s# B
USE_STDPERIPH_DRIVER,USE_DMP,MPL_LOG_NDEBUG=1,EMPL,MPU9250,,EMPL_TARGET_STM32F41 ^5 v( Q+ i) `0 Q0 g
在keil的标准库中还需要添加设备名称F407的名称对应STM32F40_41xxx/ h" P/ K0 [0 F# V
这部分可参考文件stm32f4xx.h" ]7 P2 D; ^$ o# u, U: C! ~
/* #define STM32F40_41xxx */ /*!< STM32F405RG, STM32F405VG, STM32F405ZG, STM32F415RG, STM32F415VG, STM32F415ZG,
STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG, STM32F407IE, # r0 d) ~8 [ W3 D0 O c \* c
STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE, STM32F417IG and STM32F417IE Devices */+ R0 z n( `/ s- _7 E+ f0 D5 _
/* #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,4 T; u8 q- ]. q. A
STM32F439IG and STM32F439II Devices */
3 V0 T$ U- s& T" | v5 a% p& X
/* #define STM32F401xx */ /*!< STM32F401CB, STM32F401CC, STM32F401RB, STM32F401RC, STM32F401VB, STM32F401VC
STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CExx, STM32F401RE and STM32F401VE Devices */
% ]" ~, \+ V6 Q/ a/ D
/* #define STM32F411xE */ /*!< STM32F411CD, STM32F411RD, STM32F411VD, STM32F411CE, STM32F411RE and STM32F411VE Devices */1 Y1 v2 Y4 c' k" Y$ ~/ e5 G1 Y4 l
/* #define STM32F446xx */ /*!< STM32F446MC, STM32F446ME, STM32F446RC, STM32F446RE, STM32F446VC, STM32F446VE, STM32F446ZC 9 }: j+ G: F! @" M& Z% N
and STM32F446ZE Devices */ b+ j6 m7 N$ q9 N$ L
8 y1 f9 Q- G; ^9 l1 C/ S* \* C
3.3浮点运算
IAR:Genaeral Options>FPU>VFPv46 P1 T* U/ i9 @$ K6 D
keil: Target>Roating Point Hardware>Usr Single Precision" J7 n5 s/ v6 B$ }
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 U5 c! h6 Z1 p+ C F- Z! V
3.5项目目录结构% G5 Q: f1 e! I3 H9 _
参照3.1中的描述建立但是因为keil不支持多级目录所以用符号代替,同时只用包含C和s文件就足够了
8 |8 k8 r$ R G' ^0 n% j" @
3.6替换.s和.a文件; l' L3 O5 @7 s$ P& E+ z$ e
这两个文件分别位于core/mpl和DeviceSupport下面。 m" ? L8 j5 T1 E9 t3 r- t
其中.a文件换成了.lib文件,因为keil不支持.a,而支持lib. f( F4 H! K" F: ]- t
在更换.s文件时也配套更换了对应的.h文件
添加CMSIS目录
@8 CMSIS
内部包含Include和lib目录
////////////////////////////////
编译不通过
- r+ H: s/ d: P, z p( G
////////////////////////////////////////////// H' I+ F# Z' e3 F3 r
继续修改
编译模式修改为c99模式,并包含micro lib之后去掉了多数错误8 h( G6 Z' z4 i0 e0 Y8 @% E% }# a
目前主要的警告包含两类:
一类是without a new line,另一类是void参数省略提醒。9 O0 c/ c- B( U. @8 T' k7 R. n
几个小的警告:
还有几个警告是单精度转换成双精度类型。5 G6 J' Y0 R8 B, {" D9 [
__no_operation();没有定义- e& Z# }* k8 Y+ U
+ M; g v( K/ J8 G
% K, B3 N' ?, R# `4 g% F
5 a3 a3 `% U4 y4 P p$ o$ o
目前还剩余的三处错误。但实际上是一个错误,这个错误是:% u( h0 G4 U, \3 f
1 fputs错误:IAR的fputs原型是fputc(int ch),keil的fputs原型是fputc(int ch, FILE *f)1 }( T: n$ W0 Z* E& [
这三个错误排出之后新增一个__no_operation()的错误,在IAR中,这一项在intrinsics.h中定义。# b7 M1 u6 y" R0 ~% o$ a
在keil中使用nop函数来替代,这个函数在intrins.h。但是这个语法不能用在ARM上。
MDK上的替代语句是:__nop()语句
3.7测试
忘记连接INT到PA1上,串口连线松动。修整好之后,测试通过。: v- H6 o) i8 I$ ~# r: ]+ Q5 \
% G% I: f: \6 o0 _
! q8 \0 V1 q6 A' r* y, j4 ^
( f* m! r, x9 m2 ~+ G# C5 U
0 u1 B, A" D- ^ Q9 a
1 k$ B) k& u0 z+ E' 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