社区
Windows SDK/API
帖子详情
如何清空Com端口缓冲区中的数据?是用PurgeComm函数吗?
yushang0824
2003-08-21 04:06:36
在一个线程中读完Com后,要把当前的缓冲区数据清空,
防止下一次读取Com,又读到现在的数据
...全文
435
3
打赏
收藏
如何清空Com端口缓冲区中的数据?是用PurgeComm函数吗?
在一个线程中读完Com后,要把当前的缓冲区数据清空, 防止下一次读取Com,又读到现在的数据
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shuixin13
2003-08-21
打赏
举报
回复
PurgeComm( hComm, PURGE_TXCLEAR or PURGE_RXCLEAR
or PURGE_TXABORT or PURGE_RXABORT );
jpyc
2003-08-21
打赏
举报
回复
http://218.56.11.178:8020/web/technology.aspx
->串口通讯应用程序的解决方案
DWGZ
2003-08-21
打赏
举报
回复
PurgeComm(ComHandle, PURGE_RXABORT or PURGE_RXCLEAR);
PurgeComm(ComHandle, PURGE_TXABORT or PURGE_TXCLEAR);
定时器的用法的心得体会
在ClassWizard
中
响应ID为~Dlg
中
的WM_TIMER消息。 使用SetTimer(nIDEvent,time,NULL)来建立一个定时器,关闭定时器用KillTimer(nIDEvent)
函数
。 然后可以响应ON_WM_TIMER消息来响应一个定时器完成一次记时后的程序。 响应方式如下: void CTimeDlg::OnTimer(UINT nIDEvent) { if(nIDEvent==1000)//间隔为5秒 { //处理事件 } elseif(nIDEvent==1001)//间隔为10秒 { //处理事件 } CDialog::OnTimer(nIDEvent); } 以下是给出一个串口通信定时检查接收
数据
的部分代码 void CMyDlg::OnOpen
Com
() { // TODO: Add your control notification handler code here if( f_open_
com
==true ) { f_open_
com
= false; GetDlgItem(IDC_OPEN_
COM
)->SetWindowText("打开通信
端口
"); CloseHandle(h
Com
m); KillTimer(1000); /// 关闭定时器 return ; } SetTimer(1000, 1000, NULL); ///nIDEvent==1000,time=5000ms const char *
Com
No; DCB dcb; string temp("
COM
1");
Com
No = temp.c_str(); h
Com
m = CreateFile(
Com
No , GENERIC_READ|GENERIC_WRITE , 0 , NULL , OPEN_EXISTING , 0 , 0); if( h
Com
m==INVALID_HANDLE_VALUE ) /// 如果
端口
未打开 { MessageBox("打开通信
端口
出错!" , "
Com
m Error" , MB_OK); return ; } /// 将dcb地址传入,以取得通信参数 Get
Com
mState(h
Com
m,&dcb); /// 得知目前通信状态 dcb.BaudRate = CBR_9600; dcb.ByteSize = 8; /// 字节为8 dcb.Parity = NOPARITY; /// Parity为None dcb.StopBits = ONESTOPBIT; /// 1个停止位 if( !Set
Com
mState( h
Com
m , &dcb)){ MessageBox("通信
端口
设置出错!" , "Set Error" , MB_OK ); CloseHandle(h
Com
m); return; } GetDlgItem(IDC_OPEN_
COM
)->SetWindowText("关闭通信
端口
"); f_open_
com
= true; } void CMyDlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default char inbuff[1024]; DWORD nBytesRead , dwError;
COM
STAT cs; /// 取得状态 Clear
Com
mError( h
Com
m , &dwError , &cs); ///
数据
是否大于所准备的
缓冲区
if( cs.cbInQue > sizeof(inbuff) ) {
Purge
Com
m(h
Com
m ,
PURGE
_RXCLEAR ); /// 清除通信
端口
数据
return ; } ReadFile(h
Com
m , inbuff , cs.cbInQue , &nBytesRead , NULL ); //接收通信
端口
的
数据
inbuff[cs.cbInQue] = '\0'; MessageBox("打开通信
端口
出错!" , "
Com
m Error" , MB_OK); m_Receive.Format("%s",inbuff); UpdateData(false); CDialog::OnTimer(nIDEvent); } 李杨: for(int i=0; ;i++ ) { ... Sleep(5); if(i>...) {AfxMessageBox("错误XXX"); return;} }//跳出后记得停止一些机器动作
windows串口通信
函数
API
主要API
函数
CreateFile - 打开串口; ReadFile - 读
数据
; WriteFile - 写
数据
; CloseHandle - 关闭串口; Get
Com
mState - 取得串口当前状态; Set
Com
mState - 设置串口状态;
Purge
Com
m - 清除串口
缓冲区
; Clear
Com
mError - 清除串口错误或者读取串口现在的状态; Set
Com
mMask - 设置串口通信事件; Wait
Com
mEvent - 用来判断用Set
Com
mMask()
函数
设置的串口通信事件
WIN32 API串口通讯
函数
使用说明
WIN32 API串口通讯实例教程 第一节实现串口通讯的
函数
及串口编程简介 API
函数
不仅提供了打开和读写通讯
端口
的操作方法,还提供了名目繁多的
函数
以支持对串行通讯的各种操作。常用
函数
及作用下:
函数
名 作用 CreateFile 打开串口 Get
Com
mState
c++学习 | MFC —— 串口通信(三)接收
数据
文章目录一、Process
COM
MNotification消息处理
函数
二、读取串口
缓冲区
中
数据
函数
ReadBlock() 上一节
中
我们完成了串口监听线程的创建和线程响应
函数
的创建,在线程响应
函数
中
,有这样一条语句: if(
Com
Stat.cbInQue) //如果有
数据
到达 { pDlg->Process
COM
MNotification(EV_RXCHAR,0); } 一、Process
COM
MNotification消息处理
函数
.h文件 BOOL Process
COM
MNoti
串行通信API
函数
及参数说明
串行通信API
函数
及参数说明 ——以下多数内容摘自《Visual C++/Turbo C 串口通信编程实践(第2版)》 补充关于流控制概念 流控制解决的问题:当接收端
数据
处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送
数据
。因此流控制可以控制
数据
传输的进程,防止
数据
的丢失。PC机
中
常用的两种流控制是软件流控制XON/XOFF(继续/停止)和硬件流控制(包括RTS/CTS、DTR/CTS等)。 在编程时根据接收端
缓冲区
大小设置一个高位标志(可为
缓冲区
大小的75%)
Windows SDK/API
1,183
社区成员
22,335
社区内容
发帖
与我相关
我的任务
Windows SDK/API
Delphi Windows SDK/API
复制链接
扫一扫
分享
社区描述
Delphi Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章