社区
嵌入开发(WinCE)
帖子详情
CE串口接收数据不全
aiyun_hu
2009-12-08 05:49:07
我用的是115200波特率,用EVC做的在CE上要接收64K的数据,老是接收不全,请高手指点指点
...全文
379
32
打赏
收藏
CE串口接收数据不全
我用的是115200波特率,用EVC做的在CE上要接收64K的数据,老是接收不全,请高手指点指点
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
MCGS昆仑通态串口
数据
收发驱动
在MCGS昆仑通态的嵌入版、通用版、网络版下面都可以使用,可以直接收发串口裸
数据
的驱动。
ce
串口通讯源码
ce
串口通讯源码,实现对
ce
,mobile用serialPort1读取串口的
数据
Zstack中
串口接收
和发送的调用
CC2530在Zstack协议栈或者TIMAC协议栈的
串口接收
和发送
数据
调用!
vb
串口接收
数据
程序
一个简单的232
串口接收
数据
程序,简单的接收,没有发送
Windows
CE
串口编程
用于在
CE
系统下的串口通信编程,可以在vs2008IDE 下运行调试。
嵌入开发(WinCE)
19,518
社区成员
41,565
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章