STM32F407,DMA工作在直接模式,传输方向为:Memory -> peripheral,结果产生FIFO error中断,看资料说是memory bus 在外设发起请求前没有被授权。这是什么意思?有什么影响?怎么解决? 另外,我看数据实际也发送成功了。 |
盘古UE-STM32F407工控板原理图
STM32F407 定时器触发DMA 求助大神
【MCU实战经验】基于STM32F407的音频播放器设计
【STM32F429心得\疑问】+STM32F4之FSMC和FMC
STM32F429读取IO口传输的数据速率
STM32F407ZGT6 手摸芯片背部重启
STM32F4 SPI 动作时,软件片选信号被拉高,IO口程序逻辑失控
STM32F401RE NUCLEO求助,串口一直不能进中断
读取STM32F407内部温度传感器值错误
STM32F429多路内部ADC独立采集的办法
即然数据是发送成功的话,
估计是你关闭了 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传输操作正确性的代码。
最后,带着本次操作结果及状态继续执行原来的程序。
点评
评分
查看全部评分