我这里使用STM32H563开发板来简单演示一下DMA2D模式的应用。所谓DMA 2D模式,个人理解是DMA可以通过事先设置块内寻址偏移量和块寻址偏移量来动态调整DMA的寻址方式及能力。换句话说,DMA在进行数据传输时,块内寻址不再总是固定相邻存放,而是可以通过编程决定相邻两次传输时访问数据的地址间隔。对于重复性的块传输,也不再是简单的每次从同一位置再开始,而是可以根据块地址的偏移量调整从新开始传输的起始地址。
(资料图)
描述起来有点抽象,不妨加点看图说话。现在假设针对同一DMA请求发起三次【三轮】传输,对应3个DMA传输块。【注:手机模式下图片可放大查看】
如上图所示,第一次传输了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的基本配置如下:
上面配置里的重点就是那个2D寻址的配置。其实开篇也大致介绍了,这里接着进一步具体解释。现在是USART3DMA接收,显然源地址是固定的,即USART3接收数据寄存器,所以这里跟源地址有关的偏移都是0。DMA访问的目的地址是内存,是可变的。在块内每存放1个数据则向前偏移2个位置,对应下面的Destination Address Offset值。每1块传输完成后开始下一轮传输时,起始地址刚好回退14个位置,对应下面的Block Destination Address Offset值,回退为负,前进为正。这里一共重复做了3次块传输,对应下面的Repeat counter值。
实际上,经过3轮重复的DMA块传输,接收到的数据就是下图箭头所指的图案样子。
使用STM32CubeMx完成配置,添加用户代码即可调试验证。需手动添加的用户代码主要是下面两行:
__HAL_LINKDMA(&huart3, hdmarx, handle_GPDMA1_Channel6);
HAL_UART_Receive_DMA(&huart3,(uint8_t *)aRxBuffer, 5); //每块【轮】接收5个数据
下面就是基于调试得到结果。通过3次独立的DMA接收,将数据有规律地按照RGB顺序存储起来。可以结合下方调试结果的截图来理解。
OK,关于STM32H563芯片DMA 2D功能的应用演示就介绍到这里。抛砖引玉,具体应用时灵活使用即可。
审核编辑:汤梓红
下一篇:最后一页
广告
X 关闭
广告
X 关闭
指数型基金怎么买?指数型基金和股票型基金有什么区别?
2023-04-27指数型基金指的是什么基金?指数型基金的选择标准是什么?
2023-04-27基金购买日确认日是多久?基金价格是按购买日还是确认日?
2023-04-27已知价原则是什么基金?已知价计算法是什么意思?
2023-04-27基金申购采取什么原则?为什么基金交易中采用未知价原则?
2023-04-27公司必须有资本公积吗?公积金转增股本后股价要除权吗?
2023-04-24资本公积金转增股本触发反稀释吗?资本公积金转增股本对股票有啥影响?
2023-04-24资本公积金转增股本是利好吗? 资本公积转增资本的作用是什么?
2023-04-24ROC指标是什么意思?ROC指标最佳参数指的是什么意思?
2023-04-21中国第一枚邮票是于哪年发行的?大龙邮票的是市场价值是多少?
2023-04-19