本帖最后由 zmwss 于 2013-11-25 23:29 编辑
大家好,遇到一个非常离奇的怪事,
PC和一颗51的MCU在串口通信时,大数据传输过程中,发现波特率减半。
具体过程如下:
1.PC端设置115200波特率
2.MCU上电,和PC自适应波特率成功。
3.开始数据传输、交互,pc端送60K数据给MCU,每帧数据135BYTE,每帧数据包括 :头 + 包号 + 128byte data +checksum. MCU先收完一帧数据,再判断头、 checksum是否正确,不对给PC端送出错机制AAH ,要求PC重新送前一帧数据。
PC端送完一帧数据后,接收MCU的应答信息(出错信息AAH 和解码成功信息55H), 如果2秒内没有接收到AA或55就重新送前一帧数据。
4.发现在大多数时候60K数据通信是成功的,没有问题,但偶尔会中断,提示重新送前一帧数据,就是发生了出错处理,不管重发多少次都不能重新建立通信。
5.用一个串口监控工具,监控MCU的RXD端PC重发的一帧数据也是按PC端的波特率送下来该帧数据,用监控工具监控MCU TXD端此时反馈回来的却是98H E6H。
6.调整监控工具的波特率为57600,正好是AAH.
7.初步可以判定MCU在收发数据过程把自适应设置好的波特率115200给改到了57600.导致接收的135BYTE数据不对,从而帧头和checksum出错,下位机送AAH,而此时由于波特率变为57600,导致PC收到98H E6H,从而通信中断。
麻烦各位帮忙分析下,怎么MCU设置好的波特率会发生改变,从115200变到57600.而大多数时候又能正确通信成功。谢谢!
|