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-25 21:52
如果有语言表达不到位,或者实验描述不清楚的,大家指出,小弟一定认真仔细作答!!!
D.lovers
2楼-- · 2019-12-26 01:27
干吗不用DMA?
擦鞋匠
3楼-- · 2019-12-26 03:31
自己先顶起来
lingdianhao
4楼-- · 2019-12-26 06:47
1.关于发送的时候RX被拉低,可以参考下面这个帖子。
https://www.amobbs.com/forum.php ... p;page=1#pid9827591
2.你说的停止位的差别可能和你分析的一样,检测TC时会有额外的时间,从你的TX数据看没毛病,至于为什么你的Modbus poll少收一个,你换个串口转USB再试试吧。
擦鞋匠
5楼-- · 2019-12-26 10:00
 精彩回答 2  元偷偷看……
janafar
6楼-- · 2019-12-26 14:57
物理层是232?485?TTL?说不定是收发器的事情呢

一周热门 更多>