OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5270|回复: 4

MPU6050 I2C 读取问题和DMA传输问题

[复制链接]

3

主题

5

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-8-17
在线时间
6 小时
发表于 2021-11-3 18:06:13 | 显示全部楼层 |阅读模式
5金钱
微信图片_20211103174742.png
stm32F407探索版,MPU6050实验中,MPU_Read_Len函数;
其中addr为外设MPU6050的地址,reg为MPU6050寄存器的地址,也就是我们要读取的数据的地址;
我的问题是,while循环里面,对len进行循环,我理解为对reg这个同一地址连续读了len次;
但实际结果是:以reg为起始地址,读取len长度数据,就是读了多个地址上的数据;
这个是如何做到的,不明白其中的原理,有没有大佬帮忙解惑一下,在这里先行谢过!

如果要对MPU6050中的加速度数据和陀螺仪数据进行DMA传输,
这里有个问题是如何控制I2C总线上的数据,使总线上的数据为:{加速度x、加速度y,加速度z},{加速度x、加速度y,加速度z},{加速度x、加速度y,加速度z}这样循环发送?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

592

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1458
金钱
1458
注册时间
2019-7-28
在线时间
137 小时
发表于 2021-11-4 10:26:40 | 显示全部楼层
你的想法很美好,I2C的数据是由器件返回的,该是什么就是什么,你改不了
回复

使用道具 举报

13

主题

643

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2432
金钱
2432
注册时间
2019-12-28
在线时间
527 小时
发表于 2021-11-4 14:11:19 | 显示全部楼层
iic只是读取模块寄存器上的值是多少,然后直接给你返回过来,根据相应转换直接转出来的
回复

使用道具 举报

3

主题

5

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-8-17
在线时间
6 小时
 楼主| 发表于 2021-11-4 17:12:29 | 显示全部楼层
lpwithv 发表于 2021-11-4 10:26
你的想法很美好,I2C的数据是由器件返回的,该是什么就是什么,你改不了

我想到了一个方法,正在试验中
1、DMA中断设置传输量为6字节(三个加速度,每个2字节)
2、在DMA中断后,发送NACK和stop位;
3、在DMA中断处理后,重新发送读取地址从头开始读6字节数据;

或者利用TxE产生中断时计数,达到6字节时,发送NACK和stop位,然后重新发送读取地址读数据,这样DMA就只管收数据就可以
回复

使用道具 举报

3

主题

5

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-8-17
在线时间
6 小时
 楼主| 发表于 2021-11-4 17:14:22 | 显示全部楼层
狼里个狼121 发表于 2021-11-4 14:11
iic只是读取模块寄存器上的值是多少,然后直接给你返回过来,根据相应转换直接转出来的

我这里是想通过DMA的方式读取多条数据,尽量让CPU少介入;
因为我要从MPU6050中读取大量加速度数据,比如我一次要读取1000条,然后再批量处理;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 15:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表