极客秀
搜索

来看看DMA的魅力,直观体会单片机DMA传输和非DMA传输的效率差别

** 什么是DMA? ** DMA是“ ** 直接内存访问 ** ”(Direct Memory
Access)的缩写。它是一种允许外部设备(如硬盘、网络适配器等)直接与系统内存进行数据传输的技术,而不需要通过中央处理器(CPU)。这可以减少CPU的负担,提高数据传输的效率。
我们在进行 ** 数据传输搬运 ** 的时候,就可以利用DMA来大幅度的减少搬运数据的时间,对于数据我们可以将其分为 外设以及内存
例如ADC模数转换器就是外设,或者我们的LCD显示屏也是外设。内存即内部FLASH或者外部FLASH等。 因此根据数据的搬运方向可以分为: 内存
to 外设
,例如我们将需要显示的图像数据传输到屏幕上。 ** 外设 to 内存 ** ,
比方说连续获取ADC连续采集的值。利用DMA我们可以不需要芯片CPU来搬运(赋值)而利用DMA自身完成数据搬运。 **
这样子可以极大的提高效率,以及一种解放CPU资源的方式,搬运的过程并不占用CPU资源,可以实现程序的并发 ** 。

** STM32中的普通DMA **

STM32中基本都有DMA功能。以F103C8T6为例,当我们开启一些数据传输功能之后,我们就可以选择添加DMA功能来实现数据搬运。


在CubeMX中可以设置DMA的相关参数,例如每次搬运的数据宽度,缓存区模式等,例如是环形循环的缓存区(存满从头开始覆盖)或者正常模式(存满了就存满)


  while(1)  {    HAL_UART_Transmit_DMA(&huart1,pData,sizeof(pData);    HAL_Delay(1000);  }

DMA串口通信

如上所示我们就可以在HAL库中使用DMA来实现串口通信了,这种方式并不会占用CPU资源,因此我们可以做更多的事情。

同样的,我们也可以用DMA来搬运ADC数据,并且可以利用定时器的事件来触发ADC数据采集,每次采集到的数据会自动的通过DMA存储到我们指定的缓存区。

不仅仅节省CPU资源,提高数据搬运效率,实现更高的采样率,也可以利用定时器的特点,实现采样率的可控设置。是连续采样的必要步骤!
除了常规定时器之外,STM32H5还有GPDMA即通用DMA这段时间恰好在学习这块单片机,有机会也带大家了解一下

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容