串口通信笔记
发布日期:2021-09-16 16:46:47 浏览次数:2 分类:技术文章

本文共 1849 字,大约阅读时间需要 6 分钟。

串口通信主要用到下面几个函数:

CreateFile 打开通信端口
CloseHandle 关闭通信端口
GetCommState 取得端口的参数
SetCommState 设置端口参数
WriteFile 端口发送数据
ReadFile 端口读取数据
ClearCommError 清除端口错误,并取得信息
PurgeComm 清除数据缓冲区
SetCommMask 设置触发事件
WaitCommEvent 等待事件触发
EscapeCommFunction 控制端口的硬件状态
GetCommModemState 取得端口硬件线路状态

(1)串口同步通信

Handle hComm=CreateFile("COM1",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0); //打开COM1端口

if(hComm==INVALID_HANDLE_VALUE)

//打开端口失败

else
{

DCB dcb;

GetCommState(hComm,&dcb);//取得端口状态
dcb.BaudRate=CBR_9600; //波特率设为9600
dcb.ByteSize=8;//字节为8位
dcb.Parity=NOPARITY;//无校验
dcb.StopBits=ONESTOPBIT;//1位停止位

if(!SetCommState(hComm,&dcb))

{
//端口状态设置失败
CloseHandle(hComm);
}

else

//端口设置成功

}

读数据

char inbuff[1024];

DWORD nBytesRead,dwEvent,dwError;

COMSTAT cs;

//取得状态

ClearCommError(hComm,&dwError,&cs);

if(cs.cbInQue>sizeof(inbuff))//数据是否大于缓冲区

{

PurgeComm(hComm,PURGE_RXCLEAR);

return;

}

ReadFile(hComm,inbuff,cs.cbInQue,&nBytesRead,NULL);

....

发送数据

...

WriteFile(hComm,SendData,sizeof(SendData),&nBytesSend,NULL);

...

 

(2)串口异步通信

使用同步通信时,读数据时若端口没有数据,程序将一直停在ReadFile处,程序当掉.解决的办法是使用异步通信.

Handle hComm=CreateFile("COM1",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,

FILE_FLAG_OVERLAPPED,//使用异步通信方式

0); //打开COM1端口

if(hComm==INVALID_HANDLE_VALUE)

//打开端口失败

else
{

DCB dcb;

GetCommState(hComm,&dcb);//取得端口状态
dcb.BaudRate=CBR_9600; //波特率设为9600
dcb.ByteSize=8;//字节为8位
dcb.Parity=NOPARITY;//无校验
dcb.StopBits=ONESTOPBIT;//1位停止位

if(!SetCommState(hComm,&dcb))

{
//端口状态设置失败
CloseHandle(hComm);
}

else

//端口设置成功

long EvWait;

EvWait=EV_ERR + EV_BREAK + EV_RXCHAR;

if(!SetCommMask(hComm,EvWait))

//设置失败

 

}

 

收数据

TEvent *WEvent;

OVERLAPPED OverLap;

TWaitResult EE;

unsigned long EvWait;

 

WEvent=new TEvent(NULL,true,false,"");

OverLap.hEvent=WEvent->Handle;

if(WaitCommEvent(hComm,&EvWait,&OverLap))

{

EE!=wrSignaled)return;//未触发

WEvent->ResetEvent();

if(EvWait & EV_RXCHAR)

{

ReadFile(..);

}

转载地址:https://blog.csdn.net/xgbing/article/details/1497128 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:锁定屏幕相关知识
下一篇:ModelResult问题

发表评论

最新留言

不错!
[***.144.177.141]2024年02月29日 07时25分39秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

kafka消费者直接存在mysql中_【Canal】利用canal实现mysql实时增量备份并对接kafka 2019-04-21
python中readlines()函数_python中读取文件函数read()、readline()、readlines()的区别 2019-04-21
python入门之基础语法第四关输入输出答案_Python基本语法入门,基础 2019-04-21
mysql在存储过程仍_mysql存储过程 2019-04-21
失败的人生图片_早安励志经典语录精辟的一句话人生感悟 2019-04-21
如何设画面大小_如何设计旅游类项目?分享3种设计思路 2019-04-21
开启web_2021秋招四大网申时间、网申地址汇总(持续更新),德勤、安永、普华永道已开启!... 2019-04-21
从右边开始放_停路边,被人恶意放钉子,爆胎,报警无果,要我找监控 2019-04-21
读写测试_UFS 3.0读写测试数据曝光:秒杀UFS 2.1和eMMC 2019-04-21
注册小程序要多少钱_开发一个微信小程序商城要多少钱? 2019-04-21
mysql 实现id自增序列_MySQL分表自增ID解决方案 2019-04-21
catti二级笔译综合能力真题_CATTI韩语二级口译真题及考场回忆版 2019-04-21
攻防世界 适合做桌面_世界杯大冷门,双方实力悬殊,德国队为何输给了韩国队... 2019-04-21
可涂抹什么让指纹加深_手机镀膜是什么?液体玻璃手机镀膜和膜结手机纳米防护的区别... 2019-04-21
node静态服务器优缺点_Node —— BFF 2019-04-21
新风系统风速推荐表_PE管还是PVC管?现场评测新风系统两种管道对比 2019-04-21
华为社招嵌入式软件面试_嵌入式软件面试那点事 2019-04-21
心电图多少为正常范围_一个人的正常尿酸是多少,不管体重多少,不超过这个范围都算正常... 2019-04-21
两个集合相等的例题_人教A版高中数学必修一1.1.集合间的基本关系优质课公开课课件、教案... 2019-04-21
用流密码实现加密java语言_使用java的流密码 2019-04-21