c++ 串口通信 mfc vc++

1 概要

1.1 环境:vc++6.0 + windows xp

1.2 功能:串口通信

2 代码

2.1 读串口代码

void CTest5Dlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	HANDLE  hCom ;  //全局变量,串口句柄
	hCom = CreateFile ( "COM2" , //COM1口
		GENERIC_READ | GENERIC_WRITE ,  //允许读和写
		0,  //独占方式
		NULL ,
		OPEN_EXISTING ,  //打开而不是创建
		0 ,  //同步方式
		NULL ) ;
	if ( hCom == ( HANDLE ) - 1 )
	{
		AfxMessageBox ( "打开COM失败!" ) ;
		//return  FALSE ;
	}
	
	
	SetupComm ( hCom , 1024 , 1024 ) ; //输入缓冲区和输出缓冲区的大小都是1024
	COMMTIMEOUTS TimeOuts ; //设定读超时
	TimeOuts . ReadIntervalTimeout = 1000 ;
	TimeOuts . ReadTotalTimeoutMultiplier = 500 ;
	TimeOuts . ReadTotalTimeoutConstant = 5000 ; //设定写超时
	TimeOuts . WriteTotalTimeoutMultiplier = 500 ;
	TimeOuts . WriteTotalTimeoutConstant = 2000 ;
	SetCommTimeouts ( hCom , & TimeOuts ) ; //设置超时
	DCB dcb ;
	GetCommState ( hCom , & dcb ) ;
	dcb . BaudRate = 9600 ; //波特率为9600
	dcb . ByteSize = 8 ; //每个字节有8位
	dcb . Parity = NOPARITY ; //无奇偶校验位
	dcb . StopBits = TWOSTOPBITS ; //两个停止位
	SetCommState ( hCom , & dcb ) ;
	PurgeComm ( hCom , PURGE_TXCLEAR | PURGE_RXCLEAR ) ;
	
	//同步读串口
	
	char str [ 100 ] ;
	DWORD wCount ; //读取的字节数
	BOOL bReadStat ;
	bReadStat = ReadFile ( hCom , str , 100 , & wCount , NULL ) ;
	if ( ! bReadStat ) 
	{ 
		AfxMessageBox ( "读串口失败!" ) ; 
	} 
	
	SetDlgItemText(IDC_EDIT1, str);
}

2.2 写串口代码

void CTest6Dlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	// TODO: Add your control notification handler code here
	HANDLE  hCom ;  //全局变量,串口句柄
	hCom = CreateFile ( "COM3" , //COM1口
		GENERIC_READ | GENERIC_WRITE ,  //允许读和写
		0,  //独占方式
		NULL ,
		OPEN_EXISTING ,  //打开而不是创建
		0 ,  //同步方式
		NULL ) ;
	if ( hCom == ( HANDLE ) - 1 )
	{
		AfxMessageBox ( "打开COM失败!" ) ;
		//return  FALSE ;
	}
	
	
	SetupComm ( hCom , 1024 , 1024 ) ; //输入缓冲区和输出缓冲区的大小都是1024
	COMMTIMEOUTS TimeOuts ; //设定读超时
	TimeOuts . ReadIntervalTimeout = 1000 ;
	TimeOuts . ReadTotalTimeoutMultiplier = 500 ;
	TimeOuts . ReadTotalTimeoutConstant = 5000 ; //设定写超时
	TimeOuts . WriteTotalTimeoutMultiplier = 500 ;
	TimeOuts . WriteTotalTimeoutConstant = 2000 ;
	SetCommTimeouts ( hCom , & TimeOuts ) ; //设置超时
	DCB dcb ;
	GetCommState ( hCom , & dcb ) ;
	dcb . BaudRate = 9600 ; //波特率为9600
	dcb . ByteSize = 8 ; //每个字节有8位
	dcb . Parity = NOPARITY ; //无奇偶校验位
	dcb . StopBits = TWOSTOPBITS ; //两个停止位
	SetCommState ( hCom , & dcb ) ;
	PurgeComm ( hCom , PURGE_TXCLEAR | PURGE_RXCLEAR ) ;
	
	//同步xie串口
	char lpOutBuffer [ 100 ] ;
	DWORD dwBytesWrite = 100 ;
	COMSTAT ComStat ;
	DWORD dwErrorFlags ;
	BOOL bWriteStat ;
	ClearCommError ( hCom , & dwErrorFlags , & ComStat ) ;
	bWriteStat = WriteFile ( hCom , lpOutBuffer , dwBytesWrite , & dwBytesWrite , NULL ) ;
	if ( ! bWriteStat ) { AfxMessageBox ( "写串口失败!" ) ; }
}

3. 运行结果 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值