当前位置: 代码迷 >> WinCE >> 串口设置有关问题!SetCommState函数
  详细解决方案

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

热度:104   发布时间:2016-04-28 13:35:06.0
串口设置问题!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层调试看看
  相关解决方案