12449|15

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

串口设置问题!SetCommState函数! [复制链接]

各位大侠好,我最近在调试一个串口程序遇到个很奇怪的问题,我在SetCommState串口时总是返回0,也就是设置失败,用GetLastError函数得到是87, 好像是参数错误!很奇怪 我在另一个程序中也是这么设置,而且也是可以通信的,把代码给各位看看!

if ((m_idComDev=CreateFile(strComPort,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL))==(HANDLE)-1)
        {
                MessageBox(_T("打开串口失败!"),_T("警告"));
                return FALSE;
        }

        RETAILMSG(1, (_T("[PLCDrv] CPLCDrvDlg::OpenConnection CreateFile com=%d ++++ \r\n"),strComPort));

        DCB dcb;
        //dcb.DCBlength=sizeof(DCB);
        BOOL cc =        GetCommState(m_idComDev,&dcb);       
        dcb.BaudRate = 115200;
        dcb.fParity =TRUE;
        dcb.fNull = FALSE;
        dcb.StopBits = 1;
        dcb.Parity =  NOPARITY;
        dcb.ByteSize = 9;
        BOOL bb =SetCommState(m_idComDev,&dcb);
        DWORD dw =GetLastError();

现在串口已经打开成功了。但是BOOL bb =SetCommState(m_idComDev,&dcb);一直是0.我调试发现dcd参数也是改变了的!不知道什么原因!还请各位帮我看看这个问题!

最新回复

楼主你先设置个正常点的看看?把PIN2和PIN3短接,自己跟自己通信即可,设置个罪常用的参数,比如9600,8N1,硬件肯定支持的,确认自己填参数的问题。  详情 回复 发表于 2012-5-19 22:54
点赞 关注

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
说不定波特率不支持那么高的.
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
mark,学习下

帮顶下。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 1 楼 baili35 的回复:

说不定波特率不支持那么高的.

波特率没问题吧,
dcb.ByteSize = 9;
不是4-8位么,会不会是这的问题呢
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

5
 
可能是楼上所说的问题。
这个情况就是DCB有的成员设置不正确
或者是有的参数组合不允许
仔细看下帮助文档中
DCB的介绍。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
BYTE StopBits;        /* 0,1,2 = 1, 1.5, 2 */
另外,楼主这里:
dcb.StopBits = 1;
设置的停止位是1.5而非1吧?
MSDN里面有一句话
“The use of 5 data bits with 2 stop bits is an invalid combination,
as is 6, 7, or 8 data bits with 1.5 stop bits.”
也就是:
5位数据位与2位停止位的组合
6,7,8位数据位与1.5位停止位的组合
都是invalid的。
总之,楼主仔细看下


 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
不好意思,dcb.ByteSize = 9;
确实是=8,=9是我测试dcd变量有没有变的!马上按朱工的说法改改看!很奇怪的问题!
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

8
 
dcb.StopBits = 1;
改为
dcb.StopBits = 0;
试试
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

9
 
还是不行,刚才看了下 我在SetCommState之后,再GetCommState发现dcd的值有恢复了!
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

10
 
如果樓主UART是舊的架構(沒有類別),某些dcb設置的ioctl是不支援的
例如IOCTL_SERIAL_SET_QUEUE_SIZE :等~他會直接return false
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 
这两天一直在测试这段程序,发现很奇怪,SetCommState(),在evc中好像都是返回0 但是我SetCommState()之后又GetCommState()发现dcd是可以改变的,但是我不知道SetCommState()为什么会总是返回0.经过昨天测试 baud在9600——115200串口通信都是正常了。很奇怪!不知道那位大侠有串口程序可以有空测试下看看SetCommState()是不是这样的!
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

12
 
dcb.ByteSize = 9,好像是4-8位,没有九位的
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

13
 
dcb.ByteSize = 9,好像是4-8位,没有九位的
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

14
 
拿串口driver的mdd层调试看看
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

15
 
dcb.StopBits = 1;
DCB.StopBits= ONESTOPBIT;//宏定义,停止位为1位的宏定义
 
 
 

回复

132

帖子

0

TA的资源

纯净的硅(初级)

16
 
楼主你先设置个正常点的看看?把PIN2和PIN3短接,自己跟自己通信即可,设置个罪常用的参数,比如9600,8N1,硬件肯定支持的,确认自己填参数的问题。
 
个人签名无线网络摄像机 ,高清网络摄像机,网络视频监控
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表