STM32 cubemx配置USART DMA传输

这篇具有很好参考价值的文章主要介绍了STM32 cubemx配置USART DMA传输。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

本篇文章来讲解DMA的概念,并使用DMA来进行串口的数据收发。

一、DMA概念

DMA(Direct Memory Access,直接内存访问)是一种计算机系统的技术,允许外部设备(如硬盘驱动器、网络适配器或图形卡)直接与计算机内存进行数据传输,而不需要CPU的直接参与。这种直接的内存访问可以提高数据传输的效率,并减轻CPU的负担。
在没有DMA的情况下,数据传输通常需要通过CPU来完成,这涉及到CPU的中断处理程序从设备读取数据,然后将数据写入内存,或者从内存读取数据,然后将数据发送到设备。这种方式会消耗CPU的时间和计算资源,限制了系统的性能和吞吐量。
通过DMA技术,外部设备可以直接与系统内存进行数据传输,而不需要CPU的干预。在DMA传输开始之前,系统配置好DMA控制器,并提供一个DMA缓冲区,外部设备可以将数据直接写入到该缓冲区或者从该缓冲区读取数据。当DMA传输完成后,DMA控制器会发出一个中断信号,以通知CPU。

使用DMA的好处包括:

1.提高数据传输速度:由于数据传输不需要CPU的介入,DMA可以以更高的速度进行数据传输,从而提高系统性能和吞吐量。
2.减轻CPU负担:传统的数据传输需要CPU的参与,消耗CPU的时间和计算资源。而使用DMA进行数据传输时,CPU可以专注于其他的计算任务,减轻了CPU的负担。
3.支持大规模数据传输:DMA技术可以支持大规模的数据传输,例如高清视频流、大型文件和网络数据包的处理。

总之,DMA是一种能够提高系统性能和数据传输效率的技术,通过允许外部设备直接与内存进行数据传输,减少了CPU的介入。这在需要高速、大量或连续数据传输的场景中特别有用,如高性能计算、网络通信和存储系统等。

二、STM32 DMA数据手册分析

从DMA的描述来看在STM32 F103这款芯片中有DMA1和DMA2,DMA1有7个通道,DMA2有5个通道。
stm32cubemx dma,STM32框架式编程,stm32,嵌入式硬件,单片机,原力计划
DMA架构图:
DMA支持直接和SRMA进行数据的传输,不需要经过CPU,这样就可以让CPU去做其他的事情,提高系统的运行效率。

stm32cubemx dma,STM32框架式编程,stm32,嵌入式硬件,单片机,原力计划
使用DMA(Direct Memory Access)进行数据传输时,通常需要经过以下步骤:

1.设置DMA控制器:首先,需要在系统中配置和设置DMA控制器。这包括设置DMA的源地址和目标地址,传输长度,传输方向(从内存到设备或从设备到内存),以及其他相关参数。

2.发送DMA请求:在数据传输之前,需要向DMA控制器发送DMA请求。该请求通常由CPU或设备发起,用于指示DMA控制器执行特定的数据传输操作。

3.DMA传输:一旦DMA请求被接收和识别,DMA控制器将启动数据传输。它将直接从源地址读取数据,并将数据传输到目标地址。在传输过程中,DMA控制器绕过CPU,直接控制内存和设备之间的数据传输,以提高数据传输效率并减轻CPU的负担。

4.中断或完成通知:一旦DMA传输完成,DMA控制器通常会生成一个中断信号或发送一个完成通知,以通知CPU或相关设备传输已经完成。

正常进行数据的发送:

不使用DMA进行串口的数据发送时,CPU需要从SRMA中读取出存储的数据,然后再发送给串口,发送少量数据是不会影响CPU执行其他事情的,假如我想发送10000个数据,那么这个时候就会让CPU处于一直在发送数据的状态,这样就会影响到其他程序的执行。

stm32cubemx dma,STM32框架式编程,stm32,嵌入式硬件,单片机,原力计划
根据手册描述DMA和CPU共享总线来执行直接的内存传输。
stm32cubemx dma,STM32框架式编程,stm32,嵌入式硬件,单片机,原力计划

DMA可以直接访问到外设和SRMA,那么这样就不需要CPU来进行数据的读取交换了,直接使用DMA就可以解决这个问题,那么这样的话就可以提高系统的运行效率了。
stm32cubemx dma,STM32框架式编程,stm32,嵌入式硬件,单片机,原力计划

3.DMA模式介绍

下面我们来看到DMA的两种模式,一种是循环模式,一种是内存到内存的模式。
stm32cubemx dma,STM32框架式编程,stm32,嵌入式硬件,单片机,原力计划

DMA的循环模式(Circular Mode):
在循环模式下,DMA传输的数据可以在源和目的地之间循环传输,以连续地进行数据传输操作。这种模式下,一旦DMA传输完成,它会自动重新开始下一轮传输,而无需软件干预。
循环模式对于需要在连续数据块之间进行重复传输的应用非常有用,如音频、视频流等。它可以在不中断DMA传输的情况下循环传输数据,大大提高了数据传输效率和系统性能。

DMA的内存到内存模式(Memory-to-memory Mode):
内存到内存模式允许DMA直接在两个内存区域之间进行数据传输,而无需外设的参与。在这种模式下,DMA通道可以从一个内存位置读取数据,并将数据直接写入另一个内存位置,而不需要CPU的介入。
内存到内存模式非常适用于需要在内存之间快速传输数据的应用场景,例如内存拷贝、内存填充等。通过使用这种模式,DMA可以独立地执行数据传输,减轻CPU的负担,提高传输效率。

总结:DMA的循环模式允许数据在源和目的地之间循环传输,连续进行数据传输操作,并在每次传输完成后自动重新开始下一轮传输。而DMA的内存到内存模式允许DMA直接在两个内存区域之间传输数据,而不需要外设的触发请求,并且能够快速、高效地在内存之间传输数据。这两种模式都有助于提高数据传输效率并减轻CPU的负担,适用于不同的应用场景。

4.cubemx配置

配置一个LED灯观察实验现象:
stm32cubemx dma,STM32框架式编程,stm32,嵌入式硬件,单片机,原力计划
配置串口1:
stm32cubemx dma,STM32框架式编程,stm32,嵌入式硬件,单片机,原力计划
开启串口中断:
这里不开启串口中断的话无法判断串口是否发送完成一次数据,这样串口就一直处于忙状态导致完成进行下一次的发送。

stm32cubemx dma,STM32框架式编程,stm32,嵌入式硬件,单片机,原力计划
DMA通道设置:

TX设置为从内存到外设,因为串口的发送就是把内存中的数据取出来再发给外设,RX设置为从外设到内存,串口发送过来的数据将会保存在内存中。

模式选择Normal,循环模式的话只需要调用一次发送函数就会一直进行数据的发送了。

stm32cubemx dma,STM32框架式编程,stm32,嵌入式硬件,单片机,原力计划

具体代码:
这里发送一个非常长的数据,同时让这个LED闪烁,看看串口的发送会不会影响到LED的闪烁,结果是不会的。

uint8_t msg[1024] = "hellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohello";

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_UART_Transmit_DMA(&huart1, msg, strlen(msg) + 1);
		
		
		HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);
		HAL_Delay(100);
  }

总结

本篇文章就讲解到这里,下篇文章我们讲解DMA的具体配置和DMA串口接收不定长数据。文章来源地址https://www.toymoban.com/news/detail-678799.html

到了这里,关于STM32 cubemx配置USART DMA传输的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32CubeMX配置-ADC多通道配置(DMA) (STM32G070)

    一、写在前面         ADC通道采集数据的两种方式:         1)ADC轮询采集数据直接放到数组中;         2)采用中断方式,ADC采集完成进入中断,中断关闭ADC采集,取数据之后再打开ADC采集。 以下按第一种方式实现: 二、ADC多通道配置 1)配置通道及参数     如果要控

    2024年02月05日
    浏览(49)
  • STM32CubeMX配置ADC采样(轮询、中断、DMA)

    STM32CubeMX能够极大减小STM32外设配置的工作量,因此作者也借助空闲时间对STM32CubeMX相关配置进行了学习,本文介绍如何利用STM32CubeMX配置ADC采样,记录了作者学习过程中遇到的问题及解决办法,使大家少走弯路,并方便以后复习 先选择所使用的MCU,这里我使用的是STM32F407ZGT系

    2024年02月03日
    浏览(51)
  • STM32 cubemx配置DMA+空闲中断接收不定长数据

    本篇文章给大家讲解一下DMA+串口空闲中断接收串口不定长数据,之前我们也是讲解过串口接收不定长数据的,那么本篇文章的话将使用DMA来接收不定长数据。 串口空闲中断是指在串口接收到数据后,在数据的传输结束之后,在一段连续的空闲时间内没有接收到新数据时触发

    2024年02月19日
    浏览(53)
  • STM32初学入门笔记(3):STM32CubeMX配置STM32实现多通道ADC+DMA读取模拟量

    模拟信号的读取是我们在做很多项目是都要用到的,而模拟量的读取就要依赖于ADC数模转换器。对于初学者,学习使用ADC可以很大的帮助以后的STM32学习。 目录 ADC简介 : DMA简介:  工程开始: STM32CubeMX配置区: 配置外部时钟: 配置调试: 配置ADC: 配置DMA: 配置串口: 配

    2024年02月09日
    浏览(46)
  • STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL库开发)

     时钟配置HSI主频配置64M  勾选打开8个通道的ADC  使能连续转换模式  添加DMA  DMA模式选择循环模式  使能DMA连续请求 采样时间配置160.5 转换次数为8  配置好8次转换的顺序  配置好串口,选择异步模式 配置好需要的开发环境并获取代码  修改main.c 串口重定向  串口重定向

    2024年02月08日
    浏览(54)
  • STM32CubeMx配置ADC(多通道采集+DMA读取数据)(HAL库开发)

    目录 1、函数配置过程(这是标准库配置过程): 2、STM32CubeMx配置过程  3、main函数源文件 采集5路ADC数据,并用串口printf()函数打印出来。 实验现象:  ADC转换的初始条件: 1、使能 2、触发源条件完成(这个需要自己配置)利用:HAL_ADC_Start_DMA()函数; ADC中HAL开发优势就是,

    2023年04月08日
    浏览(74)
  • STM32CubeMX配置HAL库实现SPI-DMA的递归调用

    核心: STM32F407ZET6   外设ADC: ADS1258   数量:3个   ※ 核心与3个ADC使用SPI总线 “一主多从” 方式连接,PCB布线的方式与下图一致。 ※ 在电路板上STM32与三个ADS1258在同一直线上分布,STM32在一端,三个ADC依次排布。 ※ 离STM32最远ADC的DRDY硬件管脚与STM32的EXTI line4 interrupt连接

    2024年02月15日
    浏览(47)
  • 【STM32】定时器1触发ADC多(规则)通道采样+DMA(CUBEMX配置)

    在用单片机做电源控制时不得不提ADC采集,离散系统是有固定的执行周期的,所以我们采样也是要固定时间去采样。然后就是我希望pwm波(定时器1产出)的频率与采样频率一致。 我下面演示的是G431CBU6,当然其他芯片也大差不差了。 说一下大致流程,TIM1触发ADC采样,然后

    2024年02月01日
    浏览(46)
  • 【STM32】HAL库 STM32CubeMX——DMA (串口DMA发送接收)

    软件: STM32CubeMX KEIL5 mcuisp 串口通信助手 硬件: STM32F103C8Tx 杜邦线,面包板,USB转TTL DMA,全称Direct Memory Access,即直接存储器访问。 DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。 我们知道系统的运

    2024年02月12日
    浏览(63)
  • 【STM32笔记】STM32的串口数据收发基础(四)(USART DMA模式)

         在STM32中编写串口通信数据收发有三种方式: 轮询模式 (阻塞方式), 中断模式 (非阻塞方式)以及 DMA模式 。      打开STM32CubeMX,前部分配置流程如串口数据收发基础(三)节里一样。配置好USART1的基本参数,开启定时器中断后,接下来就要开启USART1的DMA。

    2024年02月03日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包