在上篇文章(数据通信的一些基础概念-CSDN博客)中已经叙述了数据通信的基础概念。本文重点叙述串口通信方式。
串口通信,是一种常见的计算机与外部设备之间的数据通信方式,它通过串行传输的方式将数据一位一位地发送和接收。
串口通信协议,是用于设备间串行数据传输的通信标准,它规定了通信双方传输的数据包的内容和格式。在串口通信中,常用的协议包括 RS-232、RS-422 和 RS-485 等。
串口通信的数据包由发送设备的 TXD 接口传输到接收设备的 RXD 接口。在串口通信的协议层中,规定了数据包的内容,它由起始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据,其组成如下图所示,
(#注意:“数据包”和“数据帧”是指同一概念的不同叫法,二者含义是一致的,本文不区分。)
⚫ 起始位和停止位
串口通信的一个数据帧是从起始位开始,直到停止位。数据帧中的起始位是由一个逻辑 0 的数据位表示,而数据帧的停止位可以是 0.5、1、1.5 或 2 个逻辑 1 的数据位表示,只要双方约定一致即可。(通过HAL_UART_Init 函数的UART_InitTypeDef 结构体类型设置)
⚫ 有效数据位
数据帧的起始位之后,就接着是数据位,也称有效数据位,这就是我们真正需要的数据, 有效数据位通常会被约定为 5、6、7 或者 8 个位长。有效数据位是低位(LSB)在前,高位(MSB) 在后。(通过HAL_UART_Init 函数的UART_InitTypeDef 结构体类型设置)
⚫ 校验位
校验位可以认为是一个特殊的数据位。校验位一般用来判断接收的数据位有无错误,检验 方法有:奇检验、偶检验、0 检验、1 检验以及无检验。
奇校验,是指有效数据为和校验位中“1”的个数为奇数。比如一个 8 位长的有效数据为: 10101001,总共有 4 个“1”,为达到奇校验效果,校验位设置为“1”,最后传输的数据是 8 位 的有效数据加上 1 位的校验位总共 9 位。
偶校验,与奇校验要求刚好相反,要求帧数据和校验位中“1”的个数为偶数。比如数据帧:11001010,此时数据帧“1”的个数为 4 个,所以偶校验位为“0”。
0 校验,是指不管有效数据中的内容是什么,校验位总为“0”。
1 校验,是指校验位总为“1”。
无校验,是指数据帧中不包含校验位。
一般是使用无校验的情况。
关于串口通信的应用,将在下一篇文章中重点叙述。