第十五届蓝桥杯-UART接收不定长指令的处理

学习初衷: 不仅仅为了比赛!

目录

一、问题引入

二、UART常用的三种工作模式

1.UART工作在中断模式

2.UART工作在DMA模式下

3.uart工作在接收转空闲的模式下

三、获取指令中需要的数据

四、printf函数的实现


一、问题引入

问题引入:请看下面这样一个设计要求

这个时候, 是不是使用一下的这种配置方法就不得行了

/* 主函数初始化 */
Uart_Init();/* 接收中断, 该函数的最后一个参数指定接收到对应的字符数后才触发中断 */
HAL_UART_Receive_IT(&huart1, uart_recv_buff, 7);/* uart接收完成ISR */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart->Instance == USART1) {printf("recv: 111111\r\n");memset(uart_recv_buff, 0 , sizeof(uart_recv_buff));HAL_UART_Receive_IT(&huart1, uart_recv_buff, 5);}
}

以上的配置方法只适合接收的字符数量确定的情况, 对于文章开头描述的问题并不能完成要求。

二、UART常用的三种工作模式

1.UART工作在中断模式

也就是上述所描述的那种情况, 给大家配置一下, 将就我也再加深一下印象。

不去配置指定的引脚的化, 再uart的参数配置这里配置好后的USART1的默认引脚不是PA9和PA10, 这个坑大家注意一下。

接着就可以生成代码。在过程种大家在初始化函数的地方调用生成好的的uart的初始化函数,接着在调用uart接收并产生中断的哪一个函数, 注意点就是该函数必须接收到指定的字符数才产生中断

/* 主函数初始化 */
Uart_Init();/* 接收中断, 该函数的最后一个参数指定接收到对应的字符数后才触发中断 */
HAL_UART_Receive_IT(&huart1, uart_recv_buff, 7);/* uart接收完成ISR */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart->Instance == USART1) {printf("recv: 111111\r\n");memset(uart_recv_buff, 0 , sizeof(uart_recv_buff));HAL_UART_Receive_IT(&huart1, uart_recv_buff, 5);}
}

2.UART工作在DMA模式下

配置和上述一样, uart的基本参数, 接着需要配置一下DMA

生成代码的代码编写如下, 和uart的接收中断模式一样

3.uart工作在接收转空闲的模式下

上述函数可能不太常用, 该函数的位置

上述中断回调函数的位置

如此, 就能接收不定长的指令了

三、获取指令中需要的数据

给大家说一些C库函数, 大家不会的学一下, 很有用。

sprintf

snprintf

sscanf()

strtok

strchr

strstr

就可以将接收到的数据, 给轻松的解析出来, 剩下的就是逻辑处理的工作了

四、printf函数的实现

调试程序非常有用, 建议大家比赛的时候配置上, 简单讲一下用处。

在函数中打印信息, 查看函数的调用情况

打印变量的值, 在逻辑不清楚的时候, 打印变量的值可以很快的帮助我们解决问题

在过程中任意的位置实现fputc函数

int fputc(int ch, FILE *fp)
{/* 当串口的发送数据寄存器不空的时候等待 */while((USART1->ISR & (1 << 7)) == 0);UASRT1->TDR = ch;return ch;
}

好了, 就分享这么多, 希望需要帮助的人看了能有思路,不在疑惑!

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

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

相关文章

【Java】仓库管理系统 SpringBoot+LayUI+DTree(源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Java状态模式源码剖析及使用场景

状态模式 一、介绍二、订单处理系统中使用三、Spring 中事务怎么使用状态模式&#xff1f; 一、介绍 状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 状态模式的核心思想是将对象的状态封装成独立的类,使…

深度学习Top10算法

自2006年深度学习概念被提出以来&#xff0c;20年快过去了&#xff0c;深度学习作为人工智能领域的一场革命&#xff0c;已经催生了许多具有影响力的算法。以下是深度学习top10算法&#xff0c;它们在创新性、应用价值和影响力方面都具有重要的地位。 1、深度神经网络&#xf…

鸿蒙开发(四)-低代码开发

鸿蒙开发(四)-低代码开发 本文主要介绍下鸿蒙下的低代码开发。 鸿蒙低代码是指在鸿蒙操作系统进行应用开发时&#xff0c;采用简化开发流程和减少编码量的方式来提高开发效率。 1&#xff1a;开启低代码开发 首先我们打开DevEco Studio .然后创建工程。 如图所示&#xff…

定制红酒:如何根据客户需求调整红酒口感与风格

在云仓酒庄洒派&#xff0c;云仓酒庄洒派深知不同消费者对于红酒的口感与风格有着不同的喜好和需求。因此&#xff0c;云仓酒庄洒派根据消费者的具体要求&#xff0c;灵活调整红酒的口感与风格&#xff0c;以满足他们的期望。 首先&#xff0c;云仓酒庄洒派会与消费者进行深入的…

AHU 汇编 实验三

实验名称&#xff1a;实验三 串操作指令 二、实验内容&#xff1a; 在数据段定义缓冲区&#xff0c;从键盘接收两串字符到两个缓冲区&#xff0c;将第二串中与第一串字符不一致的字符显示在屏幕。 实验过程&#xff1a; 源代码&#xff1a; data segmentmess1 db 16,?,16…

XGB-19:Xgboost常见问题QA

常见问题解答 本文档包含关于XGBoost的常见问题。 如何调整参数 请参阅参数调整指南。 模型描述 请参阅提升树介绍。 大数据集 XGBoost被设计为内存高效。通常&#xff0c;只要数据适合本机内存&#xff0c;它就可以处理问题。这通常意味着数百万个实例。 如果内存不足&…

数据分析-Pandas如何画图验证数据随机性

数据分析-Pandas如何画图验证数据随机性 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表…

【字典合集】SecLists-更全面的渗透测试字典 v2024.1

下路路径 SecLists-更全面的渗透测试字典 v2024.1 简介 SecLists 是一个致力于收集各种安全字典的开源项目。这些字典包括但不限于&#xff1a;密码字典、用户名字典、网络扫描结果、漏洞利用载荷、web shells、可用于渗透测试的Payloads、以及其他各种安全相关的字典。 这…

Docker初体验之安装部署和镜像加速(openeuler版)

安装部署&#xff1a; 本人使用的为openeuler版本&#xff0c;无法使用二进制进行安装&#xff08;使用二进制安装时&#xff0c;无法使用docker中的补全命令&#xff0c;需要重新进行配置&#xff09;在此使用yum直接进行安装。 [rootlocalhost ~]# yum install docker 镜像…

如何远程SSH连接在家的服务器主机

当您需要通过SSH远程连接到家里的服务器主机时&#xff0c;以下是更详细的实施步骤&#xff1a; 1. 确保服务器主机已开启SSH服务 安装SSH服务&#xff1a;首先&#xff0c;确保您的服务器主机上安装了SSH服务。根据您的操作系统&#xff0c;您可以使用相应的包管理器来安装。…

LeetCode 174.地下城游戏 Python题解

地下城游戏 # 地下城游戏 """ 恶魔们抓住了公主并将她关在了地下城dungeon的右下角。地下城是由mxn个房间组成的二维网格。我们英勇的骑士最初被安置在左上角的房间里&#xff0c; 他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数…

在VMvare中虚拟机安装centos7和初始设置

下载镜像 阿里云的镜像站&#xff1a;https://mirrors.aliyun.com/centos/7/isos/x86_64/ 创建虚拟机过程 虚拟机创建过程比较简单&#xff0c;以下在VMvare16中进行安装 点击左上角&#xff0c;文件-新建虚拟机&#xff1a; 选择典型 选择刚刚下载好的镜像 输入虚拟机…

如何判断DNS解析故障?

DNS解析负责将域名解析到对应的IP地址&#xff0c;从而实现用户通过域名访问站点的效果。因此DNS解析是整个互联网中非常关键和基础的一个环节&#xff0c;但也是众多网站运营者和管理者经常忽视的一个环节。所以在出现DNS解析错误时&#xff0c;很多人都会感到手足无措&#x…

【Echarts】曲线图上方显示数字以及自定义值,标题和副标题居中,鼠标上显示信息以及自定义信息

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《前端》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握…

第七次作业

IPSEC VPPN实验配置 目标&#xff1a;在FW5和FW3之间建立一条IPSEC通道&#xff0c;保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 1.FW1和FW2进行双机热备&#xff08;之前实验没保存&#xff0c;可看上个实验&#xff09; 还有一些配置前面实验有。 2.场景选择点对点…

探究精酿啤酒的秘密:原料中的天然酵母与纯净水质

在啤酒的世界中&#xff0c;Fendi Club精酿啤酒以其与众不同的口感和深远的余味吸引了全球的啤酒爱好者。而这一切&#xff0c;都归功于其选用的上好原料&#xff0c;特别是天然酵母和纯净水质。 天然酵母是啤酒的灵魂。与工业生产的啤酒酵母不同&#xff0c;天然酵母富含丰富的…

分布式之Ribbon使用以及原理

Ribbon使用以及原理 1、负载均衡的两种方式 服务器端负载均衡 传统的方式前端发送请求会到我们的的nginx上去&#xff0c;nginx作为反向代理&#xff0c;然后路由给后端的服务器&#xff0c;由于负载均衡算法是nginx提供的&#xff0c;而nginx是部署到服务器端的&#xff0c;所…

20240310-1-Java后端开发知识体系

Java 基础 知识体系 Questions 1. HashMap 1.8与1.7的区别 1.71.8底层结构数组链表数组链表/红黑树插入方式头插法尾插法计算hash值4次位运算5次异或运算1次位运算1次异或运算扩容、插入先扩容再插入先插入再扩容扩容后位置计算重新hash原位置或原位置旧容量 (1) 扩容因子…

arcgis中.mpk和.lpk以及.mxd文件

一、概念 图层包 (.lpk) 中包括图层属性和图层所引用的数据集。利用图层包&#xff0c;可保存和共享与图层相关的所有信息&#xff0c;如图层的符号化、标注、表属性和数据等。地图包 (.mpk) 包含地图文档 (.mxd)、所含图层引用的所有数据以及其他地图项目&#xff08;如图形、…