非同步(异步)串行通信
非同步串口通信
学习目标:
- 解释串口通信,非同步通信,结构和一些专有名词是什么
- 串口通信的代码
- 解释多个比特的信息/包是怎样尽心交流的
- 软件上怎么实现“big banging”位触发
- 有效数据传输率和误差容忍范围
为了实现非周期串口通信,我们需要一些标识符号来区别哪里是传输开始,哪里是结束,所以传输内容的结构就是非常重要的。
传输格式
一些名词
- 空闲位(idle)
当我们不传输数据的时候,传输端口和接受端口之间的线段就处在这个状态,属于高电压位,即为1
- 起始位
告诉接收器这是要开始传输数据啦,用0来表示
- 结束位
可以是1位,也可以是两位告诉接收器已经结束啦,用1来表示。
波特率(baud rate)也叫符号率(symbol rate)
波特率是来描述传输的速率,即为一秒钟可以传输多少个字符(bit)。例如9600就是一秒钟可以传输9600 bit的数据
- 校验位(parity bit)
在一些时候由于噪音或者其他的原因会出现传输数据的错误,所以为了让接收器检测到传输是否出现了错误,就使用校验位,也可以不使用。
校验其实就是事先定义整个传输内容中1的个数,校验分为偶校验(even)和奇校验(odd)。如果要求1的个数为偶数个,就是偶校验,反之为奇校验
如果我们选择的是偶校验,一个传输内容中现在 已经有奇数个1,那么现在校验位上就得是1让整个传输内容中的1保持偶数个;如果传输内容已经有偶数个1的话,校验位就是0以保持偶数个1。选择奇校验则正好相反
格式
传输格式位:起始位+内容(二进制)+校验位+结束位
首先我们要知道每次会传输一个word,传输的内容除了word本身还包括起始位(start bit),校验位(parity bit)和结束位(stop bit)
要注意传输的内容是从左往右从lsb开始到msb结束
例子
- 9600,8,N,1就代表9600波特率,内容位8 bit,没有校验位。那么实际传输长度就是:1(起始位)+8(内容)+1(结束位)=10 bit
- 28800,8,E,2就代表28800波特率,内容位8 bit,偶校验位。那么实际传输长度就是:1(起始位)+8(内容)+1(校验位)+1(结束位)=11 bit
多word传输
上面说到的都是单个word的传输,那么多个word的传输就有一点点不一样。那就是全部的传输中没有校验位,并且每个word只有一个结束位
位触发
实现我们上面说到的非同步通信的技术就是位触发
看下面的伪代码,可以知道
- 在setup()中Tx被定为Mark(1)即为高电平(空闲位);
- 方法里,先把Tx置为SPACE(0)即为起始位
- 然后一位一位的判断是1还是0,然后传输
- 传输完一位,就要暂停一个bit的时间

换成循环的版本

我们需要知道该如何去取出每一位来,这里我们使用位运算


浙公网安备 33010602011771号