while (TRUE)
{
if (WaitCommEvent(ceSeries->m_hComm,&evtMask,0))
{
SetCommMask (ceSeries->m_hComm, EV_RXCHAR| EV_CTS | EV_DSR);
//GetCommMask(ceSeries->m_hComm, &evtMask);
//表示串口 收到字符
if (evtMask & EV_RXCHAR)
{
Sleep(10);
ClearCommError(ceSeries->m_hComm,&dwReadErrors,&cmState);
willReadLen = cmState.cbInQue ;
if (willReadLen <= 0)
{
continue;
}
readBuf = new BYTE[512];
ZeroMemory(readBuf,512);
//读取串口数据
ReadFile(ceSeries->m_hComm, readBuf, willReadLen , &actualReadLen,0);
}
}
}
20 个解决方案
#1
换的那块板子给的测试代码是开个线程,然后就一直运行,
while (TRUE)
{
readBuf = new BYTE[512];
ZeroMemory(readBuf,512);
//读取串口数据
ReadFile(ceSeries->m_hComm, readBuf, willReadLen , &actualReadLen,0);
......
}
就可以接受数据了,我的为什么就不可以呢,我的是等到有字符到就会触发啊,他的是一直在读串口
while (TRUE)
{
readBuf = new BYTE[512];
ZeroMemory(readBuf,512);
//读取串口数据
ReadFile(ceSeries->m_hComm, readBuf, willReadLen , &actualReadLen,0);
......
}
就可以接受数据了,我的为什么就不可以呢,我的是等到有字符到就会触发啊,他的是一直在读串口
#2
建议楼主, 再重新上电,多测几次,看是否都是:第一次能收到,之后就再也收不到。
也有可能是PC的串口被烧坏了。
也有可能是PC的串口被烧坏了。
#3
不可能,我测试了一上午,两台PC,4个串口
#4
你可以先用他的那个程序测试下,看是否能收到?
如果能收到,就可以排除硬件问题。
如果还是收不到,那就是赢家问题, 比如232的PHY是否有问题等等
软件方面:
建议把:
if (willReadLen <= 0)
{
continue;
}
删掉,测试下、
#5
我把所有相关的都删了
if (WaitCommEvent(ceSeries->m_hComm,&evtMask,0))
{
SetCommMask (ceSeries->m_hComm, EV_RXCHAR| EV_CTS | EV_DSR);
//GetCommMask(ceSeries->m_hComm, &evtMask);
//表示串口 收到字符
if (evtMask & EV_RXCHAR)
{
Sleep(10);
ClearCommError(ceSeries->m_hComm,&dwReadErrors,&cmState);
willReadLen = cmState.cbInQue ;
if (willReadLen <= 0)
{
continue;
}
都没要了,
我程序中只有一下的了
while (TRUE)
{
if(ReadFile(ceSeries->m_hComm, readBuf, 2, &actualReadLen,0));
{
if(..)
{
ReadFile(ceSeries->m_hComm, readBuf, 2, &actualReadLen,0);
}
...................
}
还有读不到数据,没反应
if (WaitCommEvent(ceSeries->m_hComm,&evtMask,0))
{
SetCommMask (ceSeries->m_hComm, EV_RXCHAR| EV_CTS | EV_DSR);
//GetCommMask(ceSeries->m_hComm, &evtMask);
//表示串口 收到字符
if (evtMask & EV_RXCHAR)
{
Sleep(10);
ClearCommError(ceSeries->m_hComm,&dwReadErrors,&cmState);
willReadLen = cmState.cbInQue ;
if (willReadLen <= 0)
{
continue;
}
都没要了,
我程序中只有一下的了
while (TRUE)
{
if(ReadFile(ceSeries->m_hComm, readBuf, 2, &actualReadLen,0));
{
if(..)
{
ReadFile(ceSeries->m_hComm, readBuf, 2, &actualReadLen,0);
}
...................
}
还有读不到数据,没反应
#7
也就是说 用:
也读不到数据?
如果是这样,就是你的开发板的串口有问题、
不过,你确认用上面那个程序 在你的板子行吗?
while (TRUE)
{
readBuf = new BYTE[512];
ZeroMemory(readBuf,512);
//读取串口数据
ReadFile(ceSeries->m_hComm, readBuf, willReadLen , &actualReadLen,0);
......
}
也读不到数据?
如果是这样,就是你的开发板的串口有问题、
不过,你确认用上面那个程序 在你的板子行吗?
#8
我就是用的他在上面测试的,这个测试工具也是等待字符才接受数据,所以没反应
#9
QQ:604914729 ,要不QQ聊
你可以进行6410 提供的UART 接口的RXD 与TXD短接,看你自己发送数据,自己能否收到?
再就是在232_PHY后,既是把开发板上那个连接PC的串口上的TXD与RXD短接。,看你自己发送数据,自己能否收到?
你可以进行6410 提供的UART 接口的RXD 与TXD短接,看你自己发送数据,自己能否收到?
再就是在232_PHY后,既是把开发板上那个连接PC的串口上的TXD与RXD短接。,看你自己发送数据,自己能否收到?
#10
这个代码可以,不过我的在mini2440和S3c6410中都正常啊,在他的板子上wince串口调试助手出现一样的问题,之前我还没有遇到过,看大家遇到没啊
#11
你用示波器测了RXD上有数据过来么?另外,建议你用16进制的方式显示数据看看。
#12
示波器有数据,显示也是16进制的
#13
我前面遇到过一次这个bug,你确认下是不是这种现象:
如果上电后pc先发数据,板子可以接收,而一旦板子发送数据,板子就不能再接收pc的数据了。
如果是这种情况,基本可以判断是驱动的问题,在驱动的发送函数里面把使能发送中断的语句去掉就好。
SL_TxIntrEx这个函数里面的EnSubINT(pHWHead, pHWHead->bTxINT);这一句去掉。
如果上电后pc先发数据,板子可以接收,而一旦板子发送数据,板子就不能再接收pc的数据了。
如果是这种情况,基本可以判断是驱动的问题,在驱动的发送函数里面把使能发送中断的语句去掉就好。
SL_TxIntrEx这个函数里面的EnSubINT(pHWHead, pHWHead->bTxINT);这一句去掉。
#14
他的程序收发都正常
我现在的问题主要是我的是等待串口事件,他的是一直查询串口,我怀疑他的串口驱动不支持等待事件
#15
正常来说串口的接收是中断的方式,如果你的驱动里面支持接收中断的话,用中断方式跟踪下。
#16
学习了。
#17
正在学习串口编程
mark
mark
#18
你是同步方式打开还是异步方式,WINCE下是不支持异步的,我看你的程序好象是异步啊
#19
什么都不要删,将Sleep(10);
改成Sleep(1);试看看
改成Sleep(1);试看看
#20
我把程序改了,他的驱动不支持字符触发事件
#21
#1
换的那块板子给的测试代码是开个线程,然后就一直运行,
while (TRUE)
{
readBuf = new BYTE[512];
ZeroMemory(readBuf,512);
//读取串口数据
ReadFile(ceSeries->m_hComm, readBuf, willReadLen , &actualReadLen,0);
......
}
就可以接受数据了,我的为什么就不可以呢,我的是等到有字符到就会触发啊,他的是一直在读串口
while (TRUE)
{
readBuf = new BYTE[512];
ZeroMemory(readBuf,512);
//读取串口数据
ReadFile(ceSeries->m_hComm, readBuf, willReadLen , &actualReadLen,0);
......
}
就可以接受数据了,我的为什么就不可以呢,我的是等到有字符到就会触发啊,他的是一直在读串口
#2
建议楼主, 再重新上电,多测几次,看是否都是:第一次能收到,之后就再也收不到。
也有可能是PC的串口被烧坏了。
也有可能是PC的串口被烧坏了。
#3
不可能,我测试了一上午,两台PC,4个串口
#4
你可以先用他的那个程序测试下,看是否能收到?
如果能收到,就可以排除硬件问题。
如果还是收不到,那就是赢家问题, 比如232的PHY是否有问题等等
软件方面:
建议把:
if (willReadLen <= 0)
{
continue;
}
删掉,测试下、
#5
我把所有相关的都删了
if (WaitCommEvent(ceSeries->m_hComm,&evtMask,0))
{
SetCommMask (ceSeries->m_hComm, EV_RXCHAR| EV_CTS | EV_DSR);
//GetCommMask(ceSeries->m_hComm, &evtMask);
//表示串口 收到字符
if (evtMask & EV_RXCHAR)
{
Sleep(10);
ClearCommError(ceSeries->m_hComm,&dwReadErrors,&cmState);
willReadLen = cmState.cbInQue ;
if (willReadLen <= 0)
{
continue;
}
都没要了,
我程序中只有一下的了
while (TRUE)
{
if(ReadFile(ceSeries->m_hComm, readBuf, 2, &actualReadLen,0));
{
if(..)
{
ReadFile(ceSeries->m_hComm, readBuf, 2, &actualReadLen,0);
}
...................
}
还有读不到数据,没反应
if (WaitCommEvent(ceSeries->m_hComm,&evtMask,0))
{
SetCommMask (ceSeries->m_hComm, EV_RXCHAR| EV_CTS | EV_DSR);
//GetCommMask(ceSeries->m_hComm, &evtMask);
//表示串口 收到字符
if (evtMask & EV_RXCHAR)
{
Sleep(10);
ClearCommError(ceSeries->m_hComm,&dwReadErrors,&cmState);
willReadLen = cmState.cbInQue ;
if (willReadLen <= 0)
{
continue;
}
都没要了,
我程序中只有一下的了
while (TRUE)
{
if(ReadFile(ceSeries->m_hComm, readBuf, 2, &actualReadLen,0));
{
if(..)
{
ReadFile(ceSeries->m_hComm, readBuf, 2, &actualReadLen,0);
}
...................
}
还有读不到数据,没反应
#6
http://download.csdn.net/source/870333
你用这个试试看,如果也不行,基本可以推测是硬件或驱动的问题。
你用这个试试看,如果也不行,基本可以推测是硬件或驱动的问题。
#7
也就是说 用:
也读不到数据?
如果是这样,就是你的开发板的串口有问题、
不过,你确认用上面那个程序 在你的板子行吗?
while (TRUE)
{
readBuf = new BYTE[512];
ZeroMemory(readBuf,512);
//读取串口数据
ReadFile(ceSeries->m_hComm, readBuf, willReadLen , &actualReadLen,0);
......
}
也读不到数据?
如果是这样,就是你的开发板的串口有问题、
不过,你确认用上面那个程序 在你的板子行吗?
#8
我就是用的他在上面测试的,这个测试工具也是等待字符才接受数据,所以没反应
#9
QQ:604914729 ,要不QQ聊
你可以进行6410 提供的UART 接口的RXD 与TXD短接,看你自己发送数据,自己能否收到?
再就是在232_PHY后,既是把开发板上那个连接PC的串口上的TXD与RXD短接。,看你自己发送数据,自己能否收到?
你可以进行6410 提供的UART 接口的RXD 与TXD短接,看你自己发送数据,自己能否收到?
再就是在232_PHY后,既是把开发板上那个连接PC的串口上的TXD与RXD短接。,看你自己发送数据,自己能否收到?
#10
这个代码可以,不过我的在mini2440和S3c6410中都正常啊,在他的板子上wince串口调试助手出现一样的问题,之前我还没有遇到过,看大家遇到没啊
#11
你用示波器测了RXD上有数据过来么?另外,建议你用16进制的方式显示数据看看。
#12
示波器有数据,显示也是16进制的
#13
我前面遇到过一次这个bug,你确认下是不是这种现象:
如果上电后pc先发数据,板子可以接收,而一旦板子发送数据,板子就不能再接收pc的数据了。
如果是这种情况,基本可以判断是驱动的问题,在驱动的发送函数里面把使能发送中断的语句去掉就好。
SL_TxIntrEx这个函数里面的EnSubINT(pHWHead, pHWHead->bTxINT);这一句去掉。
如果上电后pc先发数据,板子可以接收,而一旦板子发送数据,板子就不能再接收pc的数据了。
如果是这种情况,基本可以判断是驱动的问题,在驱动的发送函数里面把使能发送中断的语句去掉就好。
SL_TxIntrEx这个函数里面的EnSubINT(pHWHead, pHWHead->bTxINT);这一句去掉。
#14
他的程序收发都正常
我现在的问题主要是我的是等待串口事件,他的是一直查询串口,我怀疑他的串口驱动不支持等待事件
#15
正常来说串口的接收是中断的方式,如果你的驱动里面支持接收中断的话,用中断方式跟踪下。
#16
学习了。
#17
正在学习串口编程
mark
mark
#18
你是同步方式打开还是异步方式,WINCE下是不支持异步的,我看你的程序好象是异步啊
#19
什么都不要删,将Sleep(10);
改成Sleep(1);试看看
改成Sleep(1);试看看
#20
我把程序改了,他的驱动不支持字符触发事件