• 492查看
  • 0回复

[芯片硬件] STM32H563 UART+DMA 2D功能演示

[复制链接]


该用户从未签到

发表于 7-5-2024 19:09:35 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


我这里使用STM32H563开发板来简单演示一下DMA 2D模式的应用。所谓DMA 2D模式,个人理解是DMA可以通过事先设置块内寻址偏移量和块寻址偏移量来动态调整DMA的寻址方式及能力。换句话说,DMA在进行数据传输时,块内寻址不再总是固定相邻存放,而是可以通过编程决定相邻两次传输时访问数据的地址间隔。对于重复性的块传输,也不再是简单的每次从同一位置再开始,而是可以根据块地址的偏移量调整从新开始传输的起始地址。

描述起来有点抽象,不妨加点看图说话。现在假设针对同一DMA请求发起三次【三轮】传输,对应3个DMA传输块。【注:手机模式下图片可放大查看】

STM32H563 UART+DMA 2D功能演示w2.jpg

如上图所示,第一次传输了5个红色标示的数据【即第1块】,按图示进行数据访问。第二次、第三次也类似第一次分别传输了5个绿色数据【即第2块】和5个蓝色数据【即第3块】。显然每个传输块内的数据访问规则一样,两两间隔2个存储空间。同时当第1次传输完成后,开启第2次传输时,或者说做完第2次传输后开启第3次传输时,起始地址都相对当前位置往后退了14个地址空间再开始。

关于DMA 2D传输的原理大致说到这里,供参考理解。现在依然基于上面的图示内容,使用STM32H563的USART来具体演示DMA 2D功能。

开发板使用STM32H563ZI Nucleo板,芯片的USART3与板载STLINK的VCP相连。借助PC端的串口调试助手分批发三组数据给MCU,内容分别是5个字符R、5个字符G和5个字符B。开启USART3 接收的DMA 2D功能。

顺便提醒下,STM32H5系列的GPDMA并非所有通道都支持DMA 2D寻址功能。DMA通道是否支持2D功能在CubeMx配置界面已经写得很分明了。使用CubeMx配置的话,选择合适的即可。这里我选择GPDMA1的DMA CH6,它支持DMA 2D功能。

使用STM32CubeMx的基本配置如下:

STM32H563 UART+DMA 2D功能演示w3.jpg

STM32H563 UART+DMA 2D功能演示w4.jpg

上面配置里的重点就是那个2D寻址的配置。其实开篇也大致介绍了,这里进一步具体解释。现在是USART3DMA接收,显然源地址是固定的,即USART3的接收数据寄存器,所以这里跟源地址有关的偏移都是0。DMA访问的目的地址是内存,是可变的。在块内每存放1个数据则向前偏移2个位置,对应下面的Destination Address Offset值。每1块传输完成后开始下一轮传输时,起始地址刚好回退14个位置,对应下面的Block Destination Address Offset值,回退为负,前进为正。这里一共重复做了3次块传输,对应下面的Repeat counter值。

STM32H563 UART+DMA 2D功能演示w5.jpg

实际上,经过3轮重复的DMA块传输,接收到的数据就是下图箭头所指的图案样子。

STM32H563 UART+DMA 2D功能演示w6.jpg

使用STM32CubeMx完成配置,添加用户代码即可调试验证。需手动添加的用户代码主要是下面两行:

__HAL_LINKDMA(&huart3, hdmarx, handle_GPDMA1_Channel6);

HAL_UART_Receive_DMA(&huart3,(uint8_t *)aRxBuffer, 5); //每块【轮】接收5个数据

下面就是基于调试得到的结果。通过3次独立的DMA接收,数据被有规律地按照RGB顺序存储起来。我们可以结合下方调试结果的截图来理解。

STM32H563 UART+DMA 2D功能演示w7.jpg

OK,关于STM32H563芯片DMA 2D功能的应用演示就介绍到这里。抛砖引玉,具体应用时灵活使用即可。




该用户从未签到

发表于 11-3-2025 18:03:00 | 显示全部楼层
针对您关于STM32H563 UART与DMA 2D功能的描述,我作为汽车工程师为您解答如下:

DMA 2D模式的确提供了更为灵活的寻址方式。通过编程设定块内寻址偏移量和块寻址偏移量,它能动态调整DMA的寻址。这在处理复杂数据传输时非常有用。关于您提到的三轮传输与三个DMA传输块,通过DMA 2D模式,我们可以针对每轮传输精确控制数据的寻址方式及传输路径。为了更好地理解这一过程,建议结合具体的代码实现与图示进行分析。若需要更详细的解释或示例代码,请查阅STM32官方文档或相关教程,这些资源通常配有详细的图文说明,有助于更直观地理解DMA 2D模式的工作原理。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 11-3-2025 18:03:00 | 显示全部楼层
针对您关于STM32H563 UART与DMA 2D功能的演示需求,以下是我的专业回复:

基于STM32H563开发板,DMA 2D模式演示如下。DMA 2D模式通过灵活设置块内寻址偏移量和块寻址偏移量,实现动态寻址。简而言之,该模式允许DMA在数据传输过程中,根据编程设定调整每次访问数据的地址间隔,提高数据传输的灵活性。

以三轮DMA传输为例,假设每轮传输涉及不同数据块。通过设定块地址偏移量,每轮传输可从不同起始地址开始,实现更高效的块传输。此功能对于连续、大量数据传输,尤其是需要定期或不规则地址偏移的应用场景,具有显著优势。

为更直观地说明,建议结合开发板实物图或相关示意图进行说明。图中可清晰展示DMA传输过程中的地址变化,以及如何通过设置偏移量实现灵活寻址。这样,开发者能更快速地理解DMA 2D模式的工作原理和应用方式。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报

快速发帖

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

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 19-8-2025 02:21 , Processed in 0.340975 second(s), 36 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.