打开10及以上串口

打开10及以上串口

2014年8月20日10:54:34

	CString sPort;
	sPort.Format(_T("\\\\.\\COM%d"),portNo);

	/** 打开指定的串口 */   
	m_hComm = CreateFile(sPort,  /** 设备名,COM1,COM2等 */   
		GENERIC_READ | GENERIC_WRITE, /** 访问模式,可同时读写 */     
		0,                            /** 共享模式,0表示不共享 */   
		NULL,                         /** 安全性设置,一般使用NULL */   
		OPEN_EXISTING,                /** 该参数表示设备必须存在,否则创建失败 */   
		0,                            /** 同步方式*/
		0);  








### 回答1: 打开串口是通过调用串口库的函数来实现的。下面是一个示例代码: ```c++ #include <iostream> #include <fstream> #include <string> #include <Windows.h> HANDLE hSerial; // 串口句柄 bool OpenSerialPort(const std::string& portName, int baudRate) { hSerial = CreateFile(portName.c_str(), GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (hSerial == INVALID_HANDLE_VALUE) { std::cerr << "无法打开串口" << portName << std::endl; return false; } DCB dcbSerialParams = { 0 }; dcbSerialParams.DCBlength = sizeof(dcbSerialParams); if (!GetCommState(hSerial, &dcbSerialParams)) { std::cerr << "获取串口状态失败" << std::endl; CloseHandle(hSerial); return false; } dcbSerialParams.BaudRate = baudRate; dcbSerialParams.ByteSize = 8; dcbSerialParams.StopBits = ONESTOPBIT; dcbSerialParams.Parity = NOPARITY; if (!SetCommState(hSerial, &dcbSerialParams)) { std::cerr << "设置串口状态失败" << std::endl; CloseHandle(hSerial); return false; } return true; } void CloseSerialPort() { CloseHandle(hSerial); std::cout << "串口已关闭" << std::endl; } int main() { std::string portName = "COM1"; int baudRate = 9600; if (OpenSerialPort(portName, baudRate)) { // 打开串口成功后,可以在这里进行读或写操作 // 关闭串口 CloseSerialPort(); } return 0; } ``` 上述代码中,`OpenSerialPort` 函数用于打开串口,其中需要传入要打开串口名称(如 "COM1")和波特率参数(如 9600)。在函数中,通过调用 `CreateFile` 函数打开串口,并使用 `GetCommState` 和 `SetCommState` 函数来配置串口的通信参数。 当打开串口成功后,可以在 `OpenSerialPort` 函数的返回位置进行串口的读或写操作。这里只是演示了打开串口并立即关闭的过程,具体的串口通信操作根据需求可以进一步扩展。 ### 回答2: 打开串口的程序如下: ```cpp #include <stdio.h> #include <Windows.h> int main() { HANDLE hComm; // 串口句柄 const char* portName = "COM1"; // 串口名称 DWORD accessMode = GENERIC_READ | GENERIC_WRITE; // 打开模式 DWORD shareMode = 0; // 共享模式 SECURITY_ATTRIBUTES saAttr = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; // 安全属性 DWORD flagsAndAttributes = FILE_ATTRIBUTE_NORMAL; // 属性标志 HANDLE hTemplate = NULL; // 模板句柄 // 打开串口 hComm = CreateFile(portName, accessMode, shareMode, &saAttr, OPEN_EXISTING, flagsAndAttributes, hTemplate); if (hComm == INVALID_HANDLE_VALUE) { printf("串口打开失败\n"); return 1; } // 配置串口参数 DCB dcbSerialParams = { 0 }; dcbSerialParams.DCBlength = sizeof(dcbSerialParams); if (!GetCommState(hComm, &dcbSerialParams)) { printf("获取串口参数失败\n"); return 1; } dcbSerialParams.BaudRate = CBR_9600; // 波特率 dcbSerialParams.ByteSize = 8; // 数据位 dcbSerialParams.Parity = NOPARITY; // 校验位 dcbSerialParams.StopBits = ONESTOPBIT; // 停止位 if (!SetCommState(hComm, &dcbSerialParams)) { printf("配置串口参数失败\n"); return 1; } printf("串口打开\n"); // 做其他操作... CloseHandle(hComm); // 关闭串口 return 0; } ``` 关闭串口的程序非常简单,只需调用 `CloseHandle()` 函数关掉串口句柄即可。在上述程序中已经演示了关闭串口的操作。 ### 回答3: 打开串口的程序: #include<fcntl.h> #include<termios.h> int openSerialPort(const char *port) { // 打开串口 int fd = open(port, O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { perror("打开串口失败!\n"); return -1; } // 配置串口参数 struct termios options; tcgetattr(fd, &options); cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); options.c_cflag |= (CLOCAL | CREAD); options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); options.c_oflag &= ~OPOST; options.c_cc[VTIME] = 0; options.c_cc[VMIN] = 0; tcsetattr(fd, TCSANOW, &options); return fd; } 关闭串口的程序: #include<unistd.h> void closeSerialPort(int fd) { // 关闭串口 close(fd); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值