<STM32>STM32CubeMX-串口收发通信(DMA传输)(6)

news2025/2/27 5:29:29

<STM32>STM32CubeMX-串口收发通信(DMA传输)(6)

本节主要讲解串口DMA通信的功能,主要采用DMA接收数据的方式;
DMA、串口的详细解说可参考《STM32F4XXX中文参考手册》,资料有详细的讲解和说明,文档可跟作者联系索取,或百度搜索也可。

本系列教程同类文章包括以下:
1、<STM32>STM32CubeMX-基础工程创建及LED灯控制 (1)
2、<STM32>STM32CubeMX-工程创建及定时器控制LED灯闪烁(2)
3、<STM32>STM32CubeMX-串口收发通信(结束标识“\r\n”)(3)
4、<STM32>STM32CubeMX-ADC采集(软件触发单通道)(4)
5、<STM32>STM32CubeMX-CAN通信(扫描读取数据方式)(5)

话不多说,开始写代码吧。。

一、打开STM32CubeMX选择对应的芯片型号,后进入开发界面

1、双击“STM32CubeMX”软件打开,打开后如下图所示,选择红色框1;
在这里插入图片描述
2、在弹出的对话框输入芯片型号然后选择对应使用的芯片。
在这里插入图片描述
3、上述芯片选择完成后进入开发的配置流程。

二、配置

1、配置debug下载代码方式,这里作者选择SWD;
在这里插入图片描述
2、配置晶振
在这里插入图片描述
3、配置串口
在这里插入图片描述
在这里插入图片描述
设置一下DMA优先级
在这里插入图片描述
4、配置系统时钟
直接输入168,回车会自动配置。
在这里插入图片描述
5、配置工程输入路径
在这里插入图片描述
6、配置文件输出方式
在这里插入图片描述
7、点击“GENERATE CODE”输出工程。
打开工程。
在这里插入图片描述

三、补充代码

1、在usart.c添加变量

uint8_t USART1_RX_BUF[USART1_REC_LEN];     //接收缓冲,最大USART1_REC_LEN个字节.
uint16_t USART1_RX_STA=0;       //接收状态标记

在这里插入图片描述

添加中断启动配置:

__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);  //开启空闲中断
	HAL_UART_Receive_DMA(&huart1,USART1_RX_BUF,USART1_REC_LEN);  //开启DMA接收中断

在这里插入图片描述

2、在usart.h添加变量

#define USART1_REC_LEN  			200  	//定义最大接收字节数 200
extern uint8_t  USART1_RX_BUF[USART1_REC_LEN]; //接收缓冲,最大USART2_REC_LEN个字节.末字节为换行符 
extern uint16_t USART1_RX_STA;         		//接收状态标

在这里插入图片描述
3、stm32f4xx_it.c内容修改如下:
添加串口头文件:

#include "usart.h"

在这里插入图片描述
在串口中断添加接收数据处理:

uint8_t tmp_flag =__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE); //获取IDLE状态
  if((tmp_flag != RESET))//判断接收是否结束
	{ 
		 __HAL_UART_CLEAR_IDLEFLAG(&huart1);//清楚标志位
		 HAL_UART_DMAStop(&huart1); 
		 uint8_t temp=__HAL_DMA_GET_COUNTER(&hdma_usart1_rx);                 
		 USART1_RX_STA =USART1_REC_LEN-temp; //计算数据长度
			//USART2_RX_STA |= 0x8000; //标记接收完成
		 HAL_UART_Transmit_DMA(&huart1, USART1_RX_BUF,USART1_RX_STA);//发送数据
		 HAL_UART_Receive_DMA(&huart1,USART1_RX_BUF,USART1_REC_LEN);//开启DMA
	}

在这里插入图片描述

四、编译运行

1、选择下载代码方式
在这里插入图片描述
2、编译后下载
在这里插入图片描述
3、将串口1 PA9 PA10连接串口调试模块接PC,并打开串口调试助手。发送数据。
在这里插入图片描述

五、总结

通过串口调试助手将数据发给串口1,在串口1中将接收的数据返回给串口调试助手。测试串口通信的DMA收发数据正常。
与预期要求设定相符。

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

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

相关文章

【机器视觉------标定篇(二)】三点成圆算法(求相机旋转中心)

应用场景 机器视觉项目应用中,相机安装在机器人上,并且需要定位产品返回坐标偏差以及角度偏差。 与九点标定配合使用,实现精准角度补偿。 算法输入 不共线的三点坐标 A(X₁,Y₁) ,B(X₂,Y₂&…

关于加解密方法报错java.security.InvalidKeyException: Illegal key size

1、找到自己的jdk安装路径下去; 2、找到java.security查看是否存在#crypto.policyunlimited,如果有把该#号去掉,注释打开; 3、若java.security文件中不存在#crypto.policyunlimited,则应该去从官网下载jce策略文件(补丁…

springboot+vue旧物置换网站(完整源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的旧物置换网站。项目源码请联系风歌,文末附上联系信息 。 目前有各类成品java毕设,需要请看文末联系方式 。ja…

Python|基于粒子群和遗传算法的微电网优化调度

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Hadoop2.0伪分布式平台环境搭建

一、搭建环境的前提条件 环境:ubuntu-16.04 hadoop-2.6.0 jdk1.8.0_161。这里的环境不一定需要和我一样,基本版本差不多都ok的,所需安装包和压缩包自行下载即可。 因为这里是配置Hadoop的教程,配置Java以及安装VMware Tools就自行…

为什么2017年之后操作系统仍将扮演重要角色?

操作系统的历史虽然不像计算科学那么久远,但却也已经拥有相当可观的发展历程。大型机客户于上世纪五十年代末编写了第一批操作系统,这些系统直到数十年后的今天仍拥有相当的知名度——其中包括来自IBM公司的OS/360以及贝尔实验室打造的Unix。 在可预期的…

详解二叉搜索树 --- key模型和key/value模型

🍀作者:阿润菜菜 📖专栏:数据结构 一、认识二叉搜索树的key模型和key/value模型 key的模型是指每个节点只有一个键值,用于确定节点在树中的位置。节点的键值必须满足二叉搜索树的性质,即左子节点的键值小于…

SpringBoot 中使用Guava实现单机令牌桶限流

SpringBoot项目中如何对接口进行限流,有哪些常见的限流算法,如何优雅的进行限流。 首先就让我们来看看为什么需要对接口进行限流? 为什么要进行限流? 因为互联网系统通常都要面对大并发大流量的请求,在突发情况下&a…

你还还还没学会RabbitMQ?-----------RabbitMQ详解及快速入门(工作模式)

你像天外来物一样,求之不得(咳咳,指offer)🌹 文章目录什么是MQ?MQ的优势与劣势使用MQ需要满足的条件常见的MQ产品关于RabbitMQ生产者消费者工作模式订阅模式路由模式通配符模式什么是MQ? Messa…

机器学习——支持向量机的训练

目录 实践SVM分类 测试1-1​编辑 测试1-2 SVM核心 支持向量机函数 分类器SVC的主要属性: 分类器SVC的主要方法: 回归器SVR的主要属性: 支持向量机在鸢尾花分类中的应用 实践SVM分类 (1)参数C的选择: C为惩罚系数,也称为正则化系数: C越小模型越受限(即单个数据…

【设计模式】从Mybatis源码中学习到的10种设计模式

文章目录一、前言二、源码:学设计模式三、类型:创建型模式1. 工厂模式2. 单例模式3. 建造者模式四、类型:结构型模式1. 适配器模式2. 代理模式3. 组合模式4. 装饰器模式五、类型:行为型模式1. 模板模式2. 策略模式3. 迭代器模式六…

长江流域9省2市可视化(不展示业务信息水质及真实断面)

一、处理9省2市地理信息为geojson集成到项目 shp转geojson关键Java代码 /*** shp转换为Geojson* param shpPath* return*/ public static Map shape2Geojson(String shpPath,String filePath){Map map new HashMap();FeatureJSON fjson new FeatureJSON();try{StringBuffer …

阶段二33_面向对象高级_IO[转换流,对象流]

知识点: 1.转换流:InputStreamReader,OutputStreamWriter2.对象流:ObjectInputStream,ObjectOutputStream一.转换流 1.转换流原理图 2.转换流概述 转换流就是来进行字节流和字符流之间转换的 InputStreamReader是从…

p75 应急响应-数据库漏洞口令检索应急取证箱

数据来源 必须知识点: 第三方应用由于是选择性安装,如何做好信息收集和漏洞探针也是获取攻击者思路的重要操作, 除去本身漏洞外,提前预知或口令相关攻击也要进行筛选。排除三方应用攻击行为,自查漏洞分析攻击者思路&a…

表白墙(服务器版)

文章目录一、准备工作二、前后端交互后端前端三、数据库版本一、准备工作 我们之前实现过这样一个表白墙,具体前端代码参考 表白墙 这篇文章 但是我们之前写的这个表白墙有一些问题: 1.如果我们刷新页面/重新开启,之前的数据就不见了 2.我们…

python pyc文件

参考自 What are pyc files in Python 和Python什么情况下会生成pyc文件? - 知乎 加上了我自己的理解 官方文档有这么解释 A program doesnt run any faster when it is read from a ‘.pyc’ or ‘.pyo’ file than when it is read from a ‘.py’ file; the o…

C生万物 | 一探指针函数与函数指针的奥秘

文章目录一、指针函数1、定义2、示例二、函数指针1、概念理清2、如何调用函数指针&#xff1f;3、两道“有趣”的代码题O(∩_∩)O< 第一题 >< 第二题 >4、函数指针数组概念明细具体应用&#xff1a;转移表✔5、指向函数指针数组的指针三、实战训练 —— 回调函数1、…

Pix4D软件简易使用方法

一、实验目的 学习无人机处理软件 Pix4D 的各项基本功能模块&#xff0c;掌握处理无人机影像的一般处理流程及质量评价。学习新建项目&#xff0c;对图像进行初始化操作以便后处理。学会制作正射影像图&#xff0c;生成质量报告&#xff0c;并对其进行分析。 二、实验内容 &…

抽象轻松MySqL

第一步安装下载MySQL 手把手教你下载安装 第一步打开官方网站 这里提供两种——第一种懒人版&#xff1a;MySQL点击蓝色字会有链接 第二种手动版本&#xff1a;百度搜索Mysql&#xff08;注意不要点.cn的因为有点翻译问题&#xff09; 点开后的图如下 接下来开始装备下载 点…

Disentangled Graph Collaborative Filtering

代码地址&#xff1a;https://github.com/ xiangwang1223/disentangled_graph_collaborative_filtering Background&#xff1a; 现有模型在很大程度上以统一的方式对用户-物品关系进行建模(将模型看做黑盒&#xff0c;历史交互作为输入&#xff0c;Embedding作为输出。)&…