[技术问答] F4A0,DMA可以一次请求传输多个数据块吗?如何设置?

[复制链接]
3268|23
 楼主| newiot 发表于 2024-3-31 08:34 | 显示全部楼层 |阅读模式
F4A0,DMA介绍如下:
■ 数据块最小为 1 个数据,最多可以是 1024 个数据
■ 每个数据的宽度可配置为 8bit、16bit 或 32bit
■ 可以配置最多 65535 次传输
■ 源地址和目标地址可以独立配置为固定,自增,自减,循环或指定偏移量的跳转
■ 可产生 3 种中断:块传输完成中断、传输完成中断、传输错误中断。每种中断都可以配置是否屏
蔽。其中块传输完成、传输完成可作为事件输出,可作为其它外围模块的触发源
■ 支持连锁传输功能,可实现一次请求传输多个数据块


假设一个数据块是1000个字节 ,可以一次请求传输64个数据块吗?也就相当于一次请求传输64*1000个字节,对吗?有demo吗?





beacherblack 发表于 2024-4-2 19:00 | 显示全部楼层
关于F4A0单片机的DMA(Direct Memory Access,直接内存访问)功能,它允许在没有CPU干预的情况下进行高速数据传输。这对于提高系统效率和降低CPU负载非常有益,特别是在需要处理大量数据或快速响应外部设备的场景中。
caigang13 发表于 2024-4-2 20:37 来自手机 | 显示全部楼层
DMA是配置一次操作多长的字节数,和数据分成几个块没有关系吧。
zerorobert 发表于 2024-4-4 10:26 | 显示全部楼层
DMA控制器通常能够支持连锁传输功能,这意味着一旦配置好,它可以连续地执行多次数据传输操作。例如,如果设定每个数据块为1000个字节,DMA可以被设置为一次请求传输64个这样的数据块,也就是一次性传输64KB的数据量。
tifmill 发表于 2024-4-4 11:46 | 显示全部楼层
在需要传输数据时,可以通过调用DMA相关的API函数(如STM32 HAL库中的HAL_DMA_Start()函数)来启动DMA传输。在传输过程中,DMA控制器会根据初始化结构体中的设置,自动完成多个数据块的传输。
everyrobin 发表于 2024-4-4 13:37 | 显示全部楼层
DMA传输需要配置源地址、目标地址、传输数据量等参数。在配置DMA时,可以设置一次传输的数据量,也就是块大小。
kkzz 发表于 2024-4-4 15:42 | 显示全部楼层
DMA还具有循环模式,可以在传输完成后自动重新开始传输,适用于需要连续传输大量数据的场景。
xiaoyaodz 发表于 2024-4-4 17:52 | 显示全部楼层
F4系列通常具有多个DMA通道,每个通道可以独立配置和运行。
albertaabbot 发表于 2024-4-4 19:56 | 显示全部楼层
通过相应的寄存器使能DMA传输,并配置所需的中断。例如,可以设置块传输完成中断和传输完成中断等。
mattlincoln 发表于 2024-4-4 22:01 | 显示全部楼层
在DMA传输过程中,可以通过检查DMA状态寄存器来了解传输的状态
51xlf 发表于 2024-4-5 20:37 | 显示全部楼层
DMA(Direct Memory Access,直接内存访问)控制器允许外设直接访问内存,而不需要CPU的介入,这样可以提高系统的效率和性能。
pl202 发表于 2024-4-5 23:00 | 显示全部楼层
MA传输完成后会产生中断。你可以通过设置DMA_CCRx寄存器中的相应位来启用或屏蔽这些中断。例如,你可以启用块传输完成中断和传输完成中断,并将它们配置为事件输出,作为其他外围模块的触发源。
modesty3jonah 发表于 2024-4-6 11:38 | 显示全部楼层
在DMA初始化结构体中,设置总的传输次数。每次请求(由DMA触发源触发一次)启动一个数据块的传输。
phoenixwhite 发表于 2024-4-6 13:32 | 显示全部楼层
在DMA_CMARx寄存器中分别设置源地址和目的地址。源地址是数据将要被读取的位置,而目的地址是数据将要被写入的位置。
bartonalfred 发表于 2024-4-6 15:28 | 显示全部楼层
DMA可以一次传输一个数据块,这个数据块可以由多个数据组成,例如一个数组。
febgxu 发表于 2024-4-6 17:28 | 显示全部楼层
设置数据块的大小(通常范围是1到1024个数据单位),以及总的传输次数。每次DMA触发源触发一次,就会启动一个数据块的传输。
benjaminka 发表于 2024-4-6 20:42 | 显示全部楼层
使用DMA_Start(DMA_HandleTypeDef* hdma, uint32_t Config)函数启动DMA传输。在这个函数中,你可以传递DMA初始化结构体中的参数。
yorkbarney 发表于 2024-4-7 07:54 | 显示全部楼层
在DMA初始化结构体中,设置数据块的大小。例如,可以设置数据块包含1至1024个数据,每个数据的宽度可配置为8位、16位或32位。
qiufengsd 发表于 2024-4-7 10:20 | 显示全部楼层
DMA传输完成后,可以触发中断,在中断服务程序中进行后续处理,如更新源地址、目标地址等,以传输下一块数据。
macpherson 发表于 2024-4-7 12:29 | 显示全部楼层
一旦所有配置完成,就可以通过写DMA_CCRx寄存器的相应位来启动DMA传输。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

59

主题

80

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部