windows c语言 串口,【C语言】【windows】--串口通信

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

int s_to_n(int ilen,TCHAR * szNum){int j , q , num = 0 , ji;for ( j = 0 ; j < ilen ; j ++ ){ji = 1;for ( q = 0 ; q < j ; q ++ )ji *= 10 ;num += (szNum[ ilen - j - 1 ] - '0' ) * ji;}return num ;}void n_to_s ( int Num ,TCHAR *szBuf){TCHAR * szTemp = (TCHAR * )malloc ( 20 * sizeof(TCHAR ) );int i = 0 , j;

while ( Num ){szTemp[ i ] = Num%10 ;i++;Num /= 10 ;}for ( j = 0 ; j < i ; j ++ ){szBuf[j] = szTemp[i-1-j];}szBuf[i] = '\0' ;free ( szTemp );}void open_com ( HWND hwnd , TCHAR *pstr ){DCB dcb;COMMTIMEOUTS timeouts;hCom = CreateFile (pstr, GENERIC_READ | GENERIC_WRITE,

0, NULL, OPEN_EXISTING,

FILE_FLAG_OVERLAPPED | FILE_ATTRIBUTE_NORMAL, NULL);if (hCom == INVALID_HANDLE_VALUE){MessageBox (hwnd, TEXT ("串口初始化失败"), TEXT ("失败"), MB_OK);return ;}

if (! SetupComm (hCom, 1024, 1024))MessageBox (hwnd, TEXT ("初始化环境失败"), TEXT ("失败"), MB_OK);

if (! GetCommState ( hCom , &dcb ) )MessageBox (hwnd, TEXT ( "获取串口参数失败"), TEXT ("失败"), MB_OK); //设置串口参数dcb.BaudRate = 9600;dcb.ByteSize = 8;dcb.Parity = NOPARITY;dcb.StopBits = ONESTOPBIT;dcb.fBinary = TRUE;dcb.fParity = FALSE;

if ( ! SetCommState ( hCom , &dcb ) ) MessageBox ( hwnd , TEXT ( "设置串口参数失败") , TEXT ( "失败" ) , MB_OK ); //设置超时 timeouts.ReadIntervalTimeout = 500; timeouts.ReadTotalTimeoutConstant = 0; timeouts.ReadTotalTimeoutMultiplier = 0; timeouts.WriteTotalTimeoutMultiplier = 100; timeouts.WriteTotalTimeoutConstant = 500; if (! SetCommTimeouts (hCom, &timeouts)) MessageBox (hwnd, TEXT ("设置超时失败"), TEXT ("失败"), MB_OK);}DWORD send_to_com(HWND hwnd, char *pstr){OVERLAPPED m_osWrite;memset(&m_osWrite,0,sizeof(OVERLAPPED));m_osWrite.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);

DWORD dwBytesWritten=strlen (pstr );COMSTAT ComStat;DWORD dwErrorFlags;DWORD dwBytesWrite ;BOOL bWriteStat ;ClearCommError(hCom,&dwErrorFlags,&ComStat);if ( ! PurgeComm(hCom,PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR) ) MessageBox ( hwnd , TEXT ( "清空缓冲区失败" ),TEXT ( "失败" ) , MB_OK ) ;

bWriteStat = WriteFile (hCom, pstr, dwBytesWritten, &dwBytesWrite, &m_osWrite);

if (!bWriteStat){if(GetLastError () == ERROR_IO_PENDING){WaitForSingleObject (m_osWrite.hEvent, 1000);

return dwBytesWrite;}return 0;}return dwBytesWrite;}void recv_from_com ( OVERLAPPED *ov_Read , char *ucRxBuff ){COMSTAT ComStat; DWORD dwError=0; DWORD BytesRead=0;

ClearCommError ( hCom , &dwError , &ComStat );//检查串口接收缓冲区中的数据个数 ReadFile(hCom, //串口句柄 ucRxBuff, //输入缓冲区地址 ComStat.cbInQue, //想读入的字符数 &BytesRead, //实际读出的字节数的变量指针 ov_Read); //重叠结构指针

}

//这是上面声明的函数的定义

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值