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 overRX_DATA_LEN=RX_DATA_idx;FLAG_RX_DONE=1;RX_DATA_idx=0;//Start writing data againHAL_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博客
https://blog.csdn.net/Backspace110/article/details/52737441
【2】HAL库教程9:串口接收不定长数据_hal库接收串口不定长数据-CSDN博客
https://blog.csdn.net/geek_monkey/article/details/89326199
相关文章:
STM32串口第一次接收数据时第一个字节丢失的问题
解决方法:开启中断之前,先清除标志位【1】。 串口清除标志位: __HAL_UART_CLEAR_PEFLAG(&huart1); HAL_UART_Receive_IT(&huart1,&RxUart, 1); 定时器清除标志位: __HAL_TIM_CLEAR_FLAG(&htim3,TIM_FLAG_UPDATE);…...
Zookeeper基本命令解析
ZooKeeper -server host:port -client-configuration properties-file cmd args addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE addauth scheme auth 一、整体命令格式 ZooKeeper -serve…...
RustDesk远程及自建服务器搭建教程
要开始使用RustDesk远程和自建服务器,你需要遵循以下步骤: 下载和安装RustDesk:RustDesk是一款开源的远程支持应用程序。你可以在其官方网站(https://rustdesk.com/)上下载适用于你的操作系统的安装程序。安装过程非常…...
广州大彩串口屏安卓/linux触摸屏四路CVBS输入实现同时显示!
一、适用范围 适合广州大彩A40系列产品 产品型号: 二、概述 CVBS只需要一条线缆即可完成视频信号的传输,具有兼容性强、使用简单、成本低廉等优点。典型分辨率为720x480(NTSC制)或720x576(PAL制)。 三、…...
Python:模拟(包含例题)
模拟题:直接按照题目含义模拟即可,一般不涉及算法 注意: 1.读懂题:理清楚题目流程 2.代码和步骤一一对应:变量名,函数名,函数功能 3.提取重复的部分,写成对应的函数(…...
Python OCR 文字识别
一.引言 文字识别,也称为光学字符识别(Optical Character Recognition, OCR),是一种将不同形式的文档(如扫描的纸质文档、PDF文件或数字相机拍摄的图片)中的文字转换成可编辑和可搜索的数据的技术。随着技…...
阿里巴巴2017实习生笔试题(二)
阿里巴巴2017实习生笔试题(二) 2024/12/25 1.下面哪一个不是动态链接库的优点? B A.共享 B.装载速度快 C.开发模式好 D.减少页面交换 解析 1 静态链接库的优点 (1) 代码装载速度快,执行速度略比动态链接库快;…...
Docker安装与使用
文章目录 0.关键词1.安装docker2.镜像和容器3.Docker基础1.常见命令2.数据卷(volume)要解决的问题:什么是数据卷:解决的办法: 3.数据卷的使用基本命令挂载数据卷(nginx)基于本地目录数据挂载&am…...
通过nginx设置一个图片服务器,并使用 Nginx 作为反向代理
通过nginx设置一个图片服务器,并使用 Nginx 作为反向代理 安装nginx 首先需要去官网下载一个nginx,我这里下载了最新的稳定版本:nginx-1.26.2,下载下来是一个压缩包,解压之后就可以直接用了。 修改nginx的配置文件 …...
MacOS M3源代码编译Qt6.8.1
编译时间过长,如果不想自己编译,可以通过如果网盘进行下载: 链接: https://pan.baidu.com/s/17lvF5jQ-vR6vE-KEchzrVA?pwdts26 提取码: ts26 在macOS上编译Qt 6需要一些前置步骤和工具。以下是编译Qt 6的基本步骤: 安装Xcode和…...
【Pytorch实用教程】PyTorch 自带的数据集全面解读
下面这篇博客文章将带你快速了解 PyTorch 自带(或官方维护)的各类常用数据集,并介绍它们的使用方法,包括图像、文本和音频数据集。希望能帮助你在项目中快速上手并提高效率。 一、为什么要使用 PyTorch 自带的数据集? 1. 方便、快捷 官方维护的数据集通常已经帮助我们做好…...
Flask使用的正例和反例
Flask使用的正例和反例 文章目录 Flask使用的正例和反例一 , 使用注册异常二 , 新增数据成功后要返回新增数据的id三, 模型查询语句抽取成函数四, 业务逻辑函数传递的参数不应该用字典类型,要传不同字段的参数…...
2024年河北省职业院校技能大赛云计算应用赛项赛题第2套(私有云)
#需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包…...
我的软件架构师——Java 职位面试经历。
最近,我参加了一家领先的服务型公司的软件架构师(Java)职位的面试。我在这里分享了一些面试官问我的问题。我只列出了与 Java 相关的问题,因为本文主要关注 Java。面试官问我有关 AWS、Docker、Kubernetes、Kafka、Elastic Search、SQL/NoSQL 和设计模式的问题。 ClassNotF…...
npm error code ETIMEDOUT
参考:https://blog.csdn.net/qq_38572963/article/details/142052986 二、解决办法 1、清空缓存 npm cache clean --force 2、查看当前的npm镜像设置 npm config get registry 3、切换新镜像源 npm config set registry https://registry.npmmirror.com 4、查看新源是否设置成功…...
(11)(3.2) ESC信号问题
文章目录 前言 1 信号电平不足 2 感应噪声 3 ESC过电压尖峰 4 ESC固件错误 前言 本页讨论了 ESC 信号的几个潜在问题,这些问题可能导致不可靠的操作,甚至在起飞时坠毁。这些主要发生在较大的四轮飞机上,这些飞机从动力和自动驾驶仪到 E…...
Postman最新接口自动化持续集成
学习地址:https://www.bilibili.com/video/BV1VDC5Y7EJA?spm_id_from333.788.videopod.episodes&vd_source336a0b0a2ff09832b3a55c3599ffb193&p9 1、旧版:PostmanNewmanAllureJenkins 缺点:需要安装较多软件,脚步需要手…...
windows nacos安装配置
GitHub下载压缩包 解压目录(注意不要用中文路径) 在mysql先创建数据库nacos,再执行sql脚本 配置数据库 #*************** Config Module Related Configurations ***************# ### If use MySQL as datasource: ### Deprecated conf…...
重温设计模式-外观模式和适配器模式的异同
文章目录 目的不同适配器模式:外观模式: 结构和实现方式不同适配器模式:外观模式: 对客户端的影响不同适配器模式:外观模式: 目的不同 适配器模式: 主要目的是解决两个接口不兼容的问题&#…...
数据中台从centos升级为国产操作系统后,资源增加字段时,提交报500错误
文章目录 背景一、步骤1.分析阶段2.查看nginx3.修改用户(也可以修改所有者权限) 背景 故障报错: nginx报错信息: 2024/12/19 15:25:31 [crit, 500299#0: *249 onen0 " /var/lib/nginx/tmp/cient body/0000000001" f…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
