您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页串口设置

串口设置

来源:二三娱乐


再谈串口DCB设置--串口开发不得不注意的问题

2007-12-14 22:40:59

标签:串口 开发 DCB

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://cnmtjp.blog.51cto.com/204390/55196

上篇文章谈到了串口DCB的基本设置,但是当我们以为可以给客户做“结案陈词”的时候,问题又出现了。共有4台PC机来测试程序,其中有3台机器,“普通串口”和“USB转串口”两种方式都正常运行程序,其中有一台“普通串口”方式不能使用。

更让人纳闷的事情在第二天出现了。3台正常的机器变成只有2台可正常运行了。于是我通过函数“GetCommStat”(The GetCommState function retrieves the current control settings for a specified communications device.)获取了串口的DCB状态。乍一看,在没有调用SetCommStat函数的情况下,波特率居然为38400,这是上次程序运行(在没有重起PC机的情况下)保存下来的值。

于是,我想到原因所在,原来我们做的另外一个程序(称为A程序)对串口的DCB做了流控制设置,而我们的现在不能正常运行的程序(称为B程序)不需要流控制设置,于是没有将A程序所做的设置改回来,造成了B程序串口不能正常通信。哇塞,原来就这么简单,但是却很难发现,这是我今天所做的最大发现。呵呵……串口的问题以后再也不会烦我了。好了,下面我们用程序示例讲一下,与大家共享,希望可以对大家有所帮助。

A程序的DCB如下所示:

// Set serial parameters

dcb.BaudRate = 57600; // Band rate

dcb.ByteSize = 7; // Data bit, either 7 or 8

dcb.Parity = 0; // Parity, must between 0 to 4

dcb.StopBits = 1; // Stop bit must between 0 to 2

dcb.fBinary = TRUE; // Bianry must be TRUE in Win32

dcb.fParity = FALSE;

dcb.fDtrControl = DTR_CONTROL_ENABLE;

dcb.fRtsControl = RTS_CONTROL_ENABLE;

dcb.fOutxCtsFlow = TRUE;

dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;

而B程序的DCB如下所示:

// Set serial parameters

dcb.BaudRate = 38400; // Band rate

dcb.ByteSize = 7; // Data bit, either 7 or 8

dcb.Parity = 0; // Parity, must between 0 to 4

dcb.StopBits = 1; // Stop bit must between 0 to 2

dcb.fBinary = TRUE; // Bianry must be TRUE in Win32

dcb.fParity = FALSE;

dcb.fDtrControl = DTR_CONTROL_ENABLE;

dcb.fRtsControl = RTS_CONTROL_ENABLE;

其他没设置的项就采用了上次所用的设置,B程序的实际配置如下所示:

----------------------------------------------------------------

dcb.BaudRate = 38400; // Band rate

dcb.ByteSize = 7; // Data bit, either 7 or 8

dcb.Parity = 0; // Parity, must between 0 to 4

dcb.StopBits = 1; // Stop bit must between 0 to 2

dcb.fBinary = TRUE; // Bianry must be TRUE in Win32

dcb.fParity = FALSE;

dcb.fDtrControl = DTR_CONTROL_ENABLE;

dcb.fRtsControl = RTS_CONTROL_ENABLE;

dcb.fOutxCtsFlow = TRUE; (默认情况下为FALSE,现保留了A程序的设置,于是导致了串口不能正常通信)

dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;

----------------------------------------------------------------

于是,我们将程序所有的配置都初始化了一次,正确的配置如下所示:

dcb.BaudRate = 38400; // Band rate

dcb.ByteSize = 7; // Data bit, either 7 or 8

dcb.Parity = 0; // Parity, must between 0 to 4

dcb.StopBits = 1; // Stop bit must between 0 to 2

dcb.fBinary = TRUE; // Bianry must be TRUE in Win32

dcb.fParity = FALSE;

dcb.fDtrControl = DTR_CONTROL_ENABLE;

dcb.fRtsControl = RTS_CONTROL_ENABLE;

dcb.fOutxCtsFlow = FALSE;

……

其他项的配置都采用串口最初的配置

然后串口的问题就OK了。

文章终于写完了,写下来发觉写东西真的好累,特别是要把一件事情讲得清清楚楚,以前只知道看好文章,在这里非常感谢那些分享自身知识和经验的好作者。

本文出自 “将弛直奔” 博客,请务必保留此出处http://cnmtjp.blog.51cto.com/204390/55196

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务