CE串口接收数据不全

aiyun_hu 2009-12-08 05:49:07
我用的是115200波特率,用EVC做的在CE上要接收64K的数据,老是接收不全,请高手指点指点
...全文
374 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
aiyun_hu 2010-03-16
  • 打赏
  • 举报
回复
谢谢大家 最后高手指点 用了一个多媒体定时器 来轮循接受数据 问题得以解决
dxw777 2009-12-14
  • 打赏
  • 举报
回复
数据接收不全,可能是由于发送速度快于接收处理速度,串口调试助手的接收缓冲区溢出造成的。
可以自己写一个串口助手,别人的东西经常不可信。
宇帆 2009-12-09
  • 打赏
  • 举报
回复
用线程也是一次性读取1024个字节数据,分几次读取的 才能把你的64K数据读出来,你可以把数据读出来先放在存储单元中,或者保存中SD卡中,等接收接收完成 在从存储单元中去读取 在去画曲线

下面是我的串口接收程序 你可以参考 希望对你有帮助
/*******************************************************************************************
函数名称: CALLBACK CSerialPortDlg::OnCommRecv
描 述: 串口接收数据成功回调函数
输入参数: 无
输出参数: 无
返 回: FALSE: 失败; TRUE: 成功
********************************************************************************************/
void CALLBACK CSerialPortDlg::OnCommRecv(CWnd* pWnd, char *buf, int buflen)
{ CString tmp;

CSerialPortDlg * pDlg = (CSerialPortDlg*)pWnd;
CEdit *pRecvStrEdit = (CEdit*)pDlg->GetDlgItem(IDC_REC_DISP);
/* 取得控件指针 */
for (int i = 0; i < buflen; i++, buf++)
{
tmp.Format(_T("%c"), *buf); /* 将字符转换为字符串 */
pDlg->m_strRecDisp += tmp;
}

pRecvStrEdit->SetWindowText(pDlg->m_strRecDisp); /* 显示在窗口上 */
}
/*******************************************************************************************
函数名称: CSerialPortDlg::CommRecvTread
描 述: 串口接收线程
输入参数: LPVOID lparam: 线程参数,创建线程时传入
输出参数: 无
返 回: 0: 线程退出, 返回值没特殊含义
********************************************************************************************/
DWORD CSerialPortDlg::CommRecvTread(LPVOID lparam)
{
DWORD dwLength;
char *recvBuf = new char[1024];
CSerialPortDlg *pDlg = (CSerialPortDlg*)lparam;

while(TRUE)
{ /* 等待线程退出事件 */
if (WaitForSingleObject(pDlg->m_ExitThreadEvent, 0) == WAIT_OBJECT_0)
break;

if (pDlg->m_hComm != INVALID_HANDLE_VALUE)
{ /* 从串口读取数据 */
BOOL fReadState = ReadFile(pDlg->m_hComm, recvBuf, 1024, &dwLength, NULL);
if(!fReadState)
{
//MessageBox(_T("无法从串口读取数据!"));
}
else
{
if(dwLength != 0)
OnCommRecv(pDlg, recvBuf, dwLength); /* 接收成功调用回调函数 */
}
}
}

delete[] recvBuf;
return 0;
}
aiyun_hu 2009-12-09
  • 打赏
  • 举报
回复
cfanlwn
一般我们写EVC下的串口接收程序 都是用的接收线程的, 你以前开辟了64K的空间 会不会是你这次程序大了,内存没有那么大的存储空间了呢

我从一个硬件上采集了64k的数据,之后用一个网格把它呈曲线显示出来,之后对这个曲线的一些操作,要是这样大的话,那我该怎么办呢
宇帆 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 sibling520 的回复:]
波特率改为9600是没有问题的,但是速度太慢
我们的设备一次会采集大量的数据发上来,要是用9600的话,明显感觉机器慢的根蜗牛似的
[/Quote]用115200的不行?我平时都是用115200的
sibling520 2009-12-09
  • 打赏
  • 举报
回复
波特率改为9600是没有问题的,但是速度太慢
我们的设备一次会采集大量的数据发上来,要是用9600的话,明显感觉机器慢的根蜗牛似的
宇帆 2009-12-09
  • 打赏
  • 举报
回复
1、我用了一个CE上的串口调试工具,从PC上发送2k以上的数据,串口调试工具就会自动关闭
一般串口调试工具都是好的,如果会自动关闭,有可能是驱动的问题

2.后来我在CE上又写了一个直接收数据,只显示接收个数的小程序,在EVC上我开了64K的读缓冲,接收128K的数据 显示的个数是正常的,但是一放到我要用的程序里就不可以了,数据总是差一些,也没有什么规律。

一般我们写EVC下的串口接收程序 都是用的接收线程的, 你以前开辟了64K的空间 会不会是你这次程序大了,内存没有那么大的存储空间了呢
aiyun_hu 2009-12-09
  • 打赏
  • 举报
回复
feishanm
波特率不改小,可以吗,现在是要求波特率是115200
sibling520 2009-12-09
  • 打赏
  • 举报
回复
请问lz是怎么解决的阿,分享下经验
我现在都快给逼疯了,呵呵
feishanm 2009-12-09
  • 打赏
  • 举报
回复
速度太快了,把波特率改小一点
我之前也是同样的问题
sibling520 2009-12-09
  • 打赏
  • 举报
回复
兄弟我遇到同样的问题,同命相怜阿
aiyun_hu 2009-12-09
  • 打赏
  • 举报
回复
不好意思弄错了,用的是wince 5.0 ,EVC 4.0
aiyun_hu 2009-12-09
  • 打赏
  • 举报
回复

sunrain_hjb,你好
用的是CE4.0,发送端是另一个硬件程序控制的,目前还没法改的
aiyun_hu 2009-12-09
  • 打赏
  • 举报
回复
cfanlwn 你好
1.我用了一个CE上的串口调试工具,从PC上发送2k以上的数据,串口调试工具就会自动关闭
2.后来我在CE上又写了一个直接收数据,只显示接收个数的小程序,在EVC上我开了64K的读缓冲,接收128K的数据 显示的个数是正常的,但是一放到我要用的程序里就不可以了,数据总是差一些,也没有什么规律。
串口接受那边,我一个使用了一个CnComm类,还有一个是用OnTimer()事件来触发接收数据,连个都是一样数据还是接受不完全,在EVC上的程序,不知道该注意一些什么,望大侠指导一下
sunrain_hjb 2009-12-09
  • 打赏
  • 举报
回复
我说的慢一点,不是说波特率,而是你1S内发送的数据少一点。另外,你用的是什么硬件,WinCE是5.0还是6.0的?
宇帆 2009-12-09
  • 打赏
  • 举报
回复
1、先和PC机通过串口连接 PC发数据 WIN-CE用网上下载的串口调试工具测试 测试是不是你的驱动问题
2、如果驱动没有问题 在让PC机和你的串口程序测试 测试是不是你的EVC程序问题
3、EVC串口接收程序那里要注意,不能开辟的空间太大,有的时候系统没有那么大的存储空间
aiyun_hu 2009-12-09
  • 打赏
  • 举报
回复
现在目前测试就用PC的串口调试工具给ce发数据,wince 那头的程序接收就老是不够,那CE那头的程序 我改用什么方式去接收呢,需要哪些参数的设置要注意吗
mxm1986 2009-12-09
  • 打赏
  • 举报
回复
pc上搞一个串口调试工具。。然后两边将波特率设置的低一点。。我怀疑是不是你wince那头串口数据没有及时接受,导致数据buf直接覆盖丢失了。一点一点的试试吧
aiyun_hu 2009-12-09
  • 打赏
  • 举报
回复
慢点该怎么做哦,波特率是设好的,请具体一点好吗
sunrain_hjb 2009-12-09
  • 打赏
  • 举报
回复
你的数据发送速度是不是太快了,慢点试试看。
加载更多回复(12)

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧