你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

F4-Discovery连接MPU9250【MD6.12 keil移植】 精华  

[复制链接]
watershade 发布时间:2015-8-8 14:46
阅读主题, 点击返回1楼
1 收藏 12 评论118 发布时间:2015-8-8 14:46
118个回答
power568 回答时间:2016-3-27 23:42:27
watershade 发表于 2016-3-27 16:24
的确磁力的数据有时能读上来,有时读不上来。我暂时不能做实验找到问题的根源。你找出来可以告诉我。
可 ...

你贴的代码是不是偶尔也可以读出磁力计...
lzm1019 回答时间:2016-3-28 11:29:43
watershade 发表于 2016-3-27 16:36
你还需要原版吗,给我邮箱我发给你。我抽空又下了一遍

多谢!我的邮箱 lzm1019@hotmail.com
====
题外话,Invensense的代码结构,没有对应的文档说明,读起来极不习惯,颇费周折去厘清其关系。找到您的帖子,方便许多。
我是新手,刚学习EMD6.12,想移植到STM32F411;无意对比了下,发现invensense_adv.h中的变更,所以请教下。
lzm1019 回答时间:2016-3-28 11:34:57
watershade 发表于 2016-3-27 16:36
你还需要原版吗,给我邮箱我发给你。我抽空又下了一遍

Sorry,刚理解错了,以为您有新的代码,提供了邮箱。
========
关于emd6.12的源码,我能下载;之前是应#38楼 rushidao 的需要,分享baidupan链接。
watershade 回答时间:2016-3-28 21:58:27
lzm1019 发表于 2016-3-28 11:34
Sorry,刚理解错了,以为您有新的代码,提供了邮箱。
========
关于emd6.12的源码,我能下载;之前是应#3 ...

ok,很抱歉没能帮到你。祝你成功
watershade 回答时间:2016-3-28 22:00:50
lzm1019 发表于 2016-3-28 11:34
Sorry,刚理解错了,以为您有新的代码,提供了邮箱。
========
关于emd6.12的源码,我能下载;之前是应#3 ...

另外建议你看一下飞兆半导体的传感器FIS1100,或者ST的iNemo-M1。这两者都有比较好的库。前者的硬件因为电压问题不方便STM32使用。后者的算法似乎有些问题,校准部分不太好。如果你刚好调试过,能否交流一下经验。
lzm1019 回答时间:2016-3-30 13:00:15
watershade 发表于 2016-3-28 22:00
另外建议你看一下飞兆半导体的传感器FIS1100,或者ST的iNemo-M1。这两者都有比较好的库。前者的硬件因为 ...

Fairchild的没用过;
目前用的是MPU9250和ST的LSM9DS1;原计划同步开展的。但实际因经验不足(或者说全无经验),先从MPU9250开始。
这两天,基于您共享的移植文件在学习;我用的是STM32F411CEU6,按您的简单移植说明,处理后,编译ok;但是download板子上,串口没有任何输出。
调试情况:
1)在板上调试,debug卡在启动文件中的SystemInit,意思是还没有进入main();随后将setsysclk()注释掉,再仿真,最终发现停滞在Gyro的INT_PIN_CFG配置中。
----------
if (i2c_write(st.hw->addr, st.reg->int_pin_cfg, 1, &tmp))
        return -1;
-------------

2)模拟仿真,不带板的情况,则停滞在USART的发送循环中;
-------------------
//* Loop until the end of transmission
while (USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET)
{}
-----------------
我的理解,无板时,USART发送接收无效,导致死循环。

后面,用最笨的方法,直接以LED来指示,确定代码停滞在mpu_set_bypass()中;但原因不明。
lzm1019 回答时间:2016-3-30 15:16:51
watershade 发表于 2015-8-25 10:36
最近在尽可能不更改程序的基础上将原始程序迁移到了nucleo411和nucleo401上。因为411的程序在另一台电脑上 ...

再麻烦您一下。
之前您提到的STM32F411的移植代码,还能找到吗?可否提供我参考下。多谢!
===============
手头没有STM32F4-Discovery的板子,没法验证原始工程是否能正常输出9轴数据。看您之前的记录,移植后是正常输出了的,具体情形如何呢?我之前基于您的F401KeilPorting的代码,编译OK,运行后串口无输出。
----------------
另,刚尝试安装Invensense的AppNote1,安装Python环境,运行eMPL-Client.py,闪退;报错如下:
--------------
c:\Python27>python eMPL612\eMPL-client.py 6
Traceback (most recent call last):
  File "eMPL612\eMPL-client.py", line 273, in <module>
    def four_bytes(d1, d2, d3, d4):
  File "eMPL612\eMPL-client.py", line 12, in __init__

  File "c:\Python27\lib\site-packages\serial\serialwin32.py", line 31, in __init__
    SerialBase.__init__(self, *args, **kwargs)
  File "c:\Python27\lib\site-packages\serial\serialutil.py", line 180, in __init__
    self.open()
  File "c:\Python27\lib\site-packages\serial\serialwin32.py", line 47, in open
    if port.upper().startswith('COM') and int(port[3:]) > 8:
AttributeError: 'int' object has no attribute 'upper'
---------------------
watershade 回答时间:2016-3-30 16:29:26
lzm1019 发表于 2016-3-30 15:16
再麻烦您一下。
之前您提到的STM32F411的移植代码,还能找到吗?可否提供我参考下。多谢!
============= ...

请务必注意stack和heap的尺寸。因为库中用到了malloc来分配内存,所以stack用到了很多。除此之外,接线如果用的是杜邦线之类的临时连线,请确保连线稳定。如果有必要的话换一组线,甚至传感器来做相同的实验。411的程序理论上是一致的。但是我最近在外面用一台老笔记本,之前的资料保存在家里的台式机上。但是我尽量基于401的还原一份411的稍后给你。但是这份我不确定是否能用。另外建议你最好从追踪代码开始,如果压根就没有进到main函数里面,这很可能是工程或者硬件的问题。

关于python的问题,我觉得是串口驱动的问题。如果没记错的话,需要安装pyserial和game两个插件。这样才能正常运行。
watershade 回答时间:2016-3-30 16:55:56
lzm1019 发表于 2016-3-30 13:00
Fairchild的没用过;
目前用的是MPU9250和ST的LSM9DS1;原计划同步开展的。但实际因经验不足(或者说全无 ...

所以我觉得是你硬件连接或者时钟设置的问题,请先确保这里没问题。SystemInit如果都不能正常进入那说明这里你没有修改好。如果你从官方的代码直接移植的话,时钟这个问题必须要注意的。因为F407的最大时钟时168MHZ而401是84M,411是100M。所以这里注意一下。
另外确保你的MPU连线正确,单我估计这里没问题。
lzm1019 回答时间:2016-3-30 21:25:57
watershade 发表于 2016-3-30 16:55
所以我觉得是你硬件连接或者时钟设置的问题,请先确保这里没问题。SystemInit如果都不能正常进入那说明这 ...

多谢!
关于物理连线,确认过多次,应该没有问题。
昨天调试,发现无法跳转main(),实际应操作失误。但具体是怎么回事,也高不清楚。
将SetSysClock()注释取消后,今天在线调试,可一路运行至最终发现停滞在Gyro的INT_PIN_CFG配置中。
----------
if (i2c_write(st.hw->addr, st.reg->int_pin_cfg, 1, &tmp))
        return -1;
-------------
关于Gyro的int_pin_cfg,查证其对应寄存器,在上述代码前一行,已配置
-----------------------------------
            tmp |= BIT_LATCH_EN | BIT_ANY_RD_CLR;       
-----------------------------------
比较费解为什么配置setup_compass() -> mpu_set_bypass(1)执行到i2c_write()导致跑飞?
至于时钟:
1)您提到的3种芯片的最大时钟的区别,之前已了解;但如何变更,尚不清楚;
2)查看SystemInit(),其默认就是设置系统时钟为HSI(16MHz);
3)另仔细读了一遍SetSysClock()函数,根据主芯片型号STM32F411CE,其配置代码主要是配置PLL;并未开启HSE_ON,因此我理解,系统时钟依然是HSI(16MHz)。
4)SetSysClock()中有两处开启HSE_ON,但分别被条件编译#if defined(xxx)和#if defined(USE_HSE_BYPASS)限定。前者肯定不对;后者,因为我使用的是无源晶体,没有使能USE_HSE_BYPASS。
若要求配置系统时钟为HSE,是否在别的地方有配置HSE_ON呢?麻烦指点,多谢!

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版