STM32 HAL库详解:DMA与串口通信的完美结合
创作时间:
作者:
@小白创作中心
STM32 HAL库详解:DMA与串口通信的完美结合
引用
CSDN
1.
https://blog.csdn.net/m0_73409202/article/details/140618237
STM32系列微控制器在嵌入式系统开发中占据重要地位,而DMA(直接存储器访问)技术则能显著提升数据传输效率。本文将详细介绍如何在STM32中使用HAL库实现DMA与串口的结合使用,包括理论原理、代码实现和实验验证,帮助开发者更好地掌握这一关键技术。
DMA技术简介
DMA(Direct Memory Access,直接存储器访问)是一种数据传输机制,能够将数据从一个地址空间复制到另一个地址空间,被誉为“数据搬运工”。与传统的CPU控制传输方式相比,DMA传输不需要CPU直接参与,也不涉及中断处理时的现场保留和恢复,而是通过硬件开辟一条RAM和IO设备之间的直接传输通道,从而大大提高CPU的效率。
STM32F1 DMA架构
DMA请求与通道
- DMA请求:数据传输前,外设向DMA控制器发送请求。
- DMA通道:不同外设通过不同的DMA通道发送请求。STM32F1的DMA1有7个通道,DMA2有5个通道(DMA2仅存在于大容量产品和互联型产品中)。
DMA优先级管理
当多个DMA通道同时发出请求时,仲裁器会根据优先级顺序进行处理。优先级管理分为两个阶段:
- 软件阶段:每个通道的优先级可以在DMA_CCRx寄存器中设置,分为最高、高、中、低四个等级。
- 硬件阶段:如果两个请求具有相同的软件优先级,较低编号的通道将获得较高优先级。在大容量芯片中,DMA1控制器的优先级高于DMA2控制器。
DMA与串口通信的HAL库函数
以下是使用HAL库实现DMA与串口通信的主要步骤:
使能DMA时钟
_HAL_RCC_DMA1_CLK_ENABLE
初始化DMA
- 使用
HAL_DMA_Init
函数初始化DMA相关参数 - 使用
_HAL_LINKDMA
函数连接DMA和外设
使能串口的DMA发送并启动传输
HAL_UART_Transmit_DMA
查询DMA传输状态
- 使用
_HAL_DMA_GET_FLAG
查询传输状态 - 使用
_HAL_DMA_GET_COUNTER
获取当前传输剩余数据量
- DMA中断使用
- 使用
HAL_NVIC_EnableIRQ
使能中断 - 使用
HAL_NVIC_SetPriority
设置中断优先级 - 编写中断服务函数
xxx_IRQHandler
实战演练
配置USART1及相应中断
配置DMA
中断优先级设置
生成Keil工程
DMA+串口发送字符串
在main
函数的while(1)
循环中实现字符串发送。
DMA+串口接收空闲中断
- 在
uart.h
和uart.c
中定义接收数组、数据长度和接收完成标志。 - 在
uart.c
的初始化函数中使能IDLE中断。 - 在
main.c
中封装接收和发送函数。 - 在
stm32f4xx_it.c
中包含usart.h
并编写中断服务函数。 - 在
main.c
的while
循环中实现发送以及接收标志清除。
实验现象
- 打开串口监视器,如果没有接收到数据,串口会每隔500ms发送
SendBuff
数组中的数据。 - 接收到数据时,会触发IDLE中断并进行相应处理。
通过本实验,读者可以掌握STM32中DMA与串口通信的结合使用方法,为更复杂的嵌入式系统开发打下坚实基础。
热门推荐
带状疱疹是什么?为什么会得这种病?医生说出实情
广西玉林优质特教服务撑起残障学生“希望天空”
对肝脏好的9种水果,这样吃效果最好!
甘南旅游景点大全——探索天赐的自然与人文奇迹
花叶病、黄化病的辨别和防治
美国本科大学数量及其影响深度解析
如何选择适合的APP开发技术
痛风的10个早期征兆及预防措施
《扬州慢》:一首歌里的扬州历史文化与慢生活
两会前夕,消费与科技板块轮动,低位补涨机会何在?
赛时达:LCD显示屏的尺寸是怎么算出来的?揭秘液晶屏幕尺寸计算方法!
劳动合同续签陷阱:第四次签约期限缩水,企业合规如何保障?
再生料PP:应用、发展和挑战
世界上第一条铁路的诞生与演变
基于STM32的温室大棚检测系统设计与实现
轨道上的革命:蒸汽机车重塑交通版图
小学教师资格证报考条件详解:学历背景、普通话水平等全方位要求
反复犯错是散户亏损累累的主因
基因、环境...多系统萎缩的病因终于有答案了!
关于诸葛亮的积累
什么是海龟交易策略?该策略存在哪些风险?
富二代极端犯罪:背景与对策
全面解析:领取失业保险所需资料及流程指南
网络安全真的值得学吗?就业方向与前景全解析
企业、公司、法人:理解三者的区别与联系
烧烤店油烟扰民?看宝山调解员如何破解→
孩子总坐第一排?小心"隐形饥饿"偷走身高
拉丁舞蹈恰恰原地换重心技巧
小林图解系统-四.内存管理 4.1 为什么要有虚拟内存?
提取血样程序违法致无罪释放,司法程序正义不容忽视