版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2.7.9 DMA方式的串口通信本节内容DMA方式的串口通信1 DMA概述基本概念UART直接存储器访问
(DMA):用于在外设与存储器之间以及存储器与存储器之间进行高速数据传输。DMA传输过程的初始化和启动由CPU完成,传输过程由DMA控制器来执行,无需CPU参与,从而节省CPU资源,提高利用率。DMA的概念DMA数据传输的四个要素:① 传输源 :DMA数据传输的来源② 传输目标:DMA数据传输的目的③ 传输数量:DMA传输数据的数量④ 触发信号:启动一次DMA数据传输的动作STM32F407微控制器具备两个DMA控制器:DMA1和DMA2,每个控制器有8个数据流,每个数据流可以映射到8个通道(或请求);每一个DMA控制器用于管理一个或多个外设的存储器访问请求,并通过总线仲裁器来协调各个DMA请求的优先级;数据流(stream)是用于连接传输源和传输目标的数据通路,每个数据流可以配置为不同的传输源和传输目标,这些传输源和传输目标称为通道(Channel);具备16字节的FIFO。使能FIFO功能后,源数据先送入FIFO,达到FIFO的触发阈值后,再传送到目标地址。STM32的DMA控制器特点DMA控制器UART
DMAIDELDMA框图每个数据流可以映射到8个通道外设到存储器存储器到外设存储器到存储器通道选择数据流是数据传输的通路,可以完成以下传输:外设端口存储器端口数据传输方式DMA数据传输方式传输结束后(即要传输数据的数量达到零),将不再产生DMA操作。若开始新的DMA传输,需在关闭DMA通道情况下,重新启动DMA传输。可用于处理环形缓冲区和连续数据流(例如ADC扫描模式)。当激活循环模式后,每轮传输结束时,要传输的数据数量将自动用设置的初始值进行加载,
并继续响应DMA请求。普通模式循环模式UART
DMAIDEL2 DMA方式的接口函数--
南昌大学“卓越”辅导员培养工程建设1 串口DMA方式发送函数:HAL_UART_Transmit_DMA函数原型HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart,uint8_t*pData,uint16_tSize)功能描述在DMA方式下发送一定数量的数据入口参数1huart:串口句柄的地址入口参数2pData:待发送数据的首地址入口参数3Size:待发送数据的个数返回值HAL状态值:HAL_OK表示发送成功;HAL_ERROR表示参数错误;HAL_BUSY表示串口被占用注意事项该函数将启动DMA方式的串口数据发送完成指定数量的数据发送后,可以触发DMA中断,在中断中将调用发送中断回调函数HAL_UART_TxCpltCallback进行后续处理该函数由用户调用--
南昌大学“卓越”辅导员培养工程建设2 串口DMA方式接收函数:HAL_UART_Receive_DMA函数原型HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart,uint8_t*pData,uint16_t
Size)功能描述在DMA方式下接收一定数量的数据入口参数1huart:串口句柄的地址入口参数2pData:待接收数据的首地址入口参数3Size:待接收数据的个数返回值HAL状态值:HAL_OK表示接收成功;HAL_ERROR表示参数错误;HAL_BUSY表示串口被占用注意事项该函数将启动DMA方式的串口数据接收完成指定数量的数据接收后,可以触发DMA中断,在中断中将调用接收中断回调函数HAL_UART_RxCpltCallback进行后续处理该函数由用户调用接口函数:
HAL_DMA_GET_COUNTER函数原型
HAL_DMA_GET_COUNTER(
HANDLE
)功能描述获取DMA数据流中未传输数据的个数参数
HANDLE
:串口句柄的地址返回值无注意事项该函数是宏函数,进行宏替换,不发生函数调用该函数需要由用户调用,用于获取未传输数据的个数3 获取未传输数据个数函数:
HAL_DMA_GET_COUNTERUART
DMAIDEL2.7.9 挑战任务:不定长数据的收发空闲中断空闲中断的特点在一帧数据传输结束后,通信线路将会维持高电平,这个状态称为空闲状态;当CPU检测到通信线路处于空闲状态时,空闲状态标志IDLE将由硬件置1。如果串口控制寄存器CR1中的IDLEIE位为1,将会触发空闲中断(
IDLE中断);由于空闲标志是在一帧数据传输完成后才置位,在有效数据传输过程中不会置位,因此借助空闲中断,可以实现不定长数据的收发。UART
DMAIDEL时序图空闲中断时序图假设一帧数据由2个字符构成,分别是0xaa、0x55,传输的时序图如下:从图中可以看到,在发送该帧数据之前和之后,数据线为高电平,处于IDLE状态。在该帧有效数据发送过程中,即0xaa字节与0x55字节之间,没有IDLE状态出现,这样利用IDLE状态就可以判断不定长数据的发送结束。UART
DMAIDEL挑战任务01任务目标实现不定长数据的收发02任务内容利用串口调试助手,从PC上发送任意长度的字符串到STM32F4开发板串口1,开发板收到字符串后原样发回到PC。不定长数据的收发UART
DMAIDEL设计思路设计思路使能IDLE中断,在串口1的中断服务程序USART1_IRQHandler中添加对IDLE中断的判断,该函数位于stm32f4xx_it.c文件;设置传输模式为普通模式,启动DMA传输。串口一旦接收到数据,则触发DMA操作,将数据存放到用户定义的接收缓冲区;当一帧数据发送完成后,线路处于IDLE状态,将触发IDLE中断,设置数据接收完成标志;主程序检测到接收完成标志置位后,①清除该标志。②停止DMA传输。③计算MCU实际收到的字符数。④将接收的一帧数据以轮询方式原样发回到PC。⑤清除数据缓冲区,接收字符计数器清零。⑥重新启动DMA传输函数。UART
DMAIDEL串口1的DMA配置分别选择RX和TX进行设置点击两次Add按钮,分别添加串口接收和发送的DMA数据流12DMA数据流、传输方向和优先级自动配置设置DMA请求参数传输模式:普通模式地址递增:外设不递增,存储器递增FIFO使用:不使能数据宽度:字节设置串口接收的DMA参数设置串口发送的DMA参数串口发送的DMA参数与串口接收的DMA参数一致串口中断设置使能串口中断及DMA中断DMA数据流的中断使能由CubeMX自动勾选使能串口1的中断中断优先级使用默认值UART
DMAIDELstm32f4xx_it.c文件中添加的代码如程序清单如图所示。在main.c中添加如下代码。用户应用代码任务验证
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Unit 1 Time to Relax (Period 4)Section B (1a-1e)学习任务单2025-2026学年人教版英语八年级下册
- 2026周口物流面试题及答案
- 2026年一建市政实务考前易错强化卷试卷及答案
- 2026年一建民航实务考前摸底测评试卷及答案
- 2026年一建矿业实务考前全真冲刺模拟试卷及答案
- 2026年一建经济考前综合训练试卷及答案
- 2026调试维修面试题及答案
- 2026钢琴方面试题及答案
- 2026公关媒介面试题目及答案
- 2026会议工作面试题目及答案
- 东方财富社招测评题库
- 雨课堂学堂在线学堂云《内科学(白城医学高等专科学校)》单元测试考核答案
- 2026年高空作业车租赁合同
- 超市卫生检查奖惩制度
- 2026年舞台展台搭建安全责任书
- 新员工内部轮岗制度
- 基底节出血患者的活动能力训练
- 2025~2026学年吉林省吉林市第九中学七年级上学期期末数学试卷
- 26年云南会计专升本试题及答案
- 2026年智能光子脱毛仪项目可行性研究报告
- 冷库管理制度及流程规范
评论
0/150
提交评论