DMA实验3-外设到内存搬运

news2024/9/23 5:20:01
实验要求
 
使用 DMA 的方式将串口接收缓存寄存器的值搬运到内存中,同时闪烁 LED1
CubeMX 配置
DMA 配置:

 

串口中断配置

 

 代码实现

如何判断串口接收是否完成?如何知道串口收到数据的长度?
  • 使用串口空闲中断IDLE)!
  • 串口空闲时,触发空闲中断;
空闲中断标志位由硬件置 1 ,软件清零
利用串口空闲中断,可以用如下流程实现 DMA 控制的任意长数据接收:
1. 使能 IDLE 空闲中断;
2. 使能 DMA 接收中断;
3. 收到串口接收中断, DMA 不断传输数据到缓冲区;
4. 一帧数据接收完毕,串口暂时空闲,触发串口空闲中断;
5. 在中断服务函数中,清除中断标志位,关闭 DMA 传输(防止干扰);
6. 计算刚才收到了多少个字节的数据。
7. 处理缓冲区数据,开启 DMA 传输,开始下一帧接收。  
有三个文件需要修改
main.c
  1. rcvBuf:用于存储接收到数据的缓冲区数组。
  2. rcvLen:记录接收到的一帧数据的长度。
  3. __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE):启用UART1的IDLE(空闲)中断,用于检测接收完成。
  4. HAL_UART_Receive_DMA(&huart1, rcvBuf, 100):通过DMA方式使能UART1的接收中断,将接收到的数据存储到rcvBuf中,每次接收100个字节。
  5. while (1):一个无限循环,在循环体内通过定时器操作,每300毫秒切换GPIOB的引脚状态,用于示例,可以理解为一个简单的心跳或指示灯。while(1) 循环内的点灯操作主要是为了说明在数据通过DMA传输的同时,CPU仍然可以继续执行其他任务。点灯操作是一个简单的示例,用于演示在数据传输的间隙里,CPU可以执行其他任务而不会阻塞。在实际应用中,这个循环内可能包含更复杂的逻辑、任务或者状态管理。
main.h

 

stm32f1xx_it.c

 

  1. USART1_IRQHandler:UART1的中断服务函数。
  2. __HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE) == SET:检查IDLE标志位是否被置位,即检测是否接收完成。
  3. __HAL_UART_CLEAR_IDLEFLAG(&huart1):清除IDLE标志位。
  4. HAL_UART_DMAStop(&huart1):停止DMA传输,防止DMA传输干扰。
  5. __HAL_DMA_GET_COUNTER(&hdma_usart1_rx):获取DMA传输的计数器信息,即还有多少数据未被传输。
  6. rcvLen = BUF_SIZE - temp:计算接收到的数据长度。
  7. HAL_UART_Transmit_DMA(&huart1, rcvBuf, rcvLen):通过DMA发送接收到的数据。
  8. HAL_UART_Receive_DMA(&huart1, rcvBuf, BUF_SIZE):重新启动DMA接收,准备接收下一帧数据。

这段代码实现了当UART1接收到一帧完整的数据后,通过DMA将接收到的数据传输到缓冲区,并进行相应的处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1325070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023优秀开源项目获选榜名单(开放原子开源基金会)|JeecgBoot 成功入选

JeecgBoot 是一个开源的企业级低代码开发平台,它成功入选2023年度生态开源项目,这是对其十年坚持开源的认可。作为一个开源项目,JeecgBoot 在过去的十年里一直秉承着开放、共享、协作的理念,不断推动着开源社区的发展。 2023年开放…

华为配置IPv4静态路由与静态BFD联动示例

组网需求 如图1所示,SwitchA通过SwitchB和NMS跨网段相连。在SwitchA上通过静态路由与NMS进行正常通信。在SwitchA和SwitchB之间实现毫秒级故障感知,提高收敛速度 配置思路 采用如下思路配置IPv4静态路由与静态BFD联动: 在SwitchA和SwitchB上…

LVS+keepalived小白都看得懂也不来看?

1 高可用集群 1.1 一个合格的集群应该具备的特性 1.负载均衡 LVS Nginx HAProxy F5 2.健康检查(使得调度器检查节点状态是否可以正常运行,调度器(负载均衡器)也要做健康检查)for调度器/节点服务器 keeplived hearb…

aws配置以及下载 spaceNet6 数据集

一:注册亚马逊账号 注册的时候,唯一需要注意的是信用卡绑定,这个可以去淘宝买,搜索aws匿名卡。 注册完记得点击登录,记录一下自己的账户ID哦! 二:登录自己的aws账号 2.1 首先创建一个用户 首…

2023 英特尔On技术创新大会直播 |AI小模型更有性价比

前言: 今年是引爆AI的一年,从幼儿园的小朋友到80岁的老奶奶都认识AI,享受AI带来的便捷,都在向市场要智能,但AI的快速发展离不开底层硬件设施的革新。 英特尔是全球知名的半导体公司,专注于计算机处理器和芯…

FPGA模块——以太网芯片MDIO读写

FPGA模块——以太网MDIO读写 MDIO接口介绍MDIO接口代码(1)MDIO接口驱动代码(2)使用MDIO驱动的代码 MDIO接口介绍 MDIO是串行管理接口。MAC 和 PHY 芯片有一个配置接口,即 MDIO 接口,可以配置 PHY 芯片的工…

【实时绘画】krita + comfyUI 实时绘画 儿童海报

1:打开comfyUI 2: 打开krita 打开 cd custom_nodes 输入命令 安装控件 git clone https://github.com/Acly/comfyui-tooling-nodes.git

人工智能与底层架构:构建智能引擎的技术支柱

导言 人工智能与底层架构的交融塑造了智能系统的基石,是推动智能时代发展的关键动力,本文将深入研究人工智能在底层架构中的关键作用,以及它对智能引擎的技术支持,探讨人工智能在计算机底层架构中的作用,以及这一融合如…

第11章 《GUI》Page404 课堂作业,验证鼠标事件的坐标,GUI编程如何在控制台输出调试

首先选中工程,点击右键,选择Properties 在Build targets一栏里,将Type(下拉列表)改为Console application 然后在代码中写上调试输出语句,就可以了 从图中,我们可以看出,我们划线的起点非常接近窗口左上角(…

JWT身份验证

JWT知识点 jwt,全称 json web token, JSON Web 令牌是一种开放的行业标准 RFC 7519 方法,用于在两方之间安全地表示声明。 详情可以参考: hhttps://jwt.io/introduction 1. 数据结构 JSON Web Token由三部分组成,它们之间用圆点.进…

LLama Factory 安装部署实操记录(二)

1. 项目地址 GitHub - hiyouga/LLaMA-Factory: Easy-to-use LLM fine-tuning framework (LLaMA, BLOOM, Mistral, Baichuan, Qwen, ChatGLM)Easy-to-use LLM fine-tuning framework (LLaMA, BLOOM, Mistral, Baichuan, Qwen, ChatGLM) - GitHub - hiyouga/LLaMA-Factory: Easy…

javascript_0

Javascript是一种脚本语言&#xff0c;可以用来更改页面内容&#xff0c;控制多媒体&#xff0c;制作图像、动画等等 例 修改页面内容 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport…

LuaJava操作Java的方法

最近在学习lua&#xff0c;然后顺便看了下luaj&#xff0c;可能用的人比较少&#xff0c;网上关于luaj的文章较少&#xff0c;其中在网上找到这个博主的相关文章&#xff0c;很详细&#xff0c;对于要学习luaj的小伙伴可以两篇一起查看&#xff0c;本文在此基础上进行扩展。 …

DDPM详解

DDPM详解 参考 https://www.bilibili.com/video/BV1pa411u7G3/ 系列 DDPM 可以分为 Diffusion 和 Reverse 两个阶段。其中 Diffusion 阶段通过不断地对真实图片添加噪声&#xff0c;最终得到一张噪声图片。而 Reverse 阶段&#xff0c;模型需要学习预测出一张噪声图片中的噪声部…

LLM 和搜索引擎是一样的吗?

在这篇文章中&#xff0c;了解更多关于 AI 大型语言模型&#xff08;如 ChatGPT&#xff09;的潜力。了解他们如何彻底改变生产力&#xff0c;并探索他们与搜索引擎不断变化的关系。 像 ChatGPT 这样的 AI 大型语言模型 &#xff08;LLM&#xff09; 已经风靡全球&#xff0c;并…

【力扣】148.排序链表

148.排序链表 怎么说&#xff0c;这道题看上去挺简单的&#xff0c;但是要搞清楚的知识点那还真不少&#xff0c;刷题好痛苦&#xff0c;但是要刷&#xff01;嘿嘿~ 首先&#xff0c;要搞懂归并排序&#xff0c;然后是递归。这道题我刚开始想的是递归&#xff0c;但是题友说时…

macOS制作dmg包

macOS制作dmg包 准备&#xff1a;磁盘工具、以及要制作的软件&#xff0c;这里以Firefox为例 图片素材 背景图&#xff1a; 找到Firefox&#xff0c;点击显示简介&#xff0c;查看包的大小 打开磁盘工具 文件–>新建映像–>空白映像 填写信息&#xff0c;大小…

vue的语法模板与数据绑定的说明

vue的两大模板语法&#xff1a; 1.插值语法 2.指定语法 插值语法&#xff1a;{{}} 功能&#xff1a;用于解析标签体的内容 写法&#xff1a;{{xxx}},xxx是js表达式,且可以直接读取到data中的所有属性 指定语法&#xff1a; 功能:用于解析标签(包括:标签属性、标…

w13渗透测试实战之https账号密码捕抓

此次实验需要配合arp欺骗,不知道arp欺骗的&#xff0c;可以查看这篇w13渗透测试实战之ARP欺骗攻击&#xff08;ARP断网攻击&#xff09; 一、实验环境 攻击机&#xff1a;linux Kali 靶机&#xff1a;window 7 网络环境&#xff1a;虚拟机NAT 网关&#xff1a;192.168.89.2实…

百度侯震宇:AI原生与大模型将从三个层面重构云计算

12月20日&#xff0c;2023百度云智大会智算大会在北京举办&#xff0c;大会以「大模型重构云计算&#xff0c;Cloud for AI」为主题&#xff0c;深度聚焦大模型引发的云计算变革。 百度智能云表示&#xff0c;为满足大模型落地需求&#xff0c;正在基于「云智一体」战略重构…