楼主的担心是没必要的,串口在发送一个字节时,实际上至少需发送10个比特位,第1位为起始位作为时序同步起始依据,接着8位数据,如果有校验,8数据位后会紧接着发送1位校验位,最后必须有至少1个停止位。
接收端在总线空闲时,一直等待0信号即起始位的到来,一旦起始位到来,即开始按照波特率一位一位的接收数据,只有接收足够的位数后才允许重新检索起始位,在接收过程中的1变到0,是不可能重新再识别为起始位的,一个字节接收完毕,还要有停止位做字节的结束,之后再等待下一个起始位。
串口通讯发送的多个字节不是连续的,字节间必须用停止位和起始位来隔开。每个字节都是分别同步的,以起始位做为同步起始依据,这样也可以保证了在双方波特率有微小误差时,不会因长时间通讯使误差累加导致错位。
所以你所说的把数据位误认为起始位问题只有一种情况可能会导致,就是在发送端发送一半时,接收端才接入到总线中来,此时才有可能会把0误识别为起始位,否则是不会有这个问题的。
|