【RT-Thread】串口接收数据并找出一帧完整的报文

本文主要记录基于 RT-Thread的串口接收数据,并找出完成的一帧报文
实现:

  • 完整的一帧数据发送出去,提示【找到一帧数据】
  • 不完整的一帧数据发出去,不做解析,2s后未收到数据,清空缓冲区
  • 单个字节接收的时间间隔定义为2s,间隔 2s 未收到数据,默认清空缓冲区

【测试结果】
在这里插入图片描述

0. 个人简介 && 授权须知

image-20230911133730620

📋 个人简介

  • 💖 作者简介:大家好,我是喜欢记录零碎知识点的菜鸟打工人。😎
  • 📝 个人主页:欢迎访问我的博客主页🔥
  • 🎉 支持我:点赞👍+收藏⭐️+留言📝
  • 📣 系列专栏:嵌入式开发专栏 🍁 🍁
  • 💬格言:写文档啊不是写文章,重要的还是直白!🔥

转载文章,禁止声明原创;不允许直接二次转载,转载请根据原文链接联系作者

若无需改版,在文首清楚标注作者及来源/原文链接,并删除【原创声明】,即可直接转载。
但对于未注明转载来源/原文链接的文章,我将保留追述的权利。

作者:积跬步、至千里

image-20230911133724204

1. 数据传输流程

在这里插入图片描述
在这里插入图片描述

2. 自定义串口数据协议

固定帧头:0x55 0x88
结束符: '\r\n'
在这里插入图片描述

3. rt-thread 代码

/************************************************************************************************************
* Copyright (c) 2024,xxxxxxxxxx公司
*
* 描    述: 	
*											
* 修改记录:
* 日期			  作者					备注
* 2023-07-11	  zyh 	 				首次创建,实现串口的中断接收
************************************************************************************************************/
#include <rtthread.h>
#include <string.h>						
#include <stdio.h>					
#include <rtdevice.h>					

#define U8_TO_U32(a,b,c,d)		    ((unsigned short)(((a) << 24) | ((b) << 16) | ((c) << 8) | (d)))
#define U8_TO_U16(high,low) 	    ((unsigned short)(((high) << 8) | (low)))

/* 串口设备名称 */
#define UART2_DEV_NAME "uart2" 
/*缓冲区大小*/
#define RB_SIZE 256

#define TASK_UART2_THREAD_TICK           20
#define TASK_UART2_THREAD_STACK_SIZE     2048
#define TASK_UART2_THREAD_PRIORITY       5



/* 用于接收消息的信号量 */
static struct rt_semaphore rx_sem2;

static rt_device_t serial2;
static uint8_t	uart2_init_flag &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积跬步、至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值