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…...
效率革命:用快马平台统一管理python项目,告别重复环境配置
效率革命:用快马平台统一管理python项目,告别重复环境配置 作为一名长期使用PyCharm进行Python开发的程序员,我经常遇到一个令人头疼的问题:每次新建数据分析项目,都要重复配置Python环境、安装依赖包、设置虚拟环境。…...
新能源汽车,车载充电机仿真模型(基于PWM整流器)。输出功率3.3kw,前级PFC采用双闭环控制,电流畸变率小。后级采用移相全桥开环控制。 运行环境有matlab_simulink和plecs
新能源汽车,车载充电机仿真模型(基于PWM整流器)。输出功率3.3kw,前级PFC采用双闭环控制,电流畸变率小。后级采用移相全桥开环控制。 运行环境有matlab/simulink和plecs针对新能源汽车车载充电机(OBC&#x…...
Vue 3 到底好在哪里?一文看懂 Composition API 的三大核心优势
Vue 3 到底好在哪里?一文看懂 Composition API 的三大核心优势 在前端框架的演进历程中,Vue 3 的发布堪称里程碑事件。其核心亮点之一——Composition API,彻底重构了组件逻辑的组织方式,解决了传统 Options API 在大型项目中的痛…...
HRNet并行架构解析:从多分辨率融合到语义分割实战代码精讲
1. HRNet架构设计精髓:为什么并行结构能吊打传统模型 第一次看到HRNet的论文时,我被它的设计思路彻底惊艳到了。传统网络像ResNet、VGG这些"老前辈"都是串行结构,图像分辨率像滑滑梯一样越来越低。而HRNet却像交响乐团,…...
告别假阳性!用TAGS多模态提示策略,精准提升你的医学影像分割模型性能
告别假阳性!用TAGS多模态提示策略,精准提升你的医学影像分割模型性能 医学影像分割一直是计算机辅助诊断中的核心挑战,尤其是肿瘤这类边界模糊、形态多变的病灶。传统方法依赖大量标注数据和复杂的后处理,而基础模型直接迁移又面临…...
4道高频面试题,吃透时间复杂度(递归_堆_贪心_快排)
4道高频面试题,吃透时间复杂度(递归/堆/贪心/快排) 前言:时间复杂度是算法面试的“必考题”,也是区分初级与中级开发者的核心考点。很多开发者能写出正确的算法代码,却无法清晰、严谨地分析其时间复杂度&am…...
小电脑4种主流连接方案全解:直连屏/采集卡/网卡网线/NoMachine
在使用嵌入式开发板、迷你主机、机器人机载小电脑等设备时,如何高效连接、显示画面、远程控制是入门第一步。很多同学容易混淆“直连网线、网卡、采集卡、远程桌面”的区别,本文一次性讲清楚四种常用连接方式,包含用途、所需硬件、详细操作、…...
AGI 主要技术路径及核心技术:归一融合及未来之路6
七、其他新兴路径(一)因果表示学习核心理念:智能的核心是理解世界的因果机制,而非仅仅识别统计关联。该路径旨在让AI模型学会像人类一样,构建因果关系图,进行反事实推理(思考“如果当时…会怎样…...
双非统计本科入职大厂数据分析,我的CDA数据分析师二级备考经验
一、迷茫中寻路,锚定数据分析方向我本科就读于西安工程大学统计学专业,一所双非公办院校,既非985,也非211。和很多大学生一样,大学期间我曾无数次畅想过自己的第一份工作,却从未敢奢望,能有机会…...
普通人如何杀入AI赛道?(附岗位薪资与避坑指南)AI转行必看!
AI几乎成为了打工人的必修课。和大家交流过程中,最常见的一些问题:“现在转行AI还来得及吗?”、“我不懂代码,能做AI产品经理吗?”、“以及怎么转行做AI?”。 答案是:不仅来得及,而且…...
