【STM32 HAL库】DMA+串口

news2024/9/24 7:24:09

DMA 直接存储器访问

DMA传输,将数据从一个地址空间复制到另一个地址空间。-----“数据搬运工”。

DMA传输无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场,它是通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率,使得CPU的效率大大提高。

STM32F1 DMA框图

1. DMA请求

DMA传输数据,先向DMA控制器发送请求。

2.DMA通道

不同外设向DMA的不同通道发送请求。DMA1有7个通道,DMA2有5个通道。(DMA2仅存在大容量产品和互联型产品)

3.DMA优先级

多个DMA通道同时发来请求时,几句有先后响应处理的顺序问题,这个由仲裁器管理(优先级管理也分成软件阶段和硬件阶段)

DMA处理过程

  • image

1.外设想通过DMA发送数据,先发送请求。

2.DMA控制器收到请求后,给外设一个ack

3.外设收到ack后,释放请求

4.外设启动DMA数据传输,直到传输结束

DMA优先级:仲裁器管理DMA通道请求分为两个阶段:软件阶段、硬件阶段

第一阶段(软件阶段):每个通道的优先级可在DMA_CCRx寄存器中设置,由四个等级:最高、高、中、低优先级。

第二阶段(硬件阶段):如果两个请求有相同软件优先级,较低编号的通道有较高的优先级

(大容量芯片中,DMA1控制器拥有高于DMA2控制器的优先级)

DMA的HAL库函数

  • image

DMA-串口数据传输

1.使能DMA时钟

_HAL_RCC_DMA1_CLK_ENABLE

2.初始化DMA

HAL_DMA_Init函数初始化DMA相关参数

_HAL_LINKDMA函数连接DMA和外设

3.使能串口的DMA发送,启动传输

HAL_UART_Transmit_DMA

4.查询DMA传输状态

_HAL_DMA_GET_FLAG查询传输状态 _HAL_DMA_GET_COUNTER 获取当前传输剩余数据量

5.DMA中断使用

HAL_NVIC_EnableIRQ

HAL_NVIC_SetPriority

编写中断服务函数xxx_IRQHandler

实战

1.配置USART1以及相应中断

  • image

配置DMA

  • image

中断优先级(这里防止HAL_Delay卡死,详细请看 http://t.csdnimg.cn/NQhQV)

  • image

生成keil工程后

DMA+串口发送字符串

  • image

main函数 while(1)里

  • image

DMA+串口接收空闲中断

uart.h、uart.c当中定义接收数组、数据长度、接收完成标志

  • image

在uart.c当中的Init函数下添加使能IDLE中断

  • image

main.c当中封装接收和发送函数

  • image

中断stm32f4xx_it.c中调用 #include "usart.h"

  • image

stm32f4xx_it.c中编写中断服务函数

main.c中的while循环内编写发送以及接收标志清除

  • 实验现象
    • 打开串口,若没有接收到数据时,串口一直会每隔500ms发送SendBuff数组里的数据

    • 接收

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

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

相关文章

构建网络安全之盾:应对“微软蓝屏”教训的全面策略

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

【算法】一致性哈希

一、引言 在分布式系统中,数据存储和访问的均匀性、高可用性以及可扩展性一直是核心问题。一致性哈希算法(Consistent Hashing)是一种分布式算法,因其出色的分布式数据存储特性,被广泛应用于缓存、负载均衡、数据库分片…

【Django5】模板引擎

系列文章目录 第一章 Django使用的基础知识 第二章 setting.py文件的配置 第三章 路由的定义与使用 第四章 视图的定义与使用 第五章 二进制文件下载响应 第六章 Http请求&HttpRequest请求类 第七章 会话管理(Cookies&Session) 第八章 文件上传…

如何检查我的网站是否支持HTTPS

HTTPS是一种用于安全通信的协议,是HTTP的安全版本。HTTPS的主要作用在于为互联网上的数据传输提供安全性和隐私保护。通常是需要在网站安装部署SSL证书来实现网络数据加密传输,安全加密功能。 那么如果要检查你的网站是否支持HTTPS,可以看下…

培训第十一天(nfs与samba共享文件)

上午 1、环境准备 (1)yum源 (一个云仓库pepl仓库) [rootweb ~]# vim /etc/yum.repos.d/hh.repo [a]nameabaseurlfile:///mntgpgcheck0[rootweb ~]# vim /etc/fstab /dev/cdrom /mnt iso9660 defaults 0 0[rootweb ~]# mount -a[…

软件测试09 自动化测试技术(Selenium)

重点/难点 重点:理解自动化测试的原理及其流程难点:Selinum自动化测试工具的使用 目录 系统测试 什么是系统测试什么是功能测试什么是性能测试常见的性能指标有哪些 自动化测试概述 测试面临的问题 测试用例数量增多,工作量增大&#xff…

数据结构初阶(C语言)-二叉树

一,树的概念与结构 树是⼀种非线性的数据结构,它是由 n(n>0) 个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树,也就是说它是根朝上,而叶朝下的。 1.有⼀个特殊的结点&a…

ubuntu22安装拼音输入法

专栏总目录 一、安装命令: sudo apt update sudo apt install fcitx sudo apt install fcitx-pinyin 二、切换输入法

吴恩达深度学习笔记1 Neural Networks and Deep Learning

参考视频:(超爽中英!) 2024公认最好的【吴恩达深度学习】教程!附课件代码 Professionalization of Deep Learning_哔哩哔哩_bilibili Neural Networks and Deep Learning 1. 深度学习引言(Introduction to Deep Learning) 2. 神 经 网 络 的 编 程 基 础…

数据库安全:MySQL安全配置,MySQL安全基线检查加固

「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。 这一章节我们需…

【目标检测】Anaconda+PyTorch(GPU)+PyCharm(Yolo5)配置

前言 本文主要介绍在windows系统上的Anaconda、PyTorch、PyCharm、Yolov5关键步骤安装,为使用yolo所需的环境配置完善。同时也算是记录下我的配置流程,为以后用到的时候能笔记查阅。 Anaconda 软件安装 Anaconda官网:https://www.anaconda…

微软蓝屏事件:网络安全与系统稳定性的反思与前瞻

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

MFC:以消息为基础的事件驱动系统和消息映射机制

以消息为基础的事件驱动系统和消息映射机制 (1)消息 A.What(什么是消息) 本质是一个数据结构,用于应用程序不同部分之间进行通信和交互 typedef struct tagMSG {HWND hwnd; // 接收该消息的窗口句柄UINT message; // 消息标…

二分查找的实现

前提&#xff1a;数组是有序的 #include <stdio.h>//作用&#xff1a;利用二分查找法查找数据 //返回值&#xff1a;数据在数组中的索引 //找到了&#xff1a;真实索引 没找到&#xff1a;返回-1 int search(int arr[], int num, int len) {//查找范围int min 0;int …

DC系列靶场---DC 2靶场的渗透测试(一)

信息收集 Nmap扫描 nmap -sV -p- -sC -T4 172.30.1.141 域名解析 echo 172.30.1.141 dc-2 >> /etc/hosts 目录枚举 gobuster dir -u http://172.30.1.141 -w work/lab/CTF/ATT_CK_01/SecLists-master/Discovery/Web-Content/big.txt -x .php,.rar,.html,.zip -t 20 -b…

将代码转换为图表的 6大工具

文章目录 将代码转换为图表的 6大工具 - 前言1、[Diagrams](https://diagrams.mingrammer.com/) - Python2、[Go-Diagrams](https://github.com/blushft/go-diagrams) - Go3、[Mermaid ](https://mermaid.js.org/) - JavaScript4、[PlantUML](https://plantuml.com/zh/) - Java…

VUE之---slot插槽

什么是插槽 slot 【插槽】&#xff0c; 是 Vue 的内容分发机制&#xff0c; 组件内部的模板引擎使用slot 元素作为承载分发内容的出口。slot 是子组件的一个模板标签元素&#xff0c; 而这一个标签元素是否显示&#xff0c; 以及怎么显示是由父组件决定的。 VUE中slot【插槽】…

Druid【基础 01】是什么+主要特点+设计原则+架构+数据结构(简单入门Druid)

Druid入门 1. 是什么2. 主要特点3. 三个设计原则4. Architecture 架构5. 数据结构5.1 DataSource 结构5.2 Segment 结构 Druid 非中文官网&#xff0c;内容不少且介绍的挺详细的&#xff0c;需要英文阅读能力或者翻译工具进行辅助。 1. 是什么 先看看官网怎么说&#xff1a; A…

C#初级——基础语法

前言 学习Unity游戏编程开发会使用到两种语言&#xff0c;一种是C#&#xff0c;另一种是Javascript。有学习C语言基础和想学unity游戏开发的萌新一般都推荐学习C#基础编程&#xff0c;以此来快速上手unity的学习。 本次学习使用到的工具为&#xff1a;VS2022 环境安装 首先&a…

对比预测编码表示学习

对比预测编码表示学习 引言 文章主要提出如下几点&#xff1a;首先将高维数据压缩到更加紧凑的潜在嵌入&#xff08;latent embdding&#xff09;空间&#xff0c;在这个空间中条件预测更容易被建模。第二&#xff0c;在这个潜在空间中使用自回归模型&#xff0c;以对未来的多…