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

STM32F4 DMA产生FIFO错误的问题。

[复制链接]
龙行tianxia123 提问时间:2017-12-8 08:32 /
STM32F407,DMA工作在直接模式,传输方向为:Memory -> peripheral,结果产生FIFO error中断,看资料说是memory bus 在外设发起请求前没有被授权。这是什么意思?有什么影响?怎么解决?
另外,我看数据实际也发送成功了。
收藏 2 评论4 发布时间:2017-12-8 08:32

举报

4个回答
无薪税绵 回答时间:2018-3-2 14:48:48
本帖最后由 无薪税绵 于 2018-3-2 14:52 编辑

即然数据是发送成功的话,
估计是你关闭了 FIFO  模式:
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;   
如果关闭了,建议把FIFO中断也关闭了吧。



顺便科普一下吧(资料源于网络)
DMA,全称为: Direct Memory Access,即直接存储器访问。

DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,
通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路, 能使 CPU 的效率大为提高。

DMA传输前,CPU要把总线控制权交给DMA控制器,
而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。

一个完整的DMA传输过程必须经过下面的4个步骤:

1、DMA请求 CPU对DMA控制器初始化,并向I/O接口发出操作命令,I/O接口提出DMA请求。

2、DMA响应 DMA控制器对DMA请求判别优选级及屏蔽,向总线裁决逻辑提出总线请求。
     当CPU执行完当前总线周期即可释放总线控制权。
     此时,总线裁决逻辑输出总线应答,表示DMA已经响应,通过DMA控制器通知I/O接口开始DMA传输。

3、DMA传输 DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,
     由DMA控制器输出读写命令,直接控制RAM与I/O接口进行DMA传输。

4、DMA结束 当完成规定的成批数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。
     当I/O接口收到结束信号后,一方面停 止I/O设备的工作,
     另一方面向CPU提出中断请求,使CPU从不介入的状态解脱,
     并执行一段检查本次DMA传输操作正确性的代码。
     最后,带着本次操作结果及状态继续执行原来的程序。

点评

根本无效的方法  发表于 2019-4-4 07:34

评分

参与人数 1蝴蝶豆 +5 收起 理由
zero99 + 5

查看全部评分

龙行tianxia123 回答时间:2017-12-9 12:51:21
有高手解惑没?
GT123 回答时间:2020-5-5 16:07:09
需要先打开DMA通道 DMA_Cmd ,再打开DMA的请求使能  SPI_I2S_DMACmd。DMA通道打开之后再使能请求,就不会出现这种情况。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版