首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

串口设置有关问题!SetCommState函数

2012-02-29 
串口设置问题!SetCommState函数!各位大侠好,我最近在调试一个串口程序遇到个很奇怪的问题,我在SetCommStat

串口设置问题!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参数也是改变了的!不知道什么原因!还请各位帮我看看这个问题!


[解决办法]
说不定波特率不支持那么高的.
[解决办法]
mark,学习下

帮顶下。
[解决办法]

探讨

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

[解决办法]
可能是楼上所说的问题。
这个情况就是DCB有的成员设置不正确
或者是有的参数组合不允许
仔细看下帮助文档中
DCB的介绍。
[解决办法]
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的。
总之,楼主仔细看下



[解决办法]
dcb.StopBits = 1;
改为
dcb.StopBits = 0;
试试
[解决办法]
如果樓主UART是舊的架構(沒有類別),某些dcb設置的ioctl是不支援的
例如IOCTL_SERIAL_SET_QUEUE_SIZE :等~他會直接return false
[解决办法]
dcb.ByteSize = 9,好像是4-8位,没有九位的
[解决办法]
拿串口driver的mdd层调试看看

热点排行