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),求大神解释。。。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
擦鞋匠
1楼-- · 2019-12-26 15:52
janafar 发表于 2017-8-14 17:22
物理层是232?485?TTL?说不定是收发器的事情呢

物理层是单片机(TTL电平)->485芯片->485转232模块-> 232模块转USB->上位机(Modbus Poll)
janafar
2楼-- · 2019-12-26 19:08
尝试把485芯片卸掉再看看
lingdianhao
3楼-- · 2019-12-26 19:48
擦鞋匠 发表于 2017-8-14 14:23
首先感谢大神回复。

关于Tx发送时Rx被拉低,链接上说Rx需要上拉电阻。

这个TX会影响RX是收发器的关系。我用过的基本上收发器都有这个问题,但是485是半双工的,发送的时候接收没有意义。因此软件时序上发送的时候关闭串口接收。

一周热门 更多>