【STM32+HAL+Proteus】系列学习教程---串口USART(DMA 方式)定长,不定长收发。

news2024/9/23 8:28:15

实现目标

1、利用UART实现上位机PC与下位机开发板之间的数据通信

2、学会STM32CubeMX软件关于UART的DMA模式配置

3、具体目标:1、实现串口定长收发数据通信;2、串口不定长收发数据通信


一、DMA简介

1、什么是DMA?

DMA(Direct Memory Access)直接内存访问,是一种数据传输方法。利用DMA控制器,将数据直接从一个地址空间复制到另一个地址空间。。

优点:在创建完DMA通道后,它会在合适的时机自动将数据转移,不占用CPU进行转移,且在转移完成后触发一次中断表明转移完成。

2、STM32F103的DMA

        STM32F1系列的MCU有两个DMA控制器(DMA2只存在于大容量产品中),DMA1有7个通道,DMA2有5个通道,每个通道专门用来管理来自于一个或者多个外设对存储器的访问请求。还有一个仲裁器来协调各个DMA请求的优先权。

二、原理图设计

三、STM32CubeMX 配置

1.USART1  DMA模式配置

USART1的参数配置如下,波特率115200,传输数据长度为8 Bit,奇偶检验无,停止位1.其他参数默认

使能USART1中断,串口使用DMA方式必须开启中断,否则程序发送一次数据后,不能判断DMA传输是否完成,串口会一直处于busy状态。

点击Add, 增加USART1_RX和USART1_TX,参数默认。

DMA参数配置:

(1)发送选择 DMA1 Stream 4通道,方向从存储器到外设,优先级为低。

(2)接收选择 DMA1 Stream 5通道,方向从外设到存储器。

(3)mode设置:Normal: 表单次传输,传输一次后终止传输; Circular:表示循环传输,传输完成后又重新开始继续传输,不断循环永不停止。

(4)Data Width:串口数据发送寄存器只能存储8bit,每次发送一个字节,所以数据长度选择Byte。

四、程序设计1(串口定长收发数据通信

1、定义一个数组

/* USER CODE BEGIN PM */

uint8_t Txbuf[] = "好好学习STM32+HAL+PROTUES 系列教程\r\n";
unsigned char rx[16];

/* USER CODE END PM */

2、开机串口DMA发送Txbuf[]数据

  /* USER CODE BEGIN 2 */
    HAL_UART_Transmit_DMA(&huart1, (uint8_t *)Txbuf, sizeof(Txbuf));
    HAL_UART_Receive_DMA(&huart1,rx,sizeof(rx));	
    HAL_Delay(500);	
  /* USER CODE END 2 */

3、接收回调函数,将接收到的数据反发回到上位机

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart == &huart1){ //  将上位机发来的数据完整的返回回去
		HAL_UART_Transmit_DMA(&huart1,rx,sizeof(rx));
		HAL_UART_Receive_DMA(&huart1,rx,sizeof(rx));
	}
}

4、实验现象

说明:由于用16进制显示模式,开机汉字全部显示为16进制。功能:上位机输入定长度(16个字节)的 数字,都能正确的返回显示。

五、程序设计2(串口不定长收发数据通信

1、定义一个数组

/* USER CODE BEGIN PM */

uint8_t Txbuf[] = "好好学习STM32+HAL+PROTUES 系列教程\r\n";
unsigned char rx[16];

/* USER CODE END PM */

2、开机串口DMA发送Txbuf[]数据

  /* USER CODE BEGIN 2 */
		HAL_UART_Transmit_DMA(&huart1, (uint8_t *)Txbuf, sizeof(Txbuf));
		HAL_UARTEx_ReceiveToIdle_DMA(&huart1,rx,sizeof(rx));
		HAL_Delay(500);	
  /* USER CODE END 2 */

3、在usart.h中,添加extern DMA_HandleTypeDef hdma_usart1_rx;

//在usart.h中

/* USER CODE BEGIN Includes */
	 
extern DMA_HandleTypeDef hdma_usart1_rx;
	
/* USER CODE END Includes */

4、接收回调函数,将接收到的数据反发回到上位机

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
		if(huart == &huart1) //  将上位机发来的数据完整的返回回去
		{ 

			HAL_UART_Transmit_DMA(&huart1,rx,Size);
			HAL_UARTEx_ReceiveToIdle_DMA(&huart1,rx,sizeof(rx));
			__HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);			
	  }
}

5、实验现象

说明:由于用16进制显示模式,开机汉字全部显示为16进制。功能:上位机输入不定长度的 数字,都能正确的返回显示。

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

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

相关文章

基于YOLOV5 的ROS2功能包——快速实现目标识别功能

项目链接: yolov5_ros2 运行结果如下:实时显示识别结果 一、下载功能包并运行 1. 安装依赖 首先,确保您已经更新了系统并且安装了必要的依赖。以下是一些安装步骤,其中$ROS_DISTRO 是您的ROS2发行版(例如&#xff1…

交通工程绪论

一、交通工程 交通工程学定义交通工程学研究的内容交通工程学的产生与发展交通工程学在道路运输管理中的作用 1. 交通工程学定义 早在20世纪30年代,美国交通工程师协会(American Institute of Traffic Engineers)给交通工程学(Traffic Engineering)下了一个定义&a…

去雾笔记-Pixel Shuffle,逆Pixel Shuffle,棋盘效应,转置卷积

文章目录 1.Pixel Shuffle2.Inverse Pixel Shuffle3.棋盘效应4.转置卷积5.宽激活块6.PSPNet7.反射填充层(Reflective Padding Layer)8.tanh层 1.Pixel Shuffle Pixel Shuffle是一种用于图像超分辨率的技术,它通过重新排列图像的像素来增加图…

Django模型的属性与方法

本节介绍Django模型的属性和方法,以及如何重写之前定义的模型方法等内容。 3.5.1 模型属性 Django模型中最重要的属性就是Manager,它是Django模型和数据库查询操作之间的接口,并且被用作从数据库当中获取实例的途径。如果Django模型中没有…

python基础知识一(注释、变量以及类型、类型转换)

目录 注释: 注释分为两种: 注释的作用: 注释的使用原则: 编写一段代码,对比一下有无注释的区别,以冒泡排序为例 1. 无注释版: 感官上是不是有点不清晰? 2. 有注释版&#xff1…

绝地求生:【数据流】工资杯决赛,天霸161分夺得冠军,Aixleft战神37杀

数据制作,整理不易,求支持,点赞,收藏,充电哟! 如有错误,请在评论区指出,感谢各位~ 积分: 战队数据: 排名前3:Tian(161) / NH(145) / PeRo(137) …

linux入门到精通-第十一章-进程间通信(无名管道)

目录 参考概念**进程通信的目的:**Linux 操作系统支持的主要进程间通信的通信机制: 无名管道概述pipe函数建立无名管道父子进程使用无名管道通信 管道读写特点设置非阻塞的方法查看管道缓冲区命令查看管道缓冲区函数 参考 视频教程 概念 进程是一个独立的资源分配…

Oracle进阶(2)——物化视图案例延伸以及序列、同义词

一、物化视图 物化视图(Materialized View)是 Oracle 数据库中的一个对象,它是一个预先计算和存储的查询结果集,类似于视图,但与视图不同的是,物化视图会将查询结果保存在物理存储中,而不是动态…

web前端学习笔记1

前端学习笔记 1. 走进HTML 1.1 什么是HTML 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。您可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上,由浏览器来解析。HTML文档的后缀名 .html.htm以上两种后缀名没有区别…

给sample_gpt加上,路的选择

灵感 鲁迅说世界上本没有路走的人多了便有了路 如何将灵感转为数学表达 首先假设a到b点有3条路吧,假设你只能选择一条,那意思就是你在训练的时候,只要这条路的值增大别人就会减少。 那这个思思不就是,3条路的值加在一起有个约束…

VMP加壳工具最新 VMProtect Ultimate v3.8.4 Build1754

网盘下载 VMProtect 软件保护功能 支持的文件和格式 VMProtect 支持32位和64位可执行文件,动态加载库和驱动程序。这包括屏保、Active-X 组件、BPL 库和其他 PE 格式的文件。受保护的文件基本上可在任何版本的 Windows 系统上运行,甚至是较早的 Windows …

仿真数据和实测数据的时频变换

目录 1.仿真数据2.实测数据3.地震信号数据4.语音数据 1.仿真数据 2.实测数据 3.地震信号数据 4.语音数据

springboot整合mybatis-puls登陆注册

目录 创建springboot项目 目录结构: 启动类 测试类 idea建表 pom文件 编写yml文件 qq邮箱设置 登陆注册代码 编写持久层(Dao) 注册代码 业务层 业务实现类 mapper 控制层 前端代码 注册页面 邮件正文: 登录代码 控制层 业务层&#…

力扣HOT100 - 101. 对称二叉树

解题思路: class Solution {public boolean isSymmetric(TreeNode root) {if(root null) return true;return recur(root.left, root.right);}boolean recur(TreeNode L, TreeNode R) {if (L null && R null) return true;if (L null || R null || L.…

【数学】深度学习中的概率基础知识记录

基于 Deep Learning (2017, MIT) 书总结了必要的概率知识 原blog 以及用到的Ipython notebook 文章目录 1 概述2 知识2.1 离散变量和概率质量函数(PMF)2.2 连续变量和概率密度函数(PDF)2.3 边缘概率2.4 条件概率2.5 条件概率的链式…

项目实战 | 责任链模式 (下)

案例二:工作流,费用报销审核流程 同事小贾最近刚出差回来,她迫不及待的就提交了费用报销的流程。根据金额不同,分为以下几种审核流程。报销金额低于1000元,三级部门管理者审批即可,1000到5000元除了三级部…

Docker 的基本管理

一. 云的相关知识 1. 关于云 云端服务器都有哪些提供商: 国内: 阿里云(Alibaba Cloud): 提供ECS(Elastic Compute Service)弹性计算服务,包括通用型、计算型、内存型等多种实例…

go的编译以及运行时环境

开篇 很多语言都有自己的运行时环境,go自然也不例外,那么今天我们就来讲讲go语言的运行时环境! 不同语言的运行时环境对比 我们都知道Java的运行时环境是jvm ,javascript的运行时环境是浏览器内核 Java -->jvm javascript…

modelsim波形高度异常,值为X

一、问题 波形高度异常,忽高忽低,正常波形高电平和低电平是统一高度的 timescale 1ns/1nsmodule key_test_tb();//parameter define parameter CLK_PERIOD 20; parameter CNT_MAX 25d25; //仅用于仿真,对应 500nsreg sys_clk; //周期 20ns reg d; wir…

AJAX——Promise-链式调用

1.Promise链式调用 概念:依靠then()方法会返回一个新生成的Promise对象特性,继续串联下一环任务,知道结束 细节:then()回调函数中的返回值,会影响新生成的Promise对象最终状态和结果 好处:通过链式调用&…