UART协议解析
示例1:接收十六进制数据
- 波特率115200
- 停止位1位
- 数据位8位
- 发送十六进制数据0xABC 一共是12位

下面使用逻辑分析仪对uart信号进行捕获
- 连接好硬件
配置好逻辑分析仪上位机参数


点击捕获


以上是我们捕获到的信号,来对信号进行解析
uart协议由 起始位+数据位+停止位组成 这里我们并没有添加基偶校验,起始位1位+数据位8位+停止位1位
0XAB协议解析为 0110101011 我们去掉起始位和停止位,数据位为 1101 0101
又由于UART的数据位为LSB 所以我们实际得到的数据为: 1010 1011 即对应0xAB
再来看一下0x0C 协议解析为 00011 00001 掐头去尾之得到的数据为 0011 0000,LSB转化后就是0x0C,可以看到我们这里实际上是浪费了4位数据, 所以在发送十六进制数据的时候最好是八位一起
示例2:字符数据

这里ABC对应的数据为0x41= 65 0x42=66 0x43 = 67 实际上就是ASCII

示例3:添加换行



解释如下:
根据提供的逻辑分析仪截图,显示了一系列UART数据帧,包括十六进制数值 0x41、0x42、0x43、0x0D 和 0x0A。
0x41对应于ASCII字符 'A'0x42对应于ASCII字符 'B'0x43对应于ASCII字符 'C'
接下来的两个值 0x0D 和 0x0A 对应于回车(Carriage Return, CR)和换行(Line Feed, LF)控制字符:
0x0D是回车(CR),在ASCII中用于指示光标位置回到一行的开头。0x0A是换行(LF),在ASCII中用于指示光标移动到下一行。
在文本通信中,特别是基于Windows系统的环境,字符序列 CR 和 LF 一起使用 (\r\n) 来表示新的一行的开始。在Unix/Linux系统中,通常只使用换行(LF,\n)来表示新行,而在Mac系统的早期版本中,只使用回车(CR,\r)。
因此,0x0D 和 0x0A 表明您发送了 'ABC' 后跟一个新行命令。这符合您描述的发送 'ABC' 并换行的行为。
这么分析协议明明白白~
- 只调参数使用十六进制数据效率较高
- 传输较多数据时,使用字符更易懂,常用Cjson库,对系统资源以及性能要求较高,加DMA方式处理较好