请教,VC++ 串口编程问题。

来源:百度知道 编辑:UC知道 时间:2024/06/01 07:39:53
串口收到数据后自动触发事件,这个该怎么实现呢,希望有好心人能给解释一下

如果你使用的是底层api的话

可以起一个新线程,用于监听串口
同时使用ClearCommError查询串口是否有数据到来

具体步骤如下:

1、创建一个异步读/写的串口

HANDLE m_hComm;
m_hComm=CreateFile( m_port, GENERIC_READ |GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED,NULL);

m_port为端口号
FILE_FLAG_OVERLAPPED是关键

2、配置串口:包括超时、DCB、读写缓冲区

3、启动新线程
CWinThread* m_pCommThread;
m_pCommThread=AfxBeginThread(ThreadComm,pInfo,THREAD_PRIORITY_NORMAL,0,0); //开启串口线程

ThreadComm为线程回调函数
pInfo 为封装有所有要向线程传递的参数的结构体(类)指针

4、在线程回调函数中
循环查询串口是否有数据到来
DWORD dwError //串口错误码
COMSTAT cs; //串口状态结构体
while(pDoc->IsSerailOpen() //串口处于打开状态下)
{
ClearCommError(hComm,&dwError,&cs);
//调用ClearCommError,如果串口有数据到来,即串口读缓冲区中有数据
//则串口读缓冲区中的数据长度将存入cs.cbInQue变量(unsigned long型)
//如串口读缓冲区中无数据,则cs.cbInQue为0
//对cs.cbInQue作判断即可得知串口是否收到数据。
if(cs.cbInQue)
{
//串口有数据到来,进行处理
//