#include<windows.h>
#include<iostream>
using namespace std;
DWORD WINAPI CommReceive(LPVOID lpParameter);
DWORD WINAPI CommSend(LPVOID lpParameter);
HANDLE m_hCom;
int main()
{
DCB dcb;
//打开串口
m_hCom=CreateFile("COM9", //端口号
GENERIC_READ|GENERIC_WRITE, //权限可读写
0,
NULL,
OPEN_EXISTING, //打开存在的端口
NULL, //以同步方式打开
NULL);
//设置串口参数
GetCommState(m_hCom, &dcb);
dcb.BaudRate=115200; //波特率
dcb.Parity=false; //无奇偶校验位
dcb.StopBits=0; //1位停止位
dcb.ByteSize=8; //数据宽度为8
if(!SetCommState(m_hCom, &dcb))
{
printf("error=%d\n",GetLastError());
}
//设置缓冲区大小
SetupComm(m_hCom,1024,1024);
//清空发送缓冲区和接受缓冲区
PurgeComm(m_hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
//超时设置
COMMTIMEOUTS TimeOuts;
//设定读超时
TimeOuts.ReadIntervalTimeout=0;
TimeOuts.ReadTotalTimeoutMultiplier=0;
TimeOuts.ReadTotalTimeoutConstant=2500;
//设定写超时
TimeOuts.WriteTotalTimeoutMultiplier=0;
TimeOuts.WriteTotalTimeoutConstant=2500;
//新建接受线程
HANDLE rThread=CreateThread(NULL,0,CommReceive,NULL,0,NULL);
CloseHandle(rThread);//关闭打开的线程句柄
//新建发送线程
HANDLE sThread=CreateThread(NULL,0,CommSend,NULL,0,NULL);
CloseHandle(sThread);//关闭打开的线程句柄
while(1)
{
;
}
//关闭串口
CloseHandle(m_hCom);
return 0;
}
DWORD WINAPI CommSend(LPVOID lpParameter)
{
DWORD dwBytesWrite;
char CommandStr[]="hello\n";
while(1)
{
//写数据
DWORD WriteFlag=WriteFile(m_hCom,(void *)CommandStr,strlen(CommandStr),&dwBytesWrite,NULL);
if(!WriteFlag)
{
cout<<"write error"<<endl;
}
//清空发送缓冲区
PurgeComm(m_hCom,PURGE_TXCLEAR);
//每5秒钟,重复发送一次数据
Sleep(5000);
}
return 0;
};
DWORD WINAPI CommReceive(LPVOID lpParameter)
{
char str[1024];
DWORD dwBytesRead;
DWORD dwErrorFlags;
COMSTAT ComStat;
memset(str,0,1024);
while(1)
{
//获取错误信息以及了解缓冲区相应的状态
ClearCommError(m_hCom,&dwErrorFlags,&ComStat);
//判断接受缓冲区是否为空
if(ComStat.cbInQue!=0)
{
//如果接受缓冲区状态信息不为空,则把接受信息打印出来
DWORD ReadFlag=ReadFile(m_hCom,&str[0],ComStat.cbInQue,&dwBytesRead,NULL);
if(!ReadFlag)
{
cout<<"read error"<<endl;
}
cout<<str;
memset(str,0,ComStat.cbInQue);
}
//清空接受缓冲区
PurgeComm(m_hCom,PURGE_TXCLEAR);
}
return 0;
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/36778.html