蓝桥杯-STM32G431RBT6(UART解析字符串sscanf和解决串口BUG)

news2024/9/20 5:45:42

一、C语言常识

printfsprintf的主要区别在于它们的功能和用途:

  1. printf:主要用于将格式化的数据输出到标准输出(如屏幕)。
  2. sprintf:则是将格式化的数据存储到一个指定的字符串缓冲区中,而不是直接输出。

printf 函数

  1. 输出调试信息:在程序开发过程中,将关键数据、状态等信息输出到控制台,便于调试。
  2. 生成格式化的输出:如输出格式化的文本、数值等。

sprintf 函数

  1. 构建字符串:将数据按照特定格式转换为字符串,用于后续处理或存储。
  2. 在不直接输出的情况下生成格式化的文本,例如在需要将格式化后的内容传递给其他函数或存储在变量中时使用。

%4ssscanf中的含义是:读取最多 4 个字符并将其存储为字符串。

它确保读取的字符串长度不超过 4 个字符。

  • char tx_buf[30]:这是一个可以存储 30 个字符的发送缓冲区。
  • uint8_t rx_data:这是一个 8 位的接收数据变量。
  • char rx_buf[30]:这是一个可以存储 30 个字符的接收缓冲区。
  • uint8_t rx_count:这是接收数据的计数。
  • char car_type[5]:用于存储车型的 5 个字符的数组。
  • char car_num[5]:用于存储车牌号的 5 个字符的数组。
  • char car_time[15]:用于存储时间的 15 个字符的数组。

二、代码

 char tx_buf[30];
 uint8_t rx_data;
 char rx_buf[30];
 uint8_t rx_count;
 char car_type[5];
 char car_num[5];
 char car_time[15];
void uart_proc(void)
{
if(rx_count==22)
{
	sscanf(rx_buf,"%4s:%4s:%12s",car_type,car_num,car_time);
	sprintf(tx_buf,"car_type:%4s\r\n",car_type);
     HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);	
	sprintf(tx_buf,"car_num:%4s\r\n",car_num);
     HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);	
	sprintf(tx_buf,"car_time:%12s\r\n",car_time);
     HAL_UART_Transmit(&huart1,(uint8_t*)tx_buf,strlen(tx_buf),50);	
	rx_count=0;
	memset(rx_buf,0,20);
}
}

三.BUG

1.解决接受不完整问题

假如没接受完成,执行函数,就可能会把count直接清零,就会重新接受

 while (1)
{
   Key_Proc();
   Lcd_proc();
   if(rx_count!=0)
   {
   uint8_t ttemp=rx_count;
	   HAL_Delay(1);
	   if(ttemp==rx_count) 
	uart_proc();
   }
   
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

2.解决接受错误下一次不能执行的问题

以下是对这段代码的详细解释:

void rxclear_proc(void):这是一个定义的函数,名为 rxclear_proc,它没有返回值(void)。

在函数内部:

  • if(usrxclear<50) return;:如果变量 usrxclear 的值小于 50,则直接返回,不执行后续代码。
  • usrxclear=0;:将 usrxclear 变量的值重置为 0。
  • rx_count=0;:将接收数据的计数变量 rx_count 重置为 0。
  • memset(rx_buf,0,20);:使用 memset 函数将 rx_buf 数组的前 20 个元素全部设置为 0,以清空该缓冲区。
void rxclear_proc(void)
{   if(usrxclear<50) return;
	usrxclear=0;
    rx_count=0;
	memset(rx_buf,0,20);
}
uint32_t usrxclear;//main中定义
void SysTick_Handler(void)//滴答定时器里面定义
{
  /* USER CODE BEGIN SysTick_IRQn 0 */

  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  /* USER CODE BEGIN SysTick_IRQn 1 */
usrxclear++;
  /* USER CODE END SysTick_IRQn 1 */
}
 extern uint32_t usrxclear;//"stm32g4xx_it.C"中定义

四.代码开源

通过网盘分享的文件:串口.zip
链接: https://pan.baidu.com/s/1s-FNqcBW1CerVNHGyEfvuQ?pwd=0820 提取码: 0820

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

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

相关文章

Docker实操:安装MySQL5.7详解(保姆级教程)

介绍 Docker 中文网址: https://www.dockerdocs.cn Docker Hub官方网址&#xff1a;https://hub.docker.com Docker Hub中MySQL介绍&#xff1a;https://hub.docker.com/_/mysql ​ 切换到“Tags”页面&#xff0c;复制指定的MySQL版本拉取命令&#xff0c;例如 &#xff1a…

LabVIEW提高开发效率技巧----使用LabVIEW工具

LabVIEW为开发者提供了多种工具和功能&#xff0c;不仅提高工作效率&#xff0c;还能确保项目的质量和可维护性。以下详细介绍几种关键工具&#xff0c;并结合实际案例说明它们的应用。 1. VI Analyzer&#xff1a;自动检查代码质量 VI Analyzer 是LabVIEW提供的一款强大的工…

架构师,被严重低估的角色!

在企业数字化转型与变革的壮阔浪潮中&#xff0c;企业架构&#xff08;Enterprise Architecture&#xff0c;EA&#xff09;作为一门高度复杂且跨学科的知识体系&#xff0c;无可争议地成为了驱动组织战略深化与技术创新的核心引擎。尽管市场上充斥着丰富的指导理论与参考资料&…

202409012在飞凌的OK3588-C的核心板上使用Rockchip原厂的Buildroot点MIPI屏【背光篇】

202409012在飞凌的OK3588-C的核心板上使用Rockchip原厂的Buildroot点MIPI屏【背光篇】 2024/9/12 10:44 缘起&#xff0c;拿到一块MIPI屏&#xff0c;需要使用飞凌的OK3588-C的核心板在Android12下点亮。 在飞凌的Linux R4下修改部分屏参之后即可直接点亮。 但是在飞凌的Andro…

Java笔记-MinIO Java SDK的使用

此博文内容为&#xff1a; 使用SDK创建bucket&#xff1b; 使用SDK上传文件&#xff1b; 使用SDK下载文件。 maven添加&#xff1a; <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.2</versi…

Linux使用Clash,clash-for-linux

文件下载 clash-for-linuxhttps://link.zhihu.com/?targethttps%3A//zywang.lanzn.com/ijE2a1m7h6mb&#xff08;百度和阿里云盘都不支持这个文件分享&#xff09;。 使用须知 - 此项目不提供任何订阅信息&#xff0c;请自行准备Clash订阅地址。 - 运行前请手动更改.env文件…

嵌入式开发—CAN通信协议详解与应用(中)

书接上回&#xff1a;嵌入式开发—CAN通信协议详解与应用&#xff08;上&#xff09; 文章目录 CAN通讯中的位时间和位同步位时间的构成采样点 位时间的计算公式时间量子&#xff08;Time Quantum, TQ&#xff09;位时间的阶段示意图位同步机制 CAN通信中的仲裁规则仲裁规则的…

03-Mac系统PyCharm主题设置

目录 1. 打开PyCharm窗口 2. Mac左上角点击PyCharm&#xff0c;点击Settings 3. 点击第一项Appearance& Behavior 4. 点击Appearance 5. 找到Theme进行设置 1. 打开PyCharm窗口 2. Mac左上角点击PyCharm&#xff0c;点击Settings 3. 点击第一项Appearance& Behavi…

【例题】lanqiao4425 咖啡馆订单系统

样例输入 3 2 2 1 3 1 2样例输出 3 2样例说明 输入的数组为&#xff1a;【3&#xff0c;1&#xff0c;2】 增量序列为&#xff1a;【2&#xff0c;1】 当增量 h2&#xff1a;对于每一个索引 i&#xff0c;我们会将数组元素 arr[i] 与 arr[i−h] 进行比较&#xff0c;并进行可…

Stable Diffusion绘画 | ControlNet应用-IP-Adapter:堪比 Midjourney 垫图

IP-Adapter 是腾讯AI实验室研发的控制器&#xff0c;属于 ControlNet 最强控制器前三之一。 如果想参照图片的风格&#xff0c;生成各种各样类似效果的图片&#xff0c;就可以用到 IP-Adapter。 在 ControlNet 单元中上传一张图片&#xff1a; 不输入任何提示词&#xff0c;出图…

MySQL数据库:掌握备份与恢复的艺术,确保数据安全无忧

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

波导阵列天线学习笔记 馈电网络1 使用X型全公共波导馈网的毫米波大规模天线阵列的带宽提升

摘要&#xff1a; 全公共波导馈网的一次反射等效模型被研究用于提出一种毫米波大规模天线阵列带宽提升的新方法。理论分析显示由馈电网络拓扑造成的指定频率的多级小反射的同相叠加现象是影响大规模阵列的可实现带宽的重要因素&#xff0c;除了包含阵列的独立功分器和反射器的带…

【Hot100】LeetCode—295. 数据流的中位数

目录 1- 思路题目识别堆实现 2- 实现⭐4. 寻找两个正序数组的中位数——题解思路 3- ACM 实现 原题链接&#xff1a;295. 数据流的中位数 1- 思路 题目识别 识别1 &#xff1a;实现一个数据结构&#xff0c;求中位数 堆实现 思路 利用优先队列&#xff0c;小根堆放较小的元…

专科医院内外网数据摆渡,什么方法最“对症下药”?

专科医院是专门从事某一个或少数几个医学分科的医院。这些医院在特定的医学领域内具有较高的专业性和技术水平&#xff0c;通常致力于某一类疾病的预防、诊断和治疗。如传染病医院、口腔医院、肿瘤医院等。 根据相关法律法规和行业标准&#xff0c;涉及医疗数据的网络必须采取必…

影刀RPA实战:网页爬虫之携程酒店数据

1.实战目标 大家对于携程并不陌生&#xff0c;我们出行定机票&#xff0c;住酒店&#xff0c;去旅游胜地游玩&#xff0c;都离不开这样一个综合性的网站为我们提供信息&#xff0c;同时&#xff0c;如果你也是做旅游的公司&#xff0c;那携程就是一个业界竞争对手&#xff0c;…

Zookeeper 3.8.4 安装和参数解析

安装 zookeeper 之前必须先安装 JDK&#xff0c;有关Linux环境JDK可以参考我以前写的博文 1、关于Linux服务器配置java环境遇到的问题 2、Linux环境安装openJDK 3、Centos7.3云服务器上安装Nginx、MySQL、JDK、Tomcat环境 文章目录 1. zookeeper 安装2. 参数解析 1. zookeeper …

计算机视觉—3d点云数据基础

点云数据 3d点云数据由来 3d点云 3D Point Cloud是一种用于表示三维空间中对象或场景的数据结构。在最基础的形式中&#xff0c;它是一个包含多个三维坐标点&#xff08;X, Y, Z&#xff09;的集合。这些点是通过对实际物体或场景表面进行离散采样而获得的&#xff0c;因此&a…

使用高版本nodej报错:node: /lib64/libm.so.6: version `GLIBC_2.27‘ not found

如果要更新GLIBC_2.27会很繁琐&#xff0c;且耗时较长&#xff0c;所以建议下载带glibc的版本的nodejs 解决方案&#xff1a;下载带glibc的版本安装&#xff0c;如果是使用nvm则解压到对应的版本控制路径 我使用的版本是v20.16.0&#xff1a;Index of /download/release/v20.1…

基于GEE的Landsat 7ETM+条带填补

项目简介 该项目使用Google Earth Engine (GEE)平台&#xff0c;对Landsat 5和Landsat 7卫星影像进行预处理与影像填补操作。主要功能包括影像的选取、波段处理、缺失影像的填补以及最终影像的导出。代码中的核心功能是通过空间回归方法对Landsat 7和Landsat 5影像进行时序配准…

Oracle 19c异常恢复—ORA-01209/ORA-65088---惜分飞

由于raid卡bug故障,导致文件系统异常,从而使得数据库无法正常启动,客户找到我之前已经让多人分析,均未恢复成功,查看alert日志,发现他们恢复的时候尝试resetlogs库,然后报ORA-600 kcbzib_kcrsds_1错误 2024-09-15T17:07:32.55321508:00 alter database open resetlogs 2024-09-…