使用STM32H563开发板简单演示DMA 2D模式的应用

发布者:范隆最新更新时间:2024-01-03 来源: elecfans关键字:开发板  DMA 手机看文章 扫描二维码
随时随地手机看文章

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


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


8aba704c-38e9-11ee-9e74-dac502259ad0.png

如上图所示,第一次传输了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的基本配置如下:

8ad7f1bc-38e9-11ee-9e74-dac502259ad0.png

8b2de158-38e9-11ee-9e74-dac502259ad0.png

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

8b5acc54-38e9-11ee-9e74-dac502259ad0.png

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

8b82c498-38e9-11ee-9e74-dac502259ad0.png

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

__HAL_LINKDMA(&huart3, hdmarx, handle_GPDMA1_Channel6);

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

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

8baa9f86-38e9-11ee-9e74-dac502259ad0.png

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


关键字:开发板  DMA 引用地址:使用STM32H563开发板简单演示DMA 2D模式的应用

上一篇:基于嵌入式系统原型设计的STM32开放式开发环境详解
下一篇:stm32定时器外部时钟3使用外部时钟源模式2进行定时的步骤

推荐阅读最新更新时间:2024-10-27 15:12

使用STM32H563开发板简单演示DMA 2D模式的应用
我这里使用STM32H563开发板来简单演示一下DMA 2D模式的应用。所谓DMA 2D模式,个人理解是DMA可以通过事先设置块内寻址偏移量和块寻址偏移量来动态调整DMA的寻址方式及能力。换句话说,DMA在进行数据传输时,块内寻址不再总是固定相邻存放,而是可以通过编程决定相邻两次传输时访问数据的地址间隔。对于重复性的块传输,也不再是简单的每次从同一位置再开始,而是可以根据块地址的偏移量调整从新开始传输的起始地址。 描述起来有点抽象,不妨加点看图说话。现在假设针对同一DMA请求发起三次【三轮】传输,对应3个DMA传输块。【注:手机模式下图片可放大查看】 如上图所示,第一次传输了5个红色标示的数据【即第1块】,按图示进行数据
[单片机]
使用<font color='red'>STM32H563</font><font color='red'>开发板</font>简单演示<font color='red'>DMA</font> <font color='red'>2D</font><font color='red'>模式</font>的应用
基于STM32H563 USART演示DMA链表功能
这里选用STM32H563Nucleo开发板,使用USART3外设演示DMA链表模式的实现过程。大致过程是这样的: STM32H563芯片上的USART3与板载STLINK的VCP相连,通过PC端串口助手软件先后发送3串字符给MCU,MCU的USART3通过DMA以链表模式依次接收并存到相应内存,同时在相应的调试界面的观察窗口加以显示。接收过程对应3个DMA接收节点,他们构成1个DMA接收队列。当MCU接收到3串字符后,也以DMA 链表模式依次发送3串字符到PC端的串口助手并显示出来。同样,USART3的DMA 发送也用到3个节点以组成1个DMA发送队列。 GPDMA1的2个通道CH0,CH1,配置在链表模式。其中CH0用于U
[单片机]
基于<font color='red'>STM32H563</font> USART演示<font color='red'>DMA</font>链表功能
实战经验 | Timer 结合 DMA 2D 通道实现不同波形输出
01 问题背景 客户需要使用 MCU 输出正弦波,但受限于 MCU DAC 数量不足,建议尝试使用 PWM加滤波方式产生正弦波。同时要求正弦波与固定电平交替输出。因此可用一个 TIM 输出PWM,同时用另一个 TIM 来定时切换输出正弦波或固定电平。 使用 TIM 输出 PWM 产生正弦波形时,需要结合 GPDMA 来实现。在 STM32U5 系列中,GPDMA 共有 16 个独立通道,其中 12-15 通道还具有 2D addressing/ repeat 功能。因此也可以使用一个 TIM 加 GPDMA 的一个 2D 通道实现 PWM 波形切换功能。 02 产生PWM 本文按以下配置产生 PWM,在 U575
[单片机]
实战经验 | Timer 结合 <font color='red'>DMA</font> <font color='red'>2D</font> 通道实现不同波形输出
基于STM32介绍DMA的双缓冲模式
目前STM32家族中有些系列支持DMA的双缓冲模式,比如STM32F2/STM32F4/STM32F7等系列。尤其随着人们对STM32F4/F7系列应用不断拓宽和加深,在设计中运用到DMA双缓冲的场合也越来越多。STM32芯片中的DMA又可分为两大类,一类是通用DMA,一类是专用DMA,比如用于USB,TFT LCD,ETHERNET等外设应用上的DMA。这里要谈的是基于通用DMA的话题,不妨以STM32F4系列芯片为例。 关于STM32F4的DMA双缓冲传输在STM32F4系列的参考手册里做了简单描述。因为它是基于介绍了单缓冲模式的DMA介绍之后接着介绍的,稍显言简意赅。 相比单缓冲的数据流,双缓冲多了一个DMA存储区和
[单片机]
基于STM32介绍<font color='red'>DMA</font>的双缓冲<font color='red'>模式</font>
STM32CUBEMX开发GD32F303(11)----ADC在DMA模式下扫描多个通道
概述 本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过GD32303C_START开发板内进行验证。 需要GD样片的可以加Q_QUN申请:6_15061293。 本章主要配置,双ADC轮询模式扫描多个通道,通过串口进行打印。 查阅手册可以得知,PA9、PA10为串口0的输出和输入口。 ADC通道配置 生成例程 这里准备了GD32303C_START开发板进行验证。 视频教学 https://www.bilibili.com/video/BV1hG41187Ah/ STM32CUBEMX配置 勾选中断。 ADC1配置。 ADCs_Common_Setti
[单片机]
STM32CUBEMX开发GD32F303(11)----ADC在<font color='red'>DMA</font><font color='red'>模式</font>下扫描多个通道
STM32CUBEIDE(10)----ADC在DMA模式下扫描多个通道
概述 本章 STM32 CUBEMX配置STM32F103的 ADC 在 DMA 模式扫描多个通道,通过串口进行打印。 需要GD样片的可以加Q_QUN申请:6_15061293。 代码 下载 https://download.csdn.net/download/qq_24312945/86395148 生成例程 使用STM32CUBEMX生成例程,这里使用NUCLEO-F103RB开发板 查看原理图,PA2和PA3设置为开发板的串口。 配置串口。 开启中断。 查看原理图, Arduino 的 接口 A0-A5都是 AD 口。 ADC通道配置 ADC1配置。 ADCs_Common_Set ti n
[单片机]
STM32CUBEIDE(10)----ADC在<font color='red'>DMA</font><font color='red'>模式</font>下扫描多个通道
STM32 DMA串口发送模式配置及使用简单分享
  赠人玫瑰,手有余香;很感谢网上其他楼主的分享;我这个贴子是关于STM32 DMA USART 发送模式的调试分享,我为什么要建这个帖子呢,因为我不想看到还有其他人跟我一样,为了调通DMA串口,而花上大半天的时间,这很不利于大家高效率的开发,网上的经验都是从头教到尾的,内容极多,对于有点小经验的人,或者是想很快达到目的的人,这个很不适合他们;我的这个很简单(本帖不适合不熟悉配置STM32串口的玩家),他只是说串口的DMA怎么配置,还有我用的是DMA1_通道4,因为我的是串口1的TX长话短说:直接po代码:   DMA_InitTypeDef DMA_InitStruct; //DMA类型声明   RCC_AHBPeriphC
[单片机]
STM32HAL库DMA模式串口收发
一.简单了解 串口模式实现有三种 1.普通模式:在主函数中接收函数 2.中断模式:产生的不影响主程序运行 3. DMA模式:与主函数互不影响,独立运行 本文记录第一种普通模式。 学习目标是:实现DMA串口的数据收发,发送数据时LED灯电平翻转。 二.步骤 1-在原来工程基础上,在stm32cubemx中增加dma,usart1中的DMA Settings,ADD USART1_RX循环接收和USART1_TX单次发送 2-添加MDA宏定义代码 #define UART1_DMA uint8_t TdataDMA ={ welcome to uart DMA!rn }; uint8_t Rdata; 3-在主函数添加
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved