HAL库 STM32CubeMX实现串口DMA发送接收

本文详细介绍了如何使用STM32CubeMX配置串口DMA,包括DMA基本概念、STM32的DMA资源、配置工程的步骤,并展示了在Keil中配置代码的过程,最终实现串口DMA的发送和接收。
摘要由CSDN通过智能技术生成

一、环境配置

软件:STM32CubeMX:6.6.1
Keil 5.31
mcuisp
硬件:STM32F103C8T6

二、DMA的基本介绍

DMA,全称Direct Memory Access,即直接存储器访问。
DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
我们知道CPU有转移数据、计算、控制程序转移等很多功能,系统运作的核心就是CPU,CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据。因此:转移数据(尤其是转移大量数据)是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,直接让数据由A拷贝到B 不经过CPU的处理,
在这里插入图片描述
DMA就是基于以上设想设计的,它的作用就是解决大量数据转移过度消耗CPU资源的问题。有了DMA使CPU更专注于更加实用的操作–计算、控制等。
DMA定义:
DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。
DMA传输方式:
DMA的作用就是实现数据的直接传输,而去掉了传统数据传输需要CPU寄存器参与的环节,主要涉及四种情况的数据传输,但本质上是一样的,都是从内存的某一区域传输到内存的另一区域(外设的数据寄存器本质上就是内存的一个存储单元)。四种情况的数据传输如下:

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

DMA传输参数
我们知道,数据传输,首先需要的是1 数据的源地址 2 数据传输位置的目标地址 ,3 传递数据多少的数据传输量 ,4 进行多少次传输的传输模式 DMA所需要的核心参数,便是这四个
当用户将参数设置好,主要涉及源地址、目标地址、传输数据量这三个,DMA控制器就会启动数据传输,当剩余传输数据量为0时 达到传输终点,结束DMA传输 ,当然,DMA 还有循环传输模式 当到达传输终点时会重新启动DMA传输。
也就是说只要剩余传输数据量不是0,而且DMA是启动状态,那么就会发生数据传输。
DMA的主要特征:

  • 每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过软件来配置;
  • 在同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),优先权设置相等时由硬件决定(请求0优先于请求1,依此类推);
  • 独立数据源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐;
  • 支持循环的缓冲器管理;
  • 每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求;
  • 存储器和存储器间的传输、外设和存储器、存储器和外设之间的传输;
  • 闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标;
  • 可编程的数据传输数目:最大为65535。
HAL库是ST公司提供的一套针对STM32系列微控制器的软件库,可以帮助开发者更快速地完成嵌入式开发任务。而STM32CubeMX是ST公司提供的一款图形化配置工具,用于生成STM32微控制器的初始化代码。 要实现485通信,首先需要使用STM32CubeMX进行初始化配置。打开STM32CubeMX工具,选择相应的STM32微控制器型号,然后点击"Pinout & Configuration"来配置引脚。 在引脚配置界面,选择一个USART串口作为485通信的接口,并将对应的引脚配置为接收发送引脚。在Mode下拉菜单中选择“Asynchronous”模式,然后设置波特率和校验位等通信参数。 当完成引脚配置后,点击"Project"选项卡,生成对应的工程代码。在工程代码中可以找到一个名为"usart.c"的文件,这是HAL库提供的USART驱动文件。 在"usart.c"文件中,可以找到一个名为"HAL_UART_Transmit"的函数,该函数用于发送数据。通过调用这个函数,将要发送的数据传入其中即可实现数据的发送。 同样地,在该文件中可以找到一个名为"HAL_UART_Receive"的函数,该函数用于接收数据。通过调用这个函数,将接收到的数据保存在指定的缓冲区中,即可实现数据的接收。 此外,在"Huart"结构体中,还可以找到一个名为"HDMA"的成员变量,该变量用于配置DMA传输功能。如果需要使用DMA传输数据,可以配置相应的DMA通道和缓冲区,在发送接收数据时使用DMA进行数据传输,可以提高传输效率。 综上所述,使用HAL库STM32CubeMX,我们可以很方便地实现485通信。只需进行引脚配置和对HAL库提供的函数进行调用,即可完成数据的发送接收操作。当然,具体的实现细节还需要根据具体的需求来进行配置和编写代码。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值