STM32————串口发送和接收数据包

首先进行实验,对于代码在上一节的基础上,先定义新变量以及增加一个发送数据包函数:

本代码设置FF为包头,FE为包尾,中间为需要传输的数据,一次为4个,之后是接收数据包的函数

当标志位为1代表接收到数据,同时在H文件中申明以下变量(在main函数中调用)

之后修改中断函数,分为三种情况,当接收数据为FF时,表明接收到包头,之后需要开始传输数据。当为1时,表示开始接受数据组,本文设置为4个数据,因此当数据≥4时表明一个数据包传输完毕,之后RX状态为2发送包尾FE,表明一个数据包完整发送完毕。

本节的发送接收增加按键功能,按下一次原始数据+1并显示发送显示在OLED的TXRata上,接收时通过串口助手发送数据并显示结果在OLED上

结果如下:

1、发送数据包时的现象:

USART串口发送

2、串口发送STM32接收的情况

第二个是发送文本信息,与上边的类似,需要将包头改为@,包尾为/r/n(换行)

删除上面的两个函数,将中断函数修改为如下,只有RxFlag为0时才会执行读数据的操作,防止数据包的错乱:

主函数为:

使用strcmp将输入数据与指定的两个对比,如果一致执行指定命令,反之输出错误指令但仍然输出发送的文本。

实验结果如下:

首先在串口发送区输入灯亮指令:

之后是灯灭指令:

然后是其他输入:

理论知识如下:

首先对于HEX数据的传输主要有以下两种方式:

为防止包头包尾与传输的数据出现重复,主要有以下方法解决:

1、限制载荷的取值范围(防止传输的数据与包头包尾一致)

2、尽量选用固定包长

3、可选用多种包头包尾,如包头为FF\FD,包尾为FE\FC等方式

优点:适合发送原始数据,如陀螺仪数据、温湿度数据等

缺点:容易出现包头包尾与数据重复现象

之后是接收部分:

文本数据包就是在HEX的基础上加了一个编码实现

优点:指令比较直观,适合人机交互场景,蓝牙传输等

缺点:解析比较麻烦

文本的数据包接收状态机:

以上比较直观了解到数据包的发送与接收的理论内容。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hssfscv

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

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

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

打赏作者

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

抵扣说明:

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

余额充值