本文已参与「新人创作礼」活动,一起开启掘金创作之路。
示波器读取SCI串口数据
串口
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),是一种异步收发传输器。UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。
UART通信协议
UART作为异步串口通信协议的一种,工作原理是将传输数据的每一个字符一位一位地传输。其中每一位(bit)的意义如下:
起始位:先发出一个逻辑“0”的信号,表示传输字符开始。
数据位:紧接着起始位之后。数据位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。
奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以次来校验数据传送的正确性。
停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率也就越慢。
空闲位:处于逻辑“1”状态,表示当前线路上没有数据传输。
波形向数据转换原则
- 空闲位是高,起始位是低,然后是串口的八位数据,然后停止位是高。最开始以低电平表示起始。
如图第一帧数据的读法为:0b01010101;
- 数据从低位往高位开始发送,所以读完之后要将8位数据位重新从后向前排列。 所以上面第一帧数据实际为:0b10101010=0xAA;
实例讲解
上图中有四帧数据,依次分别读作:
0b10000010(0x82);
0b01000010(0x42);
0b11110010(0xF2);
0b11010010(0xD2);
这并不表示它本身的数据,但将每个数据重新从后向前排列之后:
0b01000001(0x41)='A'
0b01000010(0x42)='B'
0b01001111(0x4F)='O'
0b01001011(0x4B)='K'
这样就用示波器读出了本来发送的数据。