久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 10493|回復(fù): 7
收起左側(cè)

stm32F4-Discovery連接MPU9250【MD6.12 keil移植】

[復(fù)制鏈接]
ID:127084 發(fā)表于 2016-6-17 15:18 | 顯示全部樓層 |閱讀模式
Motion Driver6.1.2 Demo移植(需要起個(gè)大眾都知道的名字,改成F4-Discovery連接MPU9250)


最近下載了Invensense的最新姿態(tài)傳感器庫Motion Driver6.1.2,內(nèi)含一個(gè)F4-Discovery板子的Demo。
就準(zhǔn)備了硬件MPU9250的測(cè)試板和F4-Disco的板子。
起初以為調(diào)試很簡(jiǎn)單。不想練在連接I2C的硬件時(shí)就犯了很大的錯(cuò)誤。NCS起初調(diào)試的時(shí)候浮空了,AD0也是浮空。這就浪費(fèi)了我不少時(shí)間,一時(shí)間信心全無。還在我之前用BB-Black運(yùn)行的linux系統(tǒng)上的I2C-Detect測(cè)試過這塊傳感器板子。又仔細(xì)的檢查了電路和官方的PS之后就解決了問題。
起初在的測(cè)試是在IAR上測(cè)試的,但是個(gè)人更喜歡keil上的全局搜索功能,就將工程移植到keil,以便后續(xù)工程的遷移。

現(xiàn)在將IAR移植到keil的筆記和最終代碼發(fā)到論壇。期望對(duì)人有些幫助。至于后續(xù)的遷移項(xiàng)目,視情況而定吧。
下圖是利用自導(dǎo)的python測(cè)試程序測(cè)試的圖片截屏。
143845nsj0a7v7ojwayyd3.png
注意在遷移的時(shí)候我將工程的標(biāo)準(zhǔn)庫更新到了最新的V1.5.1.
調(diào)試記錄屬于隨筆記錄性質(zhì)的,所以語言可能不流暢。勉強(qiáng)看吧。原本是txt的文檔,因?yàn)楦袷讲辉试S就壓縮了。
因?yàn)榇笮∮邢拗疲苑殖蓧嚎s成兩個(gè)包。

因?yàn)橹毁N附件不夠直觀(因?yàn)槲募怯胹ublime編寫的,用notepad打開可能是亂碼),現(xiàn)在將調(diào)試記錄的內(nèi)容粘貼如下:
在調(diào)試的時(shí)候發(fā)現(xiàn)地址是很有意思的如果連接AD到GND的話,I2C地址是68. AD懸空或者拉高是69.

上面的情況是我出錯(cuò)的一個(gè)原因,另一個(gè)原因是在I2C連接時(shí)將CS浮空,但是事實(shí)上在使用I2C的時(shí)候務(wù)必將其拉高。

2015.08.05 使用官方提供的python測(cè)試程序測(cè)試通過。解決了困擾已久的硬件問題。本次硬件問題的解決借助了BB-Black來幫忙,使用BBB內(nèi)置的I2Cdetect來測(cè)試。找到了問題。

關(guān)于SPI和I2C的接線還要參考demo板和原理圖說明。[UEVB]

PS-MPU-9250A-01.pdf文件第12頁給出了I2C地址的描述。AD0 = 0時(shí),地址1101000, AO0 =1時(shí)地址是1101001.在實(shí)際應(yīng)用中這個(gè)字節(jié)的最低位會(huì)添加0或1.表示寫或者讀。所以讀地址是11010001或11010011(D1或D3),寫地址是11010000或11010010(D0或者D2)。
測(cè)試的下一個(gè)階段是將項(xiàng)目移植到keil上面,進(jìn)行測(cè)試。另一個(gè)階段的工作是使用cube庫進(jìn)行移植。

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
第二階段:移植到keil工程中
說明:本次移植不只是簡(jiǎn)單的復(fù)制粘貼,本次移植的目的還有一個(gè)是能夠?qū)⑵浯aF4在不同的系列上面移植,目標(biāo)之一就是F401板子。
本次一直是利用官方的標(biāo)準(zhǔn)庫結(jié)合特定的BSP來進(jìn)行移植的。在移植之前需要分析工程的代碼結(jié)構(gòu)。
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 看代碼[]
省略。。。



2 硬件描述:
2.1>傳感器和開發(fā)板之間:
信號(hào)        MPU9250測(cè)試板                        開發(fā)板                        描述
+5V                VCC_IN(內(nèi)含3.3V穩(wěn)壓)        +5V                                電源+
GND                GND                                                GND                                電源-
SCL                SCL/SCLK                                PB10(I2C2-SCL)        I2C時(shí)鐘線
SDA                SDA/MOSI                                PB11(I2C2-SDA)        I2C數(shù)據(jù)線
NONE        NCS(無用須拉高)                        +3V                         高電平,MOSI時(shí)有用
sel AD         AD/MOSI                                 GND                                拉低地址68,拉高69

2.2>UART信號(hào)通過USB轉(zhuǎn)TTL(FT232)引入電腦
開發(fā)板                FT232板子        描述
PA2(Tx2)        RX                        開發(fā)板信號(hào)傳出
PA3(Rx2)        TX                         開發(fā)板信號(hào)引入
GND                        GND                        GND

3 文件結(jié)構(gòu)分析
3.1包含目錄
@1 STM32F4xx_StdPeriph_Driver
        |+inc{}
        |+src{}
@2        core
        |+driver
                +eMPL{}
                +include{}
                stm32L{}
        |eMPL-hal{}
        |mllite{}
        |mpl
@3        DeviceSupport
        |+inc{}
        |+src{}
@4        Peripheral
        |+inc{}
        |+src{}
@5        User
        |+inc{}
        |+src{}                                
下面列出SRC
$PROJ_DIR$..Userinc
$PROJ_DIR$..Usersrc
$PROJ_DIR$..Peripheralinc
$PROJ_DIR$..Peripheralsrc
$PROJ_DIR$..STM32F4xx_StdPeriph_Driverinc
$PROJ_DIR$..STM32F4xx_StdPeriph_Driversrc
$PROJ_DIR$..DeviceSupportinc
$PROJ_DIR$..DeviceSupportsrc
$PROJ_DIR$..coredriverinclude
$PROJ_DIR$..coredrivereMPL
$PROJ_DIR$..coredriverstm32l
$PROJ_DIR$..coremllite
$PROJ_DIR$..corempl
$PROJ_DIR$..coreeMPL-hal
轉(zhuǎn)換到keil是(keil目錄在):
..Userinc
..Usersrc
..Peripheralinc
..Peripheralsrc
..STM32F4xx_StdPeriph_Driverinc
..STM32F4xx_StdPeriph_Driversrc
..DeviceSupportinc
..DeviceSupportsrc
..coredriverinclude
..coredrivereMPL
..coredriverstm32l
..coremllite
..corempl
..coreeMPL-hal
keil工程位于新建的MDK-ARM文件夾內(nèi)
@6        MDK-ARM
也新建下面目錄存儲(chǔ)二進(jìn)制文件
@7        Binary

3.2預(yù)處理命令:
USE_STDPERIPH_DRIVER
USE_DMP
MPL_LOG_NDEBUG=1
EMPL
MPU9250
EMPL_TARGET_STM32F4
遷移到keil:
USE_STDPERIPH_DRIVER,USE_DMP,MPL_LOG_NDEBUG=1,EMPL,MPU9250,,EMPL_TARGET_STM32F4
在keil的標(biāo)準(zhǔn)庫中還需要添加設(shè)備名稱F407的名稱對(duì)應(yīng)STM32F40_41xxx
這部分可參考文件stm32f4xx.h
  /* #define STM32F40_41xxx */   /*!< STM32F405RG, STM32F405VG, STM32F405ZG, STM32F415RG, STM32F415VG, STM32F415ZG,  
                                      STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG, STM32F407IE,
                                      STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE, STM32F417IG and STM32F417IE Devices */

  /* #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,
                                      STM32F439IG and STM32F439II Devices */

  /* #define STM32F401xx */      /*!< STM32F401CB, STM32F401CC,  STM32F401RB, STM32F401RC, STM32F401VB, STM32F401VC  
                                      STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CExx, STM32F401RE and STM32F401VE Devices */

  /* #define STM32F411xE */      /*!< STM32F411CD, STM32F411RD, STM32F411VD, STM32F411CE, STM32F411RE and STM32F411VE Devices */
  
  /* #define STM32F446xx */      /*!< STM32F446MC, STM32F446ME, STM32F446RC, STM32F446RE, STM32F446VC, STM32F446VE, STM32F446ZC
                                      and STM32F446ZE Devices */



3.3浮點(diǎn)運(yùn)算
IAR:Genaeral Options>FPU>VFPv4
keil: Target>Roating Point Hardware>Usr Single Precision

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(保持默認(rèn)),和.s文件處修改(稍后修改)。

3.5項(xiàng)目目錄結(jié)構(gòu)
參照3.1中的描述建立但是因?yàn)閗eil不支持多級(jí)目錄所以用符號(hào)代替,同時(shí)只用包含C和s文件就足夠了

3.6替換.s和.a文件
這兩個(gè)文件分別位于core/mpl和DeviceSupport下面。
其中.a文件換成了.lib文件,因?yàn)閗eil不支持.a,而支持lib
在更換.s文件時(shí)也配套更換了對(duì)應(yīng)的.h文件
添加CMSIS目錄
@8        CMSIS
內(nèi)部包含Include和lib目錄

////////////////////////////////
編譯不通過

//////////////////////////////////////////////
繼續(xù)修改
編譯模式修改為c99模式,并包含micro lib之后去掉了多數(shù)錯(cuò)誤
目前主要的警告包含兩類:
一類是without a new line,另一類是void參數(shù)省略提醒。
幾個(gè)小的警告:
還有幾個(gè)警告是單精度轉(zhuǎn)換成雙精度類型。
__no_operation();沒有定義




目前還剩余的三處錯(cuò)誤。但實(shí)際上是一個(gè)錯(cuò)誤,這個(gè)錯(cuò)誤是:
1        fputs錯(cuò)誤:IAR的fputs原型是fputc(int ch),keil的fputs原型是fputc(int ch, FILE *f)

這三個(gè)錯(cuò)誤排出之后新增一個(gè)__no_operation()的錯(cuò)誤,在IAR中,這一項(xiàng)在intrinsics.h中定義。
在keil中使用nop函數(shù)來替代,這個(gè)函數(shù)在intrins.h。但是這個(gè)語法不能用在ARM上。
MDK上的替代語句是:__nop()語句

3.7測(cè)試
忘記連接INT到PA1上,串口連線松動(dòng)。修整好之后,測(cè)試通過。

MPU9250這個(gè)芯片的磁力計(jì)AK8963只有I2C接口,而加速度計(jì)陀螺儀MPU6500模塊是I2C接口與SPI都有的, 095721yjj7da8z0t8kjqjt.png 看他手冊(cè)的block diagram描述應(yīng)該就是這樣,所以如果使用SPI接口,我們只能通過配置內(nèi)部的I2C master模塊,讓i2c matster通過內(nèi)部的i2c總線來讀取磁力計(jì)數(shù)據(jù)。。。所以總結(jié)我遇到的問題就是,當(dāng)使用SPI接口時(shí),我用i2c master碰到問題了,無論如何嘗試都不能通過i2c master讀取磁力計(jì),只能讀到加速度和陀螺儀數(shù)據(jù)。而我使用i2c的bypass模式可以讀取所有的9軸數(shù)據(jù)。他的程序我以前也試過了,初始化的時(shí)候就是失敗的,所以已經(jīng)放棄SPI讀取地磁很久了。。不過看到你發(fā)帖,突然很激動(dòng)。。希望多多交流

F4DiscKeil-MD612.part01.rar (9 MB, 下載次數(shù): 65)

F4DiscKeil-MD612.part02.rar (6.57 MB, 下載次數(shù): 33)

回復(fù)

使用道具 舉報(bào)

ID:118861 發(fā)表于 2016-9-29 17:24 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:124548 發(fā)表于 2017-4-4 19:53 | 顯示全部樓層
LZ,python上位機(jī)軟件和IMU是通過串口通訊的么?如何設(shè)置,python 客戶端是不是官方DMP庫自帶的?
回復(fù)

使用道具 舉報(bào)

ID:195077 發(fā)表于 2017-5-1 14:26 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:235475 發(fā)表于 2018-3-28 01:19 | 顯示全部樓層
坑啊,怎么這么冗雜
回復(fù)

使用道具 舉報(bào)

ID:372803 發(fā)表于 2018-7-17 08:16 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:524320 發(fā)表于 2019-5-10 13:30 | 顯示全部樓層
樓主能私下分享一下經(jīng)驗(yàn)嗎  992369264@qq.com
回復(fù)

使用道具 舉報(bào)

ID:357237 發(fā)表于 2019-6-2 10:17 | 顯示全部樓層

謝謝分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频在线看 | 一级毛片色一级 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 999re5这里只有精品 | 精产国产伦理一二三区 | 九九热视频这里只有精品 | 91久操视频 | 成人欧美一区二区三区在线播放 | 西西裸体做爰视频 | 亚洲福利在线观看 | 国产日韩精品一区二区 | 手机av在线 | 欧美激情久久久 | 国产不卡一 | 亚洲成人福利在线观看 | av在线播放一区二区 | 99久久免费精品国产免费高清 | 国产乱码精品一区二区三区忘忧草 | 欧美日韩成人在线观看 | 一区二区三区精品 | 欧美在线网站 | 日韩在线高清 | 黄色网址免费在线观看 | 国产精品中文字幕在线 | 黄色一级大片在线免费看产 | 国产精品美女久久久久久久网站 | 欧美久久久久 | 91麻豆精品国产91久久久资源速度 | 中文字幕在线第二页 | 国产精品91网站 | 人人干超碰 | 羞羞网站在线免费观看 | 先锋av资源在线 | av永久 | 久久久久久久久91 | 亚洲a毛片| 亚洲欧美视频一区 | 夜夜爽夜夜操 | 精国产品一区二区三区 | 国产精品污www一区二区三区 | 欧美国产视频一区二区 |