STM32串口第一次接收数据时第一个字节丢失的问题

解决方法:开启中断之前,先清除标志位【1】。

串口清除标志位:

__HAL_UART_CLEAR_PEFLAG(&huart1);

HAL_UART_Receive_IT(&huart1,&RxUart, 1);

定时器清除标志位:

__HAL_TIM_CLEAR_FLAG(&htim3,TIM_FLAG_UPDATE);

HAL_TIM_Base_Start_IT(&htim3);

1、问题描述

编程任务:STM32串口接收上位机不定长数组

思路:使用串口中断接收数据,每接收完一个字节就把计时器清零;计时器每65ms进一次中断,如果计时器进中断说明一帧数据结束了【2】。

1.1、MAIN函数

uint8_t RxData[60]={0},RxUart=0;
uint8_t FLAG_RX_DONE=0;//Serial port receive complete flag, no new data received within 65.5ms(TIM3), this flag will be set
uint8_t RX_DATA_idx=0,RX_DATA_LEN=0;


int main(void)
{
  uint8_t projectName[]="a1223_protocol";
  uint8_t i=0;

  printf("****** %s ******\r\n\r\n",projectName);

  HAL_UART_Receive_IT(&huart1,&RxUart, 1);//开启接受中断

  while (1)
  {
	  if(FLAG_RX_DONE!=0)//如果接收完成
	  {
		  FLAG_RX_DONE=0;

		  printf("RX_DATA_LEN=%d\r\n",RX_DATA_LEN);
		  RX_DATA_LEN=0;

		  printf("RX=");
		  for(i=0;i<RX_DATA_LEN;i++)
		  {
			  printf("%02X ",RxData[i]);
		  }
		  printf("\r\n");
		  
		  memset(RxData,0,sizeof(RxData));//清除接收寄存器
	  }

	  HAL_Delay(1000);
	  HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
}

1.2、串口接收中断处理程序

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart->Instance==USART1)
	{
		__HAL_TIM_SET_COUNTER(&htim3,0);//定时器清零
		if(RX_DATA_idx==0)//If it is the first character, the timer is started
		{
			HAL_TIM_Base_Start_IT(&htim3);//开启定时器
		}

		RxData[RX_DATA_idx++]=RxUart;
		HAL_UART_Receive_IT(&huart1,&RxUart,1);//开启接收中断,准备接收下一个字节
	}
}

1.3、计时器中断处理程序

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM3)
	{
		//If no new data is received for 65.5ms, the reception is over
		RX_DATA_LEN=RX_DATA_idx;
		FLAG_RX_DONE=1;

		RX_DATA_idx=0;//Start writing data again
		HAL_TIM_Base_Stop_IT(&htim3);//接收完成,关闭定时器中断
	}
}

1.4、实验结果 

可以看到第一次接收的数据中缺少“01”。

2、解决方法

在开启中断之前,先清除标志位

2.1、串口的处理方法

HAL_UART_Receive_IT(&huart1,&RxUart, 1);

修改成

__HAL_UART_CLEAR_PEFLAG(&huart1);

HAL_UART_Receive_IT(&huart1,&RxUart, 1);

2.2、定时器的处理方法

 HAL_TIM_Base_Start_IT(&htim3);

修改成

__HAL_TIM_CLEAR_FLAG(&htim3,TIM_FLAG_UPDATE);

HAL_TIM_Base_Start_IT(&htim3);

 2.3、实验结果 

 

3、参考资料

【1】STM32串口第一字节消失或者误码的原因和解决方案_stm32单片机串口通讯 接收的字节错误-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/Backspace110/article/details/52737441

  【2】HAL库教程9:串口接收不定长数据_hal库接收串口不定长数据-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/geek_monkey/article/details/89326199

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么要用云电脑玩游戏?5大好处揭秘,ToDesk云机性能强又易用

电脑在人们日常的工作与生活中无疑是颇为重要的。无论是学生撰写论文报告、企业白领处理数据图形等事项&#xff0c;还是游戏迷、影视迷们畅玩游戏或观看视频都难免要经常用到。拥有一台性能配置优质并且内置软件全面的电脑&#xff0c;对各类群体来说都大有益处&#xff0c;尤…

深入理解批量归一化(BN):原理、缺陷与跨小批量归一化(CBN)

在训练深度神经网络时&#xff0c;批量归一化&#xff08;Batch Normalization&#xff0c;简称BN&#xff09;是一种常用且有效的技术&#xff0c;它帮助解决了深度学习中训练过程中的梯度消失、梯度爆炸和训练不稳定等。然而&#xff0c;BN也有一些局限性&#xff0c;特别是在…

iptables交叉编译(Hisiav300平台)

参考文章&#xff1a;https://blog.csdn.net/Bgm_Nilbb/article/details/135714738 https://bbs.archlinux.org/viewtopic.php?pid1701065 1、libmnl 交叉编译 tar xvf libmnl-1.0.5.tar.bz2 sudo chmod 777 -R libmnl-1.0.5 cd libmnl-1.0.5 mkdir _install //host和CC需要修…

redis数据类型:list

数据结构 源码版本&#xff1a;7.2.2路径&#xff1a;src/adlist.h 关于list的 头文件中涉及到的这三个结构体如下 /* Node, List, and Iterator are the only data structures used currently. */ # 节点 typedef struct listNode {struct listNode *prev; # 前元素的指针s…

达梦8数据库备份与还原

通过命令找到达梦数据库进程所在位置 ps -ef | grep dm 得到达梦相关进程 pwd 进程ID得到进程目录 [rootdmdb01 bin]# pwd /data/dmdbms/bin [rootdmdb01 bin]# ps -ef | grep dm root 1183 2 0 Nov04 ? 00:00:33 [kworker/8:1H-xfs-log/dm-0] root …

电气设计 | 低压接地系统:TN-C 、TN-S、TN-C-S、TT适用哪些场所?

电气设计 | 低压接地系统&#xff1a;TN-C 、TN-S、TN-C-S、TT适用哪些场所&#xff1f; 1、低压配电系统简介2、各种低压配电系统介绍2.1、TN-C系统2.2、TN-S系统2.3、TN-C-S 系统2.4、TT 系统2.5、IT 系统 1、低压配电系统简介 低压配电系统有TN-C、TN-S、TN-C-S、TT和IT五种…

重温设计模式--组合模式

文章目录 1 、组合模式&#xff08;Composite Pattern&#xff09;概述2. 组合模式的结构3. C 代码示例4. C示例代码25 .应用场景 1 、组合模式&#xff08;Composite Pattern&#xff09;概述 定义&#xff1a;组合模式是一种结构型设计模式&#xff0c;它允许你将对象组合成…

漏洞检测工具:Swagger UI敏感信息泄露

Swagger UI敏感信息泄露 漏洞定义 Swagger UI是一个交互式的、可视化的RESTful API文档工具&#xff0c;它允许开发人员快速浏览、测试API接口。Swagger UI通过读取由Swagger&#xff08;也称为OpenAPI&#xff09;规范定义的API描述文件&#xff08;如swagger.json或swagger…

Linux下学【MySQL】表中插入和查询的进阶操作(配实操图和SQL语句通俗易懂)

绪论​ 每日激励&#xff1a;挫折是会让我们变得越来越强大的重点是我们敢于积极的面对它。—Jack叔叔 绪论​&#xff1a; 本章是表操作的进阶篇章&#xff08;没看过入门的这里是传送门&#xff0c;本章将带你进阶的去学习表的插入insert和查找select&#xff0c;本质也就是…

JavaScript 标准内置对象——Object

1、构造函数 2、静态方法 // 将源对象中所有可枚举的自有属性复制到目标对象&#xff0c;&#xff0c;并返回修改后的目标对象 Object.assign(target, ...sources) Object.create(proto, propertiesObject) // 以一个现有对象作为原型&#xff0c;创建一个新对象Object.defineP…

Robot Framework搭建自动化测试框架

1.配置环境 需要安装jdk8&#xff0c;andrid sdk&#xff08;安装adb&#xff09;&#xff0c;pycharm编译环境以及软件 安装Robot Framework 首先&#xff0c;你需要安装Robot Framework&#xff0c;可以使用 pip 进行安装&#xff1a; pip install robotframework安装所需的…

fastjson诡异报错

1、环境以及报错描述 1.1 环境 操作系统为中标麒麟、cpu 为国产鲲鹏服务器。 jdk为openjdk version 1.8.0._242 1.2 错误 com.alibaba.fastjson2.JSONException: syntax error : f at com.alibaba.fastjson2.JSONReaderUTF16.readBoolValue(JSONReaderUTF16.java:6424) at c…

Unity3d 基于UGUI和VideoPlayer 实现一个多功能视频播放器功能(含源码)

前言 随着Unity3d引擎在数字沙盘、智慧工厂、数字孪生等场景的广泛应用&#xff0c;视频已成为系统程序中展示时&#xff0c;不可或缺的一部分。在 Unity3d 中&#xff0c;我们可以通过强大的 VideoPlayer 组件和灵活的 UGUI 系统&#xff0c;将视频播放功能无缝集成到用户界面…

蓝牙协议——音乐启停控制

手机播放音乐 手机暂停音乐 耳机播放音乐 耳机暂停音乐

【EthIf-13】EthIfGeneral容器配置-01

1.EthIfGeneral类图结构 下面是EthIfGeneral配置参数的类图&#xff0c;比较重要的参数就是配置&#xff1a; 接收中断是否打开发送确认中断是否打开EthIf轮询周期 1.EthIfGeneral参数的含义

如何看待2024年诺贝尔物理学奖颁给了机器学习与神经网络?

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于2024年诺贝尔物理学奖颁给了机器学习与神…

有没有检测吸烟的软件 ai视频检测分析厂区抽烟报警#Python

在现代厂区管理中&#xff0c;安全与规范是重中之重&#xff0c;而吸烟行为的管控则是其中关键一环。传统的禁烟管理方式往往依赖人工巡逻&#xff0c;效率低且存在监管死角&#xff0c;难以满足当下复杂多变的厂区环境需求。此时&#xff0c;AI视频检测技术应运而生&#xff0…

VSCode搭建Java开发环境 2024保姆级安装教程(Java环境搭建+VSCode安装+运行测试+背景图设置)

名人说&#xff1a;一点浩然气&#xff0c;千里快哉风。—— 苏轼《水调歌头》 创作者&#xff1a;Code_流苏(CSDN) 目录 一、Java开发环境搭建二、VScode下载及安装三、VSCode配置Java环境四、运行测试五、背景图设置 很高兴你打开了这篇博客&#xff0c;更多详细的安装教程&…

二手车交易平台开发:安全与效率的双重挑战

3.1系统体系结构 系统的体系结构非常重要&#xff0c;往往决定了系统的质量和生命周期。针对不同的系统可以采用不同的系统体系结构。本系统为二手车交易平台系统&#xff0c;属于开放式的平台&#xff0c;所以在体系结构中采用B/s。B/s结构抛弃了固定客户端要求&#xff0c;采…

共享无人系统,从出行到生活全面覆盖

共享无人系统已经覆盖到我们生活中的方方面面&#xff0c;出行上&#xff0c;比如共享自行车小程序、共享自行车&#xff1b;生活中&#xff0c;比如说棋牌室、茶室。我们以棋牌室举例。 通过开发使用共享无人系统&#xff0c;可以极大地降低人力成本&#xff0c;共享无人棋牌室…