中易网

MFC串口接收数据

答案:1  悬赏:10  
解决时间 2021-12-24 05:42
MFC串口接收数据
最佳答案
使用MSComm控件串口接收数据,一般设置成SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
并且串口每次接收到的数据个数是不确定的,如果你自己确定需要接收到多少个数据的话,就好办了。
//全局变量
BYTE Comm_Packet_Len; //需要接收到的数据个数
BYTE Comm_DataBuffer[20]; //依次存放串口接收到的数据
long Comm_Packet_Index; //每次收到数据个数,并标志数据应放在全局数组位置的索引
//每次处理完数据后清空,为下一次接收做准备
void CEOLDlg::OnMscomm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
long len=0, k=0; //转换为数组时使用的变量
BYTE rxdata[204]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp; //字符型变量
int temp = 0; //临时变量
unsigned char ecuchecksum = 0; //ecu回传校验码

if(m_ctrlComm.GetCommEvent() == 2) //事件值为2表示接收缓冲区内有字符
{ //以下你可以根据自己的通信协议加入处理代码
variant_inp = m_ctrlComm.GetInput();//读缓冲区
safearray_inp = variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len = safearray_inp.GetOneDimSize(); //得到有效数据长度

for(k = 0; k < len; k++) //将ColeSafeArray型变量转换为BYTE型数组
{
safearray_inp.GetElement(&k, rxdata + k);//转换为BYTE型数组
}

for(temp = 0; temp < len; temp++)
{
Comm_DataBuffer[Comm_Packet_Index + temp] = rxdata[temp];
}

Comm_Packet_Index += len;

if(Comm_Packet_Index == Comm_Packet_Len)//接收到的数据个数等于
{
//处理接收到的数据
}
}

}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
今天我做了幽门螺杆菌呼气试验 阳性 C=3000
都能印印刷商城怎么去啊,我要去那办事
狗狗在不停的抽搐
滦平县承德中国农业银行24小时自助银行(文华
如何搞好基层设备管理工作?
面部用电波拉皮除皱,有危险吗
为什么好友对我空间照片评论在最新动态上不显
我想买一款电热毯,但是我不要那种插电源的。
幼儿园设计风格哪种好?
佳美数码盛大演艺地址好找么,我有些事要过去
怎么写好进度报告
下巴假体多少钱
未婚女性公务员体检时候还要被检查下体的??
2岁半宝宝有疝气太瘦能开刀吗
压力管道元件制造出厂资料都有啥
推荐资讯
小孩子尿道下裂怎么办
脖子上的皱纹怎么去?有没有什么按摩方法可以
中国移动4G网络厦门什么时候开始运行
如何查看济南电影院的影讯?
装一颗活动牙晚点还能再种牙吗,因为还是学生
常州SGS报告,常州SGS检测中心?
女朋友的母亲患过精神分裂,不知道会不会遗传
惜爱的意思是什么?惜爱的释义是什么啊?
怎么鉴定猪宝真假?
青春就像一只壁虎是什么意思
从武汉骑自行车去嘉鱼县 想知道详细路线以及
查案的意思是什么?查案的释义是什么啊?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?