当前位置: 首页 > 面试题库 >

从代码禁用pyserial中的DTR

华甫
2023-03-14
问题内容

我正在尝试使用pyserial将数据发送到arduino。但是,当我打开COM端口时,它会将DTR设置为低电平并重置板。但是,我已经设置了arduino代码,因此必须按住两个按钮1秒钟,使其进入串行接收模式。如果可能的话,我宁愿不必在arduino引导时进行串行输入。

显然,您可以修改serialWin32.py文件,更改以下内容:

self._dtrState = win32.DTR_CONTROL_ENABLE

至:

self._dtrState = win32.DTR_CONTROL_DISABLE

但是,有什么方法可以直接在我的python脚本中直接禁用它吗?我还需要对所有系统执行此操作。我不想强迫人们仅使用此脚本来更改其基本串行配置。

串行端口如下打开:

 com = serial.Serial(port, baud, timeout=1);

更新:
最后,我找到了一种适用于我的设置的解决方案。因为我不需要一直都做串行数据,所以只有当我将设备置于串行接收模式时,我才找到了一种从arduino本身禁用串行连接重置的方法。

许多帖子说,可以通过在5V和复位之间放置一个〜100
Ohm电阻来禁用DTR复位。但是我不希望这成为永久的事情。因此,我在PD5和复位之间放置了一个电阻。然后,在软件中:

void setup() {
    //.......
    DDRD &= ~(_BV(PD5)); //Set PD5 as input initially
    PORTD |= (_BV(PD5)); //Set high
    //.......
}

inline void setResetDisable(bool state)
{
  if(state)
    DDRD |= (_BV(PD5)); //Set PD5 as output to put 5V on reset line
  else
    DDRD &= ~(_BV(PD5)); //set back to input mode
}

所以现在,当我想进入串行模式时,我调用setResetDisable(true),该电阻在100欧姆电阻和复位引脚上抛出5V电压,从而防止DTR将其拉低并复位芯片:)然后我只调用setResetDisable(false
),当我退出串行模式时,可以正常编程该芯片。


问题答案:

应该 能够在打开端口之前禁用DTR,如下所示:

com = serial.Serial()
com.port = port
com.baudrate = baud
com.timeout = 1
com.setDTR(False)
com.open()

但是,在Windows上的当前pyserial(2.6)版本上这样做会引发以下异常:

..., line 315, in setDTR
ValueError: Attempting to use a port that is already open

这似乎是一个错误,该错误已在源的最新版本SVN
445版于2011年12月29日修复(请参见http://pyserial.svn.sourceforge.net/viewvc/pyserial/trunk/pyserial/serial/serialwin32。
py?view =
log),并带有注释:

允许在Win32上打开之前设置setRTS,setDTR(以设置初始状态),文档更新

看起来好像刚刚错过了2.6版本(2011年11月2日上载,请参阅: https
//pypi.python.org/pypi/pyserial)。

此外,查看setDTR()POSIX的当前实现(在serialposix.py中),似乎
该错误未修复, 并且如果端口未打开则抛出异常,因此跨平台解决方案看起来不太可能。



 类似资料:
  • pySerial 是 Python 用来开发串口应用程序的工具包,支持多平台。

  • 我已经搜索了,但没有找到任何关于如何在Visual Studio代码中禁用引用(或完全禁用codelens)的信息,它们对我来说非常无用和烦人。

  • 问题内容: 如果可以的话,如何在Wicket的JavaScript代码中调用Java代码(例如方法)。 问题答案: 呃 正确的答案应该是ajax回调。您可以手动将js编码为挂钩到wicket js,也可以在java中通过wicket组件设置回调。例如,从AjaxLazyLoadPanel中: 本示例说明如何将回调代码添加到Wicket中的任何组件。在浏览器中触发OnDomReady事件后,加载页面

  • 我在下面的代码中得到安全证书错误(源代码)。例外情况是: javax.net.ssl.sslHandShakeException:Sun.Security.Validator.ValidatorException:PKIX路径构建失败:Sun.Security.Provider.CertPath.SunCertPathBuilderException:找不到请求目标的有效证书路径 如何禁用安全证书

  • 本文向大家介绍Golang中禁止拷贝的实现代码,包括了Golang中禁止拷贝的实现代码的使用技巧和注意事项,需要的朋友参考一下 前言 Go中没有原生的禁止拷贝的方式,所以如果有的结构体,你希望使用者无法拷贝,只能指针传递保证全局唯一的话,可以这么干,定义 一个结构体叫 noCopy,要实现 sync.Locker 这个接口 方法如下: 然后把 noCopy 嵌到你自定义的结构体里,然后 go ve