api初始化串口
- 格式:doc
- 大小:28.50 KB
- 文档页数:3
/////////////////////1。
打开并配置串口// 初始化串口// 参数: port 串口号// BaudRate 速率BOOL CSerial::InitSerialPort(){CString csPortName;DWORD dwCfgSize;//串口配置数据结构的大小csPortName = AfxGetApp()->GetProfileString("串口选择","端口号",NULL);if(csPortName.GetLength() < 3) csPortName = "COM1";//打开串口m_hComPort = CreateFile(csPortName,GENERIC_READ | GENERIC_WRITE,0, // 串口设备必须是独占使用NULL, // no security attrsOPEN_EXISTING, //串口设备必须使用OPEN_EXISTING设置0, // 输入输出不能重叠NULL // hTemplate对于串口设备必须是NULL);if (m_hComPort == INVALID_HANDLE_VALUE){return FALSE;}//获得当前的串口默认配置GetCommConfig(m_hComPort,&m_CFG,&dwCfgSize);//以下是固定的串口初始值m_CFG.dcb.BaudRate = 4800;m_CFG.dcb.ByteSize = 8;m_CFG.dcb.fInX = 0;m_CFG.dcb.fOutX = 0;m_CFG.dcb.fOutxCtsFlow = 0;m_CFG.dcb.fRtsControl = 0;m_CFG.dcb.fParity = 0;m_CFG.dcb.Parity = 0;m_CFG.dcb.StopBits = 2;/*以下是预留的可更改串口初始值m_CFG.dcb.BaudRate = AfxGetApp()->GetProfileInt("串口配置","BaudRate",0);m_CFG.dcb.ByteSize = AfxGetApp()->GetProfileInt("串口配置", "ByteSize",0);m_CFG.dcb.fInX = AfxGetApp()->GetProfileInt("串口配置", "fInX",0);m_CFG.dcb.fOutX = AfxGetApp()->GetProfileInt("串口配置", "fOutX",0);m_CFG.dcb.fOutxCtsFlow = AfxGetApp()->GetProfileInt("串口配置", "fOutxCtsFlow",0);m_CFG.dcb.fParity = AfxGetApp()->GetProfileInt("串口配置", "fParity",0);m_CFG.dcb.fRtsControl = AfxGetApp()->GetProfileInt("串口配置", "fRtsControl",0);m_CFG.dcb.Parity = AfxGetApp()->GetProfileInt("串口配置", "Parity",0);m_CFG.dcb.StopBits = AfxGetApp()->GetProfileInt("串口配置", "StopBits",0);*///调用串口配置对话框// CommConfigDialog(csPortName,NULL,&m_CFG);// ;if(SetCommConfig(m_hComPort,&m_CFG,sizeof(m_CFG))){//保存当前串口的配置AfxGetApp()->WriteProfileInt("串口配置", "BaudRate",m_CFG.dcb.BaudRate);AfxGetApp()->WriteProfileInt("串口配置", "ByteSize",m_CFG.dcb.ByteSize);AfxGetApp()->WriteProfileInt("串口配置", "DCBlength",m_CFG.dcb.DCBlength);AfxGetApp()->WriteProfileInt("串口配置", "EofChar",m_CFG.dcb.EofChar);AfxGetApp()->WriteProfileInt("串口配置", "ErrorChar",m_CFG.dcb.ErrorChar);AfxGetApp()->WriteProfileInt("串口配置", "EvtChar",m_CFG.dcb.EvtChar);AfxGetApp()->WriteProfileInt("串口配置", "fAbortOnError",m_CFG.dcb.fAbortOnError);AfxGetApp()->WriteProfileInt("串口配置", "fBinary",m_CFG.dcb.fBinary);AfxGetApp()->WriteProfileInt("串口配置", "fDsrSensitivity",m_CFG.dcb.fDsrSensitivity);AfxGetApp()->WriteProfileInt("串口配置", "fDtrControl",m_CFG.dcb.fDtrControl);AfxGetApp()->WriteProfileInt("串口配置", "fDummy2",m_CFG.dcb.fDummy2);AfxGetApp()->WriteProfileInt("串口配置", "fErrorChar",m_CFG.dcb.fErrorChar);AfxGetApp()->WriteProfileInt("串口配置", "fInX",m_CFG.dcb.fInX);AfxGetApp()->WriteProfileInt("串口配置", "fNull",m_CFG.dcb.fNull);AfxGetApp()->WriteProfileInt("串口配置", "fOutX",m_CFG.dcb.fOutX);AfxGetApp()->WriteProfileInt("串口配置", "fOutxCtsFlow",m_CFG.dcb.fOutxCtsFlow);AfxGetApp()->WriteProfileInt("串口配置", "fOutxDsrFlow",m_CFG.dcb.fOutxDsrFlow);AfxGetApp()->WriteProfileInt("串口配置", "fParity",m_CFG.dcb.fParity);AfxGetApp()->WriteProfileInt("串口配置","fRtsControl",m_CFG.dcb.fRtsControl);AfxGetApp()->WriteProfileInt("串口配置", "fTXContinueOnXoff",m_CFG.dcb.fTXContinueOnXoff);AfxGetApp()->WriteProfileInt("串口配置", "Parity",m_CFG.dcb.Parity);AfxGetApp()->WriteProfileInt("串口配置", "StopBits",m_CFG.dcb.StopBits);AfxGetApp()->WriteProfileInt("串口配置", "wReserved",m_CFG.dcb.wReserved);AfxGetApp()->WriteProfileInt("串口配置", "wReserved1",m_CFG.dcb.wReserved1);AfxGetApp()->WriteProfileInt("串口配置", "XoffChar",m_CFG.dcb.XoffChar);AfxGetApp()->WriteProfileInt("串口配置", "XoffLim",m_CFG.dcb.XoffLim);AfxGetApp()->WriteProfileInt("串口配置", "XonChar",m_CFG.dcb.XonChar);AfxGetApp()->WriteProfileInt("串口配置", "XonLim",m_CFG.dcb.XonLim);return TRUE;}else return FALSE;// EscapeCommFunction(hComPort,SETDTR); // 设置DTR(PIN 4)信号为0,为RS-232芯片供电// EscapeCommFunction(hComPort,SETRTS); // 设置DTR(PIN 7)信号为0,为RS-232芯片供电}。