平时是逻辑1,然后会有一个跳0的起始位,然后发送数据,然后校验位然后停止位
时钟驱动下,传输数据,LSB先发,你看到01100100,从人类角度最后发的最高位,c语言写的是0b00100110,16进制是8421是0x2 421.这个数发出去后,异步时钟驱使下的得到数据、
电磁干扰还有电线长后有电容,此时有可能变为10110010这是不对的,现实通讯会遇到这个问题。
使用过采样避免错误,以一定速度来发送数据,在接收端我用比约定好的波特率快一些速度来看数据。在目前芯片中默认速度是16倍速度来查看接收数据。
会用中间三个bit值,来进行投票,选取采样多的,或者丢弃重传
时钟有误差,刚才假设时钟准确数据有干扰,如果两者时钟不是严格同频率。
因为有数据帧的格式,所以只要在一个数据帧的起始到结束的时间内误差不超过一个bit,就能使接受端每个时钟沿每个clock对准发送意图当中每一个bit。
因为帧的存在,每次发送都会在帧的开头进行对其,使误差不被累计
发送端一个起始位,八个数据位加一个停止位,接收端会以16倍速率进行采样,采样结果就是从接收端看,采样到中间三个比特或是16次采样当中最中间的那一次采样,最晚不能玩过最后一个比特发送沿的后沿,最早不能早过最早一个比特在发送端的前沿。
发射1000HZ接受只要950-1050直接就可以了
校验
UART采用奇偶校验
最后一位+1是偶数就是偶校验,+1是奇数就是奇校验
奇偶校验不能发现所有错误,两个地方翻转就会无法确认
人体UART