C语言串口通信助手代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

该程序全部由C写成没有C++ 更没用MFC

完全是自娱自乐给需要的人一个参考

#include "stdafx.h"

#include

#include "resource.h"

#include "MainDlg.h"

#include

#include

#include

HANDLE hComm;//用于获取串口打开函数的返回值(句柄或错误值)OVERLAPPED m_ov;

COMSTAT comstat;

DWORD m_dwCommEvents;

TCHAR cRecs[200],cSends[100]; //接收字符串发送字符串

char j=0,*cCom; //接收用统计数据大小变量端口选择

BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

{

switch(uMsg)

{

HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);

}

return FALSE;

}

/*系统初始化函数*/

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)

{

HWND hwndCombo1=GetDlgItem(hwnd,IDC_COMBO1);

ComboBox_InsertString(hwndCombo1,-1,TEXT("COM1"));

ComboBox_InsertString(hwndCombo1,-1,TEXT("COM2"));

ComboBox_InsertString(hwndCombo1,-1,TEXT("COM3"));

ComboBox_InsertString(hwndCombo1,-1,TEXT("COM4"));

ComboBox_InsertString(hwndCombo1,-1,TEXT("COM5"));

ComboBox_SetCurSel(hwndCombo1,0);

void CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime);

SetTimer(hwnd,1,1000,TimerProc);

return TRUE;

}

/*监视串口错误时使用的函数*/

bool ProcessErrorMessage(char* ErrorText)

{

char *Temp = new char[200];

LPVOID lpMsgBuf;

FormatMessage(

FORMAT_MESSAGE_ALLOCATE_BUFFER |

FORMAT_MESSAGE_FROM_SYSTEM,

NULL,

GetLastError(),

MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language

(LPTSTR) &lpMsgBuf,

NULL

);

sprintf(Temp, "WARNING: %s Failed with the following error:

\n%s\nPort: %d\n", (char*)ErrorText, lpMsgBuf, "com2"); MessageBox(NULL, Temp, "Application Error", MB_ICONSTOP); LocalFree(lpMsgBuf);

delete[] Temp;

return true;

}

bool openport(char *portname)//打开串口

{

hComm = CreateFile(portname, //串口号“com1”“com2” 调用方法:bool open; open=openport("com2");

GENERIC_READ | GENERIC_WRITE, //允许读写

0, //通讯设备必须以独占方式打开

0, //无安全属性

OPEN_EXISTING, //通讯设备已存在

FILE_FLAG_OVERLAPPED, //异步I/O

0); //通讯设备不能用模板打开

if (hComm == INVALID_HANDLE_VALUE) //如果被占用或是没有打开时返回的是这个错误代码

CloseHandle(hComm);

return FALSE;

}

else

return true;

}

bool setupdcb(int rate_arg)//设置port的属性

{

DCB dcb;

int rate= rate_arg;

memset(&dcb,0,sizeof(dcb));

if(!GetCommState(hComm,&dcb))//获取当前DCB配置

return FALSE;

// set DCB to configure the serial port

dcb.DCBlength = sizeof(dcb);

dcb.BaudRate = rate;

dcb.Parity = NOPARITY; //奇偶校验值0~4分别对应无校验、奇校验、偶校验、校验置位、校验清零

dcb.fParity = 0; //为1的话激活奇偶校验检查

dcb.StopBits = ONESTOPBIT;//停止位个数,0~2分别对应1位、1.5位、2位停止位

dcb.ByteSize = 8; //数据位数

相关文档
最新文档