打印

请教一个STM32F4串口DMA的问题?

[复制链接]
7161|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yhcbjnjx|  楼主 | 2011-12-23 10:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在STM32F4系列中DMA增加了个FIFO;这个FIFO的作用是什么?
当我使能这个FIFO时(DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable;),进仿真模式查看接收数组,他只更新16个字节(我在外边发进去20个字节);读取DMA接收数据个数寄存器显示DMA接收到了20个字节,我 第二次发送数据,接收缓冲又只更新了16个字节(包含上一次未更新的字节);
    当我把FIFO关闭时(DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;),我在外边不论发送多少字节都一次性更新到接收缓冲区中;
   这个FIFO的作用是什么?应该在何时使用?怎么用?
沙发
28182900| | 2012-9-22 07:43 | 只看该作者
木有人理你噢~
偶还想来找个例程呢...

使用特权

评论回复
板凳
acgean| | 2012-9-22 08:36 | 只看该作者
DMA 无非就是为了加快数据的传输. 多组数据可以用 burst 方式传输. 字节数据在 FIFO 中变换成 WORD 传输, 减少传输次数.
象你的问题在于, FIFO 的深度设定为 16 了, 这样还有四个字节在 FIFO 中, 数据没有丢失除非你在随后涮洗了 FIFO, 会跟后续的数据一起凑成 16 字节再次传输.
你可以减少FIFO 的深度, 比如设置成 1/4. 这样每收到4个字节就会传输. 不过没有更小的选项了. 如果还是不能满足你的要求, 那考虑用 DIRECT 模式吧

使用特权

评论回复
地板
seawwh| | 2012-9-23 10:48 | 只看该作者
1# yhcbjnjx

建议你将传输计数值设置为20,这样当20个数据进入之后,会全部传输到RAM中,
如果你设置FIFO 为 DMA_FIFOThreshold_Full 那么,中间会发生2次传输,一次16字节,一次4字节。
如果你设置FIFO 为 DMA_FIFOThreshold_HalfFull 那么,中间会发生3次传输,一次8字节,一次8字节,一次4字节。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

64

帖子

1

粉丝