流浪小子

  • 134 主题
  • 361 帖子
  • 1474 积分
  • 身份:版主
  • E币:740

【原创】串口流控的疑惑

2021-3-24 19:11:13 显示全部楼层
本帖最后由 流浪小子 于 2021-3-24 19:19 编辑

背景
这两天再用python刷电调的时候,遇到了必须要把DTR/DSR打开才能进行串口通信的问题,在此做个记录,也欢迎各位同道发表见解。

硬件连接
硬件连接示意图如下所示,电脑通过USB连接到Arduino,实际上是U转串,电脑所用端口为COM3.
1.png


问题描述
1.python代码与串口助手通信正常
2.串口助手和BLHeli软件与Ardunio+ESC 通信正常
3.python代码与Ardunio+ESC无法通信,读不出任何数据
2.png


问题分析
用串口监视软件对比python代码,串口助手及BLHeli软件与Arduino+ESC的建立过程,发现主要不同点在流控方面
3.png


问题解决
由于大概率是流控方面的问题,所以直接在代码中对流控进行设置。通过测试,最终确定只要在代码中将dsrdtr设为1,即可正常通信,与xonxoff及rtscts无关。
4.png



后续思考
串口用的不少,应该说用的很多,但流控接触确实比较少。之前一直认为DTR/DSR, RTS/CTS是必须有硬件连线才可以有的功能,现在看来则不然。说明对知识的掌握还是太片面了,那从头开始理一理。
1. 首先把串口引脚定义来明确下,由其是要关注下流控信号的流向。参考网址:https://arcelect.com/rs232.htm
5.png

2. 流控概念。参考网址:https://www.lammertbies.nl/comm/info/rs-232-flow-control        https://www.pccompci.com/Flow_Control.html#RTS/CTS
通读后得知
  •                   XON/XOFF一般不用于二进制数据传输,个人理解数据包含17 19的都不建议用
  •                   DTR/DSR 主要用于通信的建立(握手)
  •                   RTS/CTS才是专门为流控而设计的

3. 通过对以上资料的阅读,还是没有搞明白:
  •                   为什么只开启DTR/DSR就可以正常通信了
  •                   为什么xonxoff设置不起作用,至少从串口监视看,建立通讯的过程中没有起到作用
  •                   如果xonxoff确实没有起作用,那是否是xonxoff与dsrdtr相互配合,才真正的解决了问题




您需要登录后才可以评论 登录 | 立即注册

最新评论

楼层直达:

电子阔少

  • 93 主题
  • 377 帖子
  • 1169 积分
  • 身份:实习版主
  • 论坛新秀
  • E币:1291
电子阔少 2021-3-25 07:19:33 显示全部楼层
这硬件流控是靠软件实现的,用于流量情况指示的硬件连线。若软件不支持,光连上RTS和CTS是没有用的。

点评

现在只是usb接口,没有所谓的DTR/DSR RTS/CTS连线  详情 回复 发表于 2021-3-25 13:14

流浪小子

  • 134 主题
  • 361 帖子
  • 1474 积分
  • 身份:版主
  • E币:740
流浪小子 2021-3-25 13:14:26 显示全部楼层
电子阔少 发表于 2021-3-25 07:19
这硬件流控是靠软件实现的,用于流量情况指示的硬件连线。若软件不支持,光连上RTS和CTS是没有用的。 ...

现在只是usb接口,没有所谓的DTR/DSR RTS/CTS连线
快速回复
2
10
广告
关闭 热点推荐上一条 /5 下一条
快速回复 返回列表