RSMli92104 发表于 2014-6-17 19:51:02

STM32F103硬件SPI+DMA使用中断读取MPU6000成功

本帖最后由 RSMli92104 于 2014-6-17 19:51 编辑

{:lol:} 第一次在阿莫发帖子,要是有什么不规范的话还请大家见谅。本人发的源码仅限大家交流学习使用,很多地方使用了网上的各种资源,经过移植和测试成功读取到了MPU6000的数据。
以下是我的测试环境


自己做的STM32F103VB带TXB0104双向电平转换的板子,主要是为了支持用SPI全速外接5V的模块使用,利用逻辑分析仪分析读取使用的时间和是否正确。
因为在这之前使用判断标志位的办法一个字节一个字节的进行SPI传输会因为始终不连续中间会停下2us间隔,影响数据读取的时间


其中的原因在这个帖子中有所说明
http://www.amobbs.com/thread-4948398-1-1.html
在实在没有办法的情况需啊无奈的只能给SPI加上DMA进行读取,据说是这样可以实现数据的连续读取
在移植网上使用SPI+DMA给外部Flash发送数据的例程后进行了进一步的修改。
程序中加入了由MPU6000的INT脚数据更新,利用捕捉上升沿进图中断,打开MPU6000使能端,触发DMA通道开启,等待DMA读取完成再次产生DMA传输完成中断,关闭DMA通道与MPU6000使能端,
这样使得读取MPU6000变得更加的迅速和简单,经过测试整个读取过程只需6us,将MPU6000的低通滤波关闭使得陀螺仪全速工作数据更新速率达到8KHz,也能完全将数据全部接收到。



因为程序并没有加入DMA错误判断和IMU姿态解算,这个读取也是才刚刚实现还没有进一步测试他的稳定性。
源码先暂时不上传。
现在也遇到了新的问题,在我的HMC5983中SPI的最高速度是8MHz,而我的MPU6000工作在18MHz下的,所以无奈HMC5983只能在下一步中和AT45DB161放在同一总线上了。
希望大家有啥好的传感器组合建议也欢迎提出。
还有就是在IMU上还在研究扩展卡尔曼滤波{:lol:}新手报到,各位高手多多指教了哈

mqhrzy09 发表于 2014-8-5 08:35:49

楼主做的很不错,可否分享下代码学习下,刚好要用到类似的东西。

lutijin 发表于 2014-8-9 21:36:16

能否贴个代码学习下?

cu_ice 发表于 2014-11-7 10:23:01

楼主能否贴个代码来参考参考,现在正用模拟SPI读,数据是可以读,温度与ID都正常,但6轴的数据变化很大,不知是哪里的问题

wonderfulgxq 发表于 2015-1-10 21:00:25

楼主能否把代码贴上来参考一下不?

ggchao 发表于 2015-11-5 17:24:34

收藏 图做的不错
页: [1]
查看完整版本: STM32F103硬件SPI+DMA使用中断读取MPU6000成功