姓名:赵宗明
学号:19021211230
【嵌牛导读】:STM32 串口通信 数据包
【嵌牛鼻子】:利用电脑端发送数据包至单片机,单片机进行数据解析
【嵌牛提问】:串行接口是连接单片机和PC机的一种简单方式。单片机一个字节是如何收发的?一串数据是如何收发的?
【嵌牛正文】:
单片机数据包的接收以及解析的基础是明白单片机一个数据是如何接收的。查阅Datasheet我们得到如下串口传输时序:
以上时序所说明的是串口发送一帧数据(一个字节)的时序图,时序图中串口发送的格式为:起始位(1bit)+数据位(8bit)+停止位(1bit)。
首先我们电脑端发送一个有效数据的数据格式为:‘空格’+ ‘元素号’+‘:’+‘数据’(例:“0:12 1:24 2:48 3:64”),格式如下所示
电脑串口将数据发送至单片机RX端,单片机该如何接收数据呢,再次查询单片机Datasheet,我们可以发现单片机串口中断这个功能,它每当接收一帧数据(8bit有效数据)就会进入一次中断,所以我们可以利用串口中断进行数据的解析。比如电脑端发送“空格+索引号+‘:’+‘1’+‘2’”。串口中断就会进入5次,我们就可以利用这4次中断分别提取有效数据的索引号和有效数据。我们可以利用状态机的方法来进行数据的解析,例如:
空格检测:第一次进入中断我们检测是否接受到了空格。检测到空格则下一帧数据我们检测数据所索引号,如果没接测到空格下一帧我们继续检测空格。
索引号提取:上一帧数据为空格时,这一帧直接将接收的数据赋值给提前定义好的数据索引号,并且下一帧准备检测冒号。
冒号检测:这一帧数据到来,检测所接收的数据是否为冒号,如果为冒号,则下一帧数据将提取有效数据。如果不是冒号,则将索引号置0 而且下一帧数据将重新从头开始检测空格。
数据提取:上一帧数据接收为冒号时,这一帧数据将接收的数据赋值给提前定义好的有效数据变量。
经过以上检测就会提取一组接收的有效数据。稳定而且不会出错。
一下为具体实现方法: