【STM32】HAL库 STM32CubeMX——DMA (串口DMA发送接收)

这篇具有很好参考价值的文章主要介绍了【STM32】HAL库 STM32CubeMX——DMA (串口DMA发送接收)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


实验环境

软件:
STM32CubeMX
KEIL5
mcuisp
串口通信助手
硬件:
STM32F103C8Tx
杜邦线,面包板,USB转TTL


一、DMA的基本介绍

(1)DMA的定义

DMA,全称Direct Memory Access,即直接存储器访问。

DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。

我们知道系统的运作核心是CPU,CPU无时无刻都在完成计算,控制,转存数据等大量事务,如果处理事务过多就会导致CPU运转不过来,因此有些程序就会出现卡顿;仔细想想如果将一些不重要的转移,存储数据交给其它外设来做,就可以减轻CPU负荷,让CPU转手去做其它更加复杂的事。

如何实现呢?我们只需要在两个外设之间建立一个数据通道让他们数据传输不经过CPU,就可以直接进行数据传输拷贝,如下图:
stm32 hal dma通讯,stm32,单片机,arm
所以这样就可以引出DMA的定义了:

DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。

(2)DMA传输方式

DMA没有采用传统的CPU参与数据存储方式,DMA传输主要涉及几种数据传输方式:

  • 外设到内存
  • 内存到外设
  • 内存到内存
  • 外设到外设

(3)DMA传输参数

数据传输的基本参数有:

1.传输数据的起始地址
2.传输数据的目标位置
3.传输数据的大小
4.传输数据的传输模式

用户配置好这些传输参数后就可以进行DMA传输了,此时DMA控制器将会启动数据传输,当数据传输量为0时标志着DMA数据传输结束

(4)DMA主要特征

每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过软件来配置;

  • 在同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),优先权设置相等时由硬件决定(请求0优先于请求1,依此类推);
  • 独立数据源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐;
  • 支持循环的缓冲器管理;
  • 每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求;
  • 存储器和存储器间的传输、外设和存储器、存储器和外设之间的传输;
  • 闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标;
  • 可编程的数据传输数目:最大为65535。

(5)DMA工作系统框图

stm32 hal dma通讯,stm32,单片机,arm
通过上面的系统框图可以看到DMA与外设有一个DMA Request 通道,通过这个通道可以独立在DMA和外设之间进行数据传输

二、串口DMA通信程序设计

1.设置RCC,设置高速外部时钟HSE 选择外部时钟源stm32 hal dma通讯,stm32,单片机,arm

2.设置串口
stm32 hal dma通讯,stm32,单片机,arm
使能中断:
stm32 hal dma通讯,stm32,单片机,arm

3.DMA设置

1.点击DMASettings 点击 Add 添加通道
2.选择USART_RX USART_TX 传输速率设置为中速
3.DMA传输模式为正常模式
4.DMA内存地址自增,每次增加一个Byte(字节)
stm32 hal dma通讯,stm32,单片机,arm

4.时钟源设置

1.选择外部时钟HSE 8MHz
2.PLL锁相环倍频9倍
3.系统时钟来源选择为PLL
4.设置APB1分频器为 /2
5.使能CSS监视时钟
stm32 hal dma通讯,stm32,单片机,arm

接下来就是配置项目文件了,只需要按照常规配法就行了,这里就不详细讲了

三、使用KEIL5完成简单DMA数据发送

1.打开上述创建的HAL库项目,定义数据缓存区以及数据长度宏定义

#define LENGTH 20
uint8_t message[LENGTH] = "hello windows\n";

2.在对应main函数while(1)中输入以下代码:

HAL_UART_Transmit_DMA(&huart1, (uint8_t *)message, LENGTH);//使用DMA发送数据
HAL_Delay(1000);

3.烧录到芯片中,查看运行结果:

stm32 hal dma通讯,stm32,单片机,arm

4.总结

对于更深入的DMA了解,我们需要查看官方STM32手册对DMA中断原理,通道,映像,模式,控制等模块进行学习,本章只介绍简单使用DMA,以及DMA简单定义;文章来源地址https://www.toymoban.com/news/detail-650364.html

到了这里,关于【STM32】HAL库 STM32CubeMX——DMA (串口DMA发送接收)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • STM32F4 HAL库使用DMA进行ADC采样实时发送波形到串口显示(包含傅里叶变换)

    按下 STM32F4 的 KEY0 按键,通过外部中断的方式对按键进行检测,然后进行一次固定点数的 DMA ADC 采集,采集完成后在 DMA 的中断发送采集到的数据,然后清空数据区准备下一次的按键中断。电脑接受到串口数据后对数据进行简单处理和傅里叶变化,然后实时显示在电脑上。 开

    2024年02月14日
    浏览(40)
  • STM32CubeMx实现ADC多通道+DMA读取(HAL库)

    目录 一、实验结果  二、STM32CubeMx配置 三、main.c测试代码 1、RCC配置 (外部晶振选择8MHz。设置相应的分频器M=8,倍频器倍频系数N=336,分频器分频系数P=2,那么主PLL生成的第一个输出高速时钟PLLP为:168MHz)  2、SYS配置  3、ADC(规则)通道配置(独立模式,预分频4分频,1

    2024年02月15日
    浏览(50)
  • STM32HAL ADC+TIM+DMA采集交流信号 基于cubemx

    本文主要讲解定时器触发ADC去采集交流信号,DMA把数据搬移到内存。 所需工具: 开发板:STM32F103C8T6 STM32CubeMX IDE: Keil-MDK 相关文章: STM32HAL ADC+TIM+DMA采集交流信号 基于cubemx(二) STM32cubemx ADC+TIM+DMA超频采样 ADC+TIM+DMA采集交流信号是电赛中使用范围最为广泛的一个技术。这个模

    2024年02月03日
    浏览(49)
  • STM32—HAL库中断/DMA控制和完成串口通信

    目录 一、解决的问题 二、串口通讯协议和RS-232的介绍以及USB/TTL转232模块的工作原理   1、 串口协议和RS-232标准:  (1)串口协议: (2)RS-232 标准:   2、RS232电平与TTL电平的区别   3、USB/TTL转232“模块(CH340芯片为例)  (1)基本原理:  (2)CH340模块介绍: ​三、搭

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

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

    2024年02月08日
    浏览(54)
  • 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)
  • STM32CubeMx配置ADC(多通道采集+DMA读取数据)(HAL库开发)

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

    2023年04月08日
    浏览(73)
  • STM32 LL库 串口DMA发送接收配置教程

    本文详细介绍了如何在STM32中使用LL库进行串口DMA发送和接收的配置,包括STM32CubeMX的配置、代码初始化、发送功能和接收功能。通过本教程,您将学会如何正确配置串口DMA,并实现高效的数据传输。

    2024年02月10日
    浏览(86)
  • STM32--HAl库串口接收与发送

            在此之前,我们已经学习了单片机串口通信的原理(江科协),再写一遍我个人认知:世界上任何两个事物如果要进行交流的话,那必然需要两个东西进行通信的,就像两个人之间,两个国人之间用普通话就能够清楚的交流,但是让我们中国人和外国人去交流可能会

    2024年04月10日
    浏览(51)
  • STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库)

    12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部 信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右 对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定

    2024年02月06日
    浏览(80)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包