使用STM32CubeMX配置串口各种功能

news2024/12/27 8:05:26

使用STM32CubeMX配置串口各种功能

  • STM32CubeMX软件的安装
  • 接收+空闲中断
    • STM32CubeMX配置
      • 1.新建工程
      • 2. 选择芯片
      • 3. 选择时钟和下载方式
      • 4. 配置串口
      • 5.设置工程消息
      • 6.生成代码
      • 7.修改生成的代码
  • 空闲中断+DMA转运
    • STM32CubeMX配置
      • 4.配置串口
      • 5.设置工程消息
      • 6.生成代码
      • 7.修改生成的代码

STM32CubeMX软件的安装

STM32CubeMX软件的具体安装过程这篇博客里STM32CubeMX-下载及使用。这里就不在叙述了。

接收+空闲中断

将串口配置为接收和空闲中断,来接收不定长的数据。
原理:两帧数据直接会出现时间间隔。而空闲中断就是当数据在连续接收后有一段时间没有接收到数据时产生的中断。可以依次作为每帧数据的区分。

STM32CubeMX配置

1.新建工程

在这里插入图片描述

2. 选择芯片

在这里插入图片描述

3. 选择时钟和下载方式

1.时钟外部8m晶振
在这里插入图片描述
在这里插入图片描述

2.下载方式-st-link
在这里插入图片描述

4. 配置串口

在这里插入图片描述

5.设置工程消息

在这里插入图片描述
在这里插入图片描述

6.生成代码

在这里插入图片描述
在这里插入图片描述

7.修改生成的代码

在usart.c的文件中找到void MX_USART1_UART_Init(void);这个函数,在里面添加这两句。
含义是打开接收,空闲中断。

	__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);
	__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);

在这里插入图片描述
接着找到中断函数。在stm32f1xx_it.c这个文件夹里,大概在204行的位置。写接收的代码

void USART1_IRQHandler(void)
{
	static uint8_t i=0;
  /* USER CODE BEGIN USART1_IRQn 0 */
	if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE) == SET )
	{
		RxBuff[i++] = READ_REG(huart1.Instance->DR);
		if(i==149)
		{
			i=0;
		}
	}
	if( __HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE) == SET  )
	{
		__HAL_UART_CLEAR_IDLEFLAG(&huart1);
		Rx_Flag[0]=1;
		Rx_Flag[1]=i;
		i=0;
	}
  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */

  /* USER CODE END USART1_IRQn 1 */
}

这段代码的意思是,将接收到的数据放到RxBuff[]数组里。当一帧数据全部发送完成时,进入到空闲中断也就是下面那个if判断函数里,在这里首先清除了空闲中断的标志位,接着将Rx_Flag[0]接收完成的标志位给置一,并且将i的值赋给Rx_Flag[1]表示接收了多长的数据。最后把i的值给清理,为下次接收做准备。

在主函数里判断Rx_Flag[0]接收完成标志位,等于1时,将接收到的数据再发送出去,并且清零这个标志位。
在这里插入图片描述

		if( Rx_Flag[0]==1)
		{	
			Rx_Flag[0]=0;
			HAL_UART_Transmit(&huart1,RxBuff,Rx_Flag[1],0xffff);
		}

空闲中断+DMA转运

当数据较多,且频繁发送时,如果还采用来一个数据,进一次中断接收一下的这种方法,会造成频繁进中断,影响主函数的正常运行。那么该怎么接收这类数据呢?这时可以采用空闲+DMA的方式。空闲中断和上面的一样都是为了分开每帧数据,同时告诉我们数据接收完成的。
而DMA则可以直接进行外设到储存的数据转运。他就相当于一个大机器人里分出的一队小机器人。大机器人正常干自己的事,而分出来的小机器人则专心进行数据的搬运,把接收到数据搬到指定的位置。

STM32CubeMX配置

STM32CubeMX配置前3个步骤和上面的一样,这里直接从第4步开始。

4.配置串口

在这里插入图片描述
在这里插入图片描述

5.设置工程消息

6.生成代码

设置工程和生成代码的步骤和上面的一样,这里也不截图了。

7.修改生成的代码

同样在usart.c这个文件中的void MX_USART1_UART_Init(void)函数里添加这两句函数。

__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);
HAL_UART_Receive_DMA(&huart1,Rx_Buff,150);

第一句是开启空闲中断。
第二句是开启MDA接收,将串口接收到的数据转运到Rx_Buff里,一共需要转运150个数据。
在这里插入图片描述
接着在中断函数里填写处理函数。

	if(__HAL_UART_GET_FLAG(&huart1 , UART_FLAG_IDLE) == SET )
	{
		__HAL_UART_CLEAR_IDLEFLAG(&huart1);
		uint8_t  len=150-__HAL_DMA_GET_COUNTER(huart1.hdmarx);
		HAL_UART_Transmit_DMA(&huart1,Rx_Buff,len);
		HAL_UART_Receive_DMA(&huart1,Rx_Buff,150);
	}

这一段的含义是首先判断是否有空闲中断的产生。有的话,清除控制中断标志位。同时接收了多少个数据。__HAL_DMA_GET_COUNTER(huart1.hdmarx);函数的意思是还剩余多少个空间没有进行转运。用全空间150减去剩余的空间等于已经转运的空间,也就是DMA转运了多少个,串口接收了多少个数据。
接着将接收到的数据再通过DMA进行转运到tx上转发出去。
最后再次设置DMA转运的地址和个数。
在这里插入图片描述

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

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

相关文章

Javascript中DOM操作和事件监听综合练习 (具备三种功能的轮播图案例)

#如何去实现图片轮播效果图,通过创建一个基本的 HTML 页面结构,包含用于展示轮播图片的区域、左右切换箭头以及放置轮播图片的容器。# 整体架构 一、CSS 样式 接下来创建一个 styles.css 文件来设置页面的样式,让轮播效果看起来更美观。定义…

无人设备遥控器之防水性能篇

无人设备遥控器的防水性能是评估其耐用性和适应不同环境能力的重要指标。随着无人设备技术的不断发展,越来越多的遥控器在设计时融入了防水元素,以满足用户在不同天气条件下的使用需求。 一、防水等级与标准 无人设备遥控器的防水性能通常通过防水等级来…

【JAVA】Java入门 - 循环结构进阶

第1关 for循环的进阶使用-嵌套循环(1) 第2关 for循环的进阶使用-嵌套循环(2) 第3关 99乘法表 第4关 综合练习之ATM取款机 第5关 选择题 D、BC、B

【AI系统】AI 编译器后端优化

AI 编译器后端优化 AI 编译器分为多层架构,最顶层由各种 AI 训练框架编写的神经网络模型架构,一般由 Python 编写,常见的 AI 训练框架有 PyTorch、MindSpore、PaddlePaddle 等。在导入 AI 编译器时需要用对应框架的 converter 功能转换为 AI…

力扣 三角dp

动态规划基础题,当前所在元素来自上一行的两列的值。 题目 从图可以看出,每一行的第一个数与最后一个数都是1,然后中间的数是来自它左上方和右上方的数的和。当然并不是要打印这个三角形的形状,因此可以想到正常的打印方式应该是…

Oracle检查加强版本

支持更丰富了,代码也更乱了 #!/bin/bash## 实例个数 告警日志 实例状态 会话 活动会话 锁 集群状态 服务状态 磁盘空间 侦听日志 ## 单机、RAC Linux、AIX 11g、19c、23ai ## 依赖adrci配置正常,也可以改为 getAlert() ## ver 1.2case uname inAIX)ps…

RoBERTa- 稳健优化的 BERT 预训练模型详解

一、引言 自 BERT(Bidirectional Encoder Representations from Transformers)问世,预训练语言模型在自然语言处理(NLP)领域掀起革命浪潮,凭卓越表现大幅刷新诸多任务成绩。RoBERTa 承继 BERT 架构&#x…

【流程图】各元素形状和含义

判定、文档、数据、数据库、流程处理节点 矩形 - 动词 平行四边形 - 图像 下波浪 - 数据 图片来源http://baike.cu12.com/bkss/62449.shtml

「Mac畅玩鸿蒙与硬件41」UI互动应用篇18 - 多滑块联动控制器

本篇将带你实现一个多滑块联动的控制器应用。用户可以通过拖动多个滑块,动态控制不同参数(如红绿蓝三色值),并实时显示最终结果。我们将以动态颜色调节为例,展示如何结合状态管理和交互逻辑,打造一个高级的…

PyQt6 开发基础

<?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>Form</class><widget class"QWidget" name"Form"><property name"geometry"><rect><x>0<…

Kafka如何保证消息可靠?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka如何保证消息可靠&#xff1f;】面试题。希望对大家有帮助&#xff1b; Kafka如何保证消息可靠&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Kafka通过多种机制来确保消息的可靠性&#xff0c;主要包…

pytest(二)excel数据驱动

一、excel数据驱动 excel文件内容 excel数据驱动使用方法 import openpyxl import pytestdef get_excel():excel_obj openpyxl.load_workbook("../pytest结合数据驱动-excel/data.xlsx")sheet_obj excel_obj["Sheet1"]values sheet_obj.valuescase_li…

类和对象(中)(类的默认成员函数)+日期类实现

1.类的默认成员函数 默认成员函数就是用户没有显示实现&#xff0c;编译器会自动生成的成语函数称为默认成员函数。一个类&#xff0c;我们不写的情况下编译器会默认生成6个默认成员函数。C11后还增加了两个默认成员函数&#xff0c;移动构造和移动赋值&#xff08;这一节暂时…

详解版本控制工作原理及优势,常见的版本控制系统对比(HelixCore、Git、SVN等)

什么是版本控制软件&#xff1f;从基础层面来说&#xff0c;版本控制&#xff08;也可称版本管理&#xff09;就是随时间跟踪和管理文件变更的过程&#xff0c;而版本控制软件有助于实现这一过程的自动化。但这仅仅是其功能及其重要性的开端。 什么是版本控制&#xff1f; 版本…

记录一次网关异常

记一次网关异常 网关时不时就会出现下面的异常。关键是不知道什么时候就会报错&#xff0c;并且有时候就算什么都不操作&#xff0c;也会导致这个异常。 ERROR org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler - Unexpected error occurred in schedul…

SpringMVC跨域问题解决方案

当Web应用程序尝试从一个源&#xff08;例如 http://localhost:9090&#xff09;向另一个不同的源&#xff08;例如 http://localhost:8080&#xff09;发起请求时&#xff0c;发现报错&#xff1a; 报错原因&#xff1a;请求被CORS策略拦截了 跨域问题概述 当Web应用程序尝试…

现在的电商风口已经很明显了

随着电商行业的不断发展&#xff0c;直播带货的热潮似乎正逐渐降温&#xff0c;而货架电商正成为新的焦点。抖音等平台越来越重视货架电商&#xff0c;强调搜索功能的重要性&#xff0c;预示着未来的电商中心将转向货架和搜索。 在这一转型期&#xff0c;AI技术与电商的结合为…

芯驰X9SP与汽车麦克风-打造无缝驾驶体验

当今汽车技术的进步不仅提升了驾驶体验&#xff0c;还改变了我们与车辆互动的方式。汽车麦克风作为车内语音控制系统的重要组成部分&#xff0c;正逐渐成为现代汽车的标配。 技术原理 汽车麦克风主要依赖于声音传感技术&#xff0c;通常包括电容式麦克风和动圈式麦克风。这些…

vue3项目搭建-6-axios 基础配置

axios 基础配置 安装 axios npm install axios 创建 axios 实例&#xff0c;配置基地址&#xff0c;配置拦截器,目录&#xff1a;utils/http.js 基地址&#xff1a;在每次访问时&#xff0c;自动作为相对路径的根 // axios 基础封装 import axios from "axios";…

【北京迅为】iTOP-4412全能版使用手册-第三十二章 网络通信-TCP套字节

iTOP-4412全能版采用四核Cortex-A9&#xff0c;主频为1.4GHz-1.6GHz&#xff0c;配备S5M8767 电源管理&#xff0c;集成USB HUB,选用高品质板对板连接器稳定可靠&#xff0c;大厂生产&#xff0c;做工精良。接口一应俱全&#xff0c;开发更简单,搭载全网通4G、支持WIFI、蓝牙、…