社区
嵌入开发(WinCE)
帖子详情
wince 6.0下串口接收数据有误
leonliao
2009-10-30 11:28:51
s3c6410的板子,WINCE6.0下我从串口读取数据时总是发生接收的数据不准确现象,我调试的时候看每次串口缓冲没有满,应该没有溢出,但是根据接收的数据画出来的图形看,数据不准确现象是周期性的。
现在不知道什么原因,如何解决好.
恳请大家帮帮忙!
...全文
221
19
打赏
收藏
wince 6.0下串口接收数据有误
s3c6410的板子,WINCE6.0下我从串口读取数据时总是发生接收的数据不准确现象,我调试的时候看每次串口缓冲没有满,应该没有溢出,但是根据接收的数据画出来的图形看,数据不准确现象是周期性的。 现在不知道什么原因,如何解决好. 恳请大家帮帮忙!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
powerDesire
2010-10-21
打赏
举报
回复
还是没有搞懂是怎么解决的 哎
sibling520
2009-12-18
打赏
举报
回复
多谢了,受到
leonliao
2009-12-10
打赏
举报
回复
给你回复了!
sibling520
2009-12-09
打赏
举报
回复
还有能不能给我把InterruptDone函数的源文件发一份,我的email; xixi319322@yahoo.com.cn
非常感谢
sibling520
2009-12-09
打赏
举报
回复
lz你是怎么解决的,我也遇上了这个拦路虎,
leonliao
2009-11-06
打赏
举报
回复
非常感谢各位的帮忙!
波特率是对的。我采用的就是异步接收的方式。是我的接受缓冲中的数据溢出了!
ProgrammerNO1
2009-11-05
打赏
举报
回复
[Quote=引用 11 楼 zhangwenlang 的回复:]
引用 3 楼 programmerno1 的回复:
跟异步通信有啥关系
请问CE6.0里串口能用异步通信了吗?
[/Quote]
仅供参考。。
zhangwenlang
2009-11-05
打赏
举报
回复
读串口那边SLEEP一下,跟SLEEP时间长度有关系
zhangwenlang
2009-11-05
打赏
举报
回复
[Quote=引用 3 楼 programmerno1 的回复:]
跟异步通信有啥关系
[/Quote]请问CE6.0里串口能用异步通信了吗?
arm9linuxpp
2009-11-05
打赏
举报
回复
[Quote=引用 5 楼 heyme 的回复:]
如果串口的Fifo没有溢出,那么有可能是你定义的存放数据的Buffer溢出了。
[/Quote]
我觉得这个应该是重点
han_qj
2009-11-04
打赏
举报
回复
我也在为接收数据丢失问题烦恼.看了上面的代码,自己设置的也没什么问题,就是大批量数据到达时收不全.请高手一起指点一下.
xqhrs232
2009-11-02
打赏
举报
回复
也为通信数据丢问题困扰.
烂番
2009-11-02
打赏
举报
回复
dcb.BaudRate = nBaud;//设置串口的通讯速度
波特率匹配否?
HeyMe
2009-10-31
打赏
举报
回复
如果串口的Fifo没有溢出,那么有可能是你定义的存放数据的Buffer溢出了。
宇帆
2009-10-31
打赏
举报
回复
可以先不画图形,让6410跟PC机通信,保证你的6410串口是好的,一步步测试
leonliao
2009-10-30
打赏
举报
回复
怎么没人帮忙啊!?
youyou6115
2009-10-30
打赏
举报
回复
是不是串口设置的不正确
int open_com(int nPort, int nBaud)
{
if(m_bOpened==TRUE)//如果串口已被打开,则返回
{
RETAILMSG(1,(TEXT("the com2 is opened already...")));
return(TRUE);
}
char szPort[15];
DCB dcb;
// wsprintf(szPort,"COM%d",nPort);
CString tempstr;
tempstr.Format(_T("%d"),nPort);
CString str_port;
str_port=_T("COM")+tempstr;
memcpy(szPort,str_port,str_port.GetLength()*2);
for(int i=0;i<str_port.GetLength()*2;i++)
{
if(i%2==0)
szPort[i/2]=szPort[i];
}
// //打开串口,不支持重叠操作,所以倒数第二个参数要设置成0
// CreateFile ((LPCTSTR)("com2:"), GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING,0, NULL);
// m_hComDev=CreateFile((LPCTSTR)szPort,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,
// FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
m_hComDev=CreateFile(TEXT("com1:"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,
0, NULL);
// const WCHAR *g_szDrvRegPath = L"HKEY_LOCAL_MACHINE\\Drivers\\BuiltIn\\SER2410_com2";
// m_hComDev=ActivateDevice(g_szDrvRegPath,0);
if(m_hComDev==0 || m_hComDev==INVALID_HANDLE_VALUE ){
// CString str;
// str.Format(_T("com1 open. lasterror=%d"),GetLastError());
RETAILMSG(1,(TEXT("open error=%d\r\n"),GetLastError()));
RETAILMSG(1,(TEXT("the com1 opened fail\r\n")));
return (FALSE);
}
else
{
// CString str;
// str.Format(_T("com1 open. lasterror=%d"),GetLastError());
// RETAILMSG(1,(TEXT("the com1 opened ")));
}
memset(&m_OverlappedRead,0,sizeof(OVERLAPPED));
memset(&m_OverlappedWrite,0,sizeof(OVERLAPPED));
//串口超时参数设置
COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout = 10;
CommTimeOuts.ReadTotalTimeoutMultiplier = 10;
CommTimeOuts.ReadTotalTimeoutConstant = 50;
CommTimeOuts.WriteTotalTimeoutMultiplier = 1000;
CommTimeOuts.WriteTotalTimeoutConstant = 0;
if(!SetCommTimeouts(m_hComDev, &CommTimeOuts))
{
MessageBox(NULL,_T("can not setcommtimeout"),TEXT("Error"),MB_OK);
}
//hEvent读写事件,因为串口是异步通讯,操作可能被其他进程堵塞,程序可以通过检查该时间
//来得知是否读写完毕。事件将在读写完成后,自动设置为有效。
// m_OverlappedRead.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
// m_OverlappedWrite.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
//配置串行端口
//得到端口的默认设置信息
GetCommState (m_hComDev, &dcb);
//改变DCB结构设置
dcb.DCBlength = sizeof( DCB );
GetCommState( m_hComDev, &dcb );
dcb.BaudRate = nBaud;//设置串口的通讯速度
dcb.ByteSize = 8;//设置字节位数
dcb.StopBits = ONESTOPBIT; //每字节一位停止位
//初始化缓冲区中的信息 清除
PurgeComm(m_hComDev,PURGE_TXCLEAR|PURGE_RXCLEAR);
//SetupComm设置串口的读写缓冲区大小
if( !SetCommState( m_hComDev, &dcb ) ||
!SetupComm( m_hComDev, 10000, 10000 ) )//||
// m_OverlappedRead.hEvent == NULL ||
// m_OverlappedWrite.hEvent == NULL )
{
// if( m_OverlappedRead.hEvent != NULL )
// CloseHandle( m_OverlappedRead.hEvent );
// if( m_OverlappedWrite.hEvent != NULL )
// CloseHandle( m_OverlappedWrite.hEvent );
CString str;
str.Format(_T("SetupComm error. lasterror=%d"),GetLastError());
MessageBox(NULL,str,TEXT(" Error"),MB_OK);
CloseHandle( m_hComDev );
return FALSE;
}
//设置端口上指定信号的状态
// SETDTR: 发送DTR (data-terminal-ready)信号
// SETRTS: 发送RTS (request-to-send)信号
// EscapeCommFunction (m_hComDev, SETDTR);
// EscapeCommFunction (m_hComDev, SETRTS);
m_bOpened = TRUE;
return m_bOpened;
}
ProgrammerNO1
2009-10-30
打赏
举报
回复
跟异步通信有啥关系
zhangwenlang
2009-10-30
打赏
举报
回复
不能用异步通信吧,你读串口线程时间要设置一下
WINCE
6.0
下的串口通讯
WINCE
6.0
下的串口通讯,使用VS2005开发SerialSample
WinCe
6.0
串口程序
x86
WinCe
6.0
串口调试助手应用程序
labview编写
wince
6.0
兼容性串口
在Labview平台下开发
wince
6.0
程序,利用兼容模式串口实现读写功能,
数据
的上传和下载,解决了Visa串口在
wince
中不能使用的问题
wince
6.0
系统下的labview串口程序
labview成功实现了在
wince
系统下的串口发送和接收
wince
6.0
串口调试工具
wince
6.0
串口调试工具,没什么好介绍
嵌入开发(WinCE)
19,524
社区成员
41,565
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章