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的基础上加了一个编码实现

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

缺点:解析比较麻烦

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

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

作者:hssfscv

物联沃分享整理
物联沃-IOTWORD物联网 » STM32————串口发送和接收数据包

发表回复