#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;
};
VC 多线程同步方式操作串口
最新推荐文章于 2024-08-13 10:51:22 发布