STM32CubeMX+HAL库+USART接收不定长数据(定时器+串口接收中断)
概述在实际项目设计中程序常常会收发不定长的数据帧一般我们会约定一个帧协议帧协议中包含有帧头、帧尾、帧长度、校验一般接收时会判断帧头帧头有效后根据帧长度去接收不定长度的帧总体思路是通过拟定帧协议将不定长的数据帧转为已知长度的帧从而方便接收。但在没有拟定帧协议的情况下如何去接收不定长的数据呢本文提供自己的一些拙见欢迎批评指正如果有更好的方法也请不吝赐教非常感谢实现思路使用串口Recivice_IT或Recivice_DMA接收数据、使用定时器判断一帧是否接收完毕接收到最后一个字节后一段时间内未收到数据此工程以数据间隔大于1ms判断一帧接收完成时间可以修改记录接收到的数据。如果是仅仅需要存储数据而不需要解析的话如数据记录设备完全可以仅用Recivice_IT每次只接收一个数无限重复调用即可注好像可以使用看门狗替代定时器程序思路开启Recivice_IT接收第一个字节—接收完成回调函数中开启定时器同时重新打开Recivice_IT—如果定时器倒计时结束则为一帧接收完成如果未结束又进入接收完成回调函数则定时器重新计时并把接收到的数据转移硬件使用STM32F429IGT6正点原子阿波罗开发板方案验证通过USART1接收不定长数据接收完成后通过USART1原样发出操作步骤打开STM32CubeMX选择对应芯片选择SW调试模式选择外部高速时钟这块开发板使用的是无源晶振所以选择“Crystal/····”模式晶振时钟配置开启USART1选择异步模式波特率与长度校验等保持默认开启串口的中断开启TIM1、选择定时器时钟、我配置的主时钟是180M根据计算公式配置PSC和ARR最后得出的结果是1ms勾选TIM的溢出中断勾选生成独立.c/.h文件输入文件名、存储路径、选择IDE生成工程生成完毕打开工程12.开始编写代码为了方便就直接写在main.c/main.h中了/* main.c中定义一些数组 */uint8_tRxBuff;//接收缓冲区uint16_tRx_Len;//已接收长度uint8_tDataBuff[1000];//数据暂存至数组内/* 主函数while1之前添加这一行函数 */HAL_UART_Receive_IT(huart1,RxBuff,1);HAL库已经帮我们完成了串口接收中断的一系列处理过程我们只需要调用接收完成回调函数即可/* 在main.c中重写接收完成回调函数 */voidHAL_UART_RxCpltCallback(UART_HandleTypeDef*huart){DataBuff[Rx_Len]RxBuff;//转移接收数据Rx_Len;//计算当下这一帧接收的长度HAL_TIM_Base_Start_IT(htim1);//开启1ms倒计时HAL_UART_Receive_IT(huart1,RxBuff,1);//继续接收}同样HAL库已经帮我们完成了定时器溢出中断的一系列处理过程我们只需要调用、回调函数即可/* 在main.c中重写定时器溢出中断回调函数 */voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){if(htim-InstanceTIM1){HAL_UART_Transmit(huart1,DataBuff,Rx_Len,10);//验证是否成功接收Rx_Len0;}}实验现象不足之处虽然在编写代码的时候定义了DataBuff[1000]看起来好像是最大接收1000字节实际不然根据实际项目去定义数组大小数据接收后进行处理使用之后数组可以清除之后重新利用使用这种方式好像弥补了方案一的缺点省去人工定义最大长度的步骤但是这种方案也存在较大的缺点每接收一个字节都中断一次非常消耗系统资源尤其是HAL库中从中断到回调函数运行了不少的程序频繁的中断很可能造成数据溢出。在项目复杂度较小的情况下还行如果项目复杂度较大可能会导致系统运行异常。是否还有其他更好的办法我暂时还没有思路但是我又想到另一种接收不定长数据的方案

相关新闻

机械臂速成小指南(九):正运动学分析

机械臂速成小指南(九):正运动学分析

👨‍🏫🥰🥳需要机械臂相关资源的同学可以在我的CSDN主页中寻找哦🤖😽🦄 指南目录📖: 🎉🎉机械臂速成小指南(零点五)&…

2026/8/25 7:50:29 阅读更多 →
iOS平台经典软件移植实战:从源码适配到性能优化的完整指南

iOS平台经典软件移植实战:从源码适配到性能优化的完整指南

1. 项目缘起:为什么“经典移植”在今天依然是个技术活?最近在整理自己的数字资产,翻出了不少十几年前在PC和安卓上玩过的老游戏、用过的老软件。心血来潮想在自己的iPhone上重温一下,结果发现要么App Store里压根没有,…

2026/8/25 7:50:29 阅读更多 →
猫盘救砖全攻略:TTL串口与U-Boot实战修复ARM嵌入式设备

猫盘救砖全攻略:TTL串口与U-Boot实战修复ARM嵌入式设备

1. 从“砖头”到“复活”:一次完整的猫盘救砖之旅手头这台猫盘,已经在我抽屉里躺了快一年了。当初图便宜,从矿难后的“海鲜市场”淘来,本想刷个OneSpace系统当个轻量级的家庭NAS用,结果一顿操作猛如虎,直接…

2026/8/25 7:50:29 阅读更多 →

最新新闻

城市低空物流动态调度与风险协同建模方法论

城市低空物流动态调度与风险协同建模方法论

1. 这不是“答案速递”,而是一份可复用的建模方法论手记 深圳杯数学建模挑战赛2024年D题——“城市低空物流网络的动态调度与风险协同防控”——在开赛48小时内就冲上高校论坛热榜前三。我带过三届深圳杯集训队,也连续五年参与D题阅卷辅助工作&#xff0…

2026/8/26 10:03:57 阅读更多 →
RT-Thread嵌入式RTOS:从内核到生态的物联网开发实战解析

RT-Thread嵌入式RTOS:从内核到生态的物联网开发实战解析

1. 从“另一个选择”到“主流之选”:RT-Thread的十年蜕变 如果你在十年前问我,做嵌入式开发选什么实时操作系统,我大概率会推荐FreeRTOS或者uC/OS。那时候,国产的RT-Thread还像一个“小而美”的备选方案,知道的人不多&…

2026/8/26 10:03:57 阅读更多 →
Noxim仿真器:片上网络(NoC)性能评估与算法验证实战指南

Noxim仿真器:片上网络(NoC)性能评估与算法验证实战指南

1. 项目概述:从零认识Noxim仿真器如果你正在研究片上网络(NoC)或者多核处理器架构,那么“仿真器”这个词对你来说一定不陌生。在硬件设计的前期,我们不可能每次都流片来验证一个想法,这时候,一个…

2026/8/26 10:03:57 阅读更多 →
GitHub Pages博客重建实战:Jekyll+Cloudflare打造极速静态站点

GitHub Pages博客重建实战:Jekyll+Cloudflare打造极速静态站点

1. 项目概述:为什么我要重建我的GitHub Pages博客 几年前,我随手用Jekyll搭了个博客,扔在GitHub Pages上,想着能写点东西就行。那时候觉得,免费、省心、能绑定域名,还要啥自行车?确实&#xff…

2026/8/26 10:03:57 阅读更多 →
Ubuntu日志工具全解析:从journalctl到ELK,高效排障与监控实战

Ubuntu日志工具全解析:从journalctl到ELK,高效排障与监控实战

1. 项目概述:为什么我们需要日志工具?在Ubuntu服务器或者桌面系统的日常运维、开发调试中,你肯定遇到过这样的场景:某个服务突然挂了,网页打不开,或者系统响应变得异常缓慢。这时候,第一反应是什…

2026/8/26 10:03:57 阅读更多 →
AI Agent多模态数据存储架构重构:从性能瓶颈到统一底座实践

AI Agent多模态数据存储架构重构:从性能瓶颈到统一底座实践

1. 从“数据孤岛”到“统一底座”:为什么Agent时代必须重构存储? 最近和几个做AI Agent的朋友聊天,大家不约而同地提到了同一个痛点:数据。不是数据不够,而是数据太“乱”了。一个典型的Agent项目,可能同时…

2026/8/26 10:02:55 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →