stm32的串口时序,发送等待时间与停止位之间的关系,求指教

2019-12-25 18:51发布

本帖最后由 擦鞋匠 于 2017-8-14 10:31 编辑

开发环境:Keil+stm32f103zet6

实验描述:
图中所示的Tx和Rx是相对单片机而言的。
这段时间在倒腾modbus,经过调试我发现数据在发送(从单片机向Modbus Poll发送)的时候,Modbus Poll少接收一个字节,或者接收到最后一个字节,但是其值是0xFF(CRC16低字节丢失或者为oxFF)。
最终我定位到串口底层发送时没有延时(也就是没有坚持到TC置位就直接发送下一字节数据)。
于是乎,我就用逻辑分析仪看看<1>没有检测TC置位和<2>检测TC置位时两者的波形有什么区别。。。

实验现象(大家对比着看):
<1> 没有检测TC置位时(19200,8位数据,无校验,1位停止位)
02.png (23.95 KB, 下载次数: 0) 下载附件 2017-8-14 10:25 上传

实验问题:
<1> 为什么单片机Tx处于发送状态时Rx是处于低电平(如图所示),我没理解为什么。
PS:Modbus Poll少接收一个字节数据,是否是因为Tx发送时,Rx没有置低导致的,如第二张图所示。
<2> 看波形,这个while(XXX)等待所用的时间刚好是一个bit所用的时间(19200bps下大约是是52us),就好像是使用2个停止位。
于是乎,我关闭while(XXX),而是使用2个停止位,又会出现我之前的现象(Modbus Poll少接收一个字节,或者接收到的最后一个字节为0xFF),求大神解释。。。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。