windows 串口编程例子
来源:互联网 发布:苏芬战争 知乎 编辑:程序博客网 时间:2024/05/01 17:35
此文版权属于作者所有,任何人、媒体或者网站转载、借用都必须征得作者本人同意!
今天需要测试一些串口设备,写了一个简单例子,贴到这里,做个备忘。
HANDLE dev;char buf[1024];BOOL set_opt_1(){ printf("%s\n", __FUNCTION__); DCB dcb; SecureZeroMemory(&dcb, sizeof(DCB)); dcb.DCBlength = sizeof(DCB); GetCommState(dev, &dcb); dcb.BaudRate = CBR_300; dcb.ByteSize = 7; dcb.Parity = EVENPARITY; dcb.StopBits = ONESTOPBIT; return SetCommState(dev, &dcb);}BOOL set_opt_2(){ printf("%s\n", __FUNCTION__); DCB dcb; SecureZeroMemory(&dcb, sizeof(DCB)); dcb.DCBlength = sizeof(DCB); GetCommState(dev, &dcb); dcb.BaudRate = CBR_9600; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; return SetCommState(dev, &dcb);}BOOL send_req(void const* buf, DWORD size){ printf("%s\n", __FUNCTION__); DWORD bytes_written = 0; return WriteFile(dev, buf, size, &bytes_written, NULL);}BOOL send_req(char const* str){ return send_req(str, (DWORD)strlen(str));}BOOL read_until(char const* delims){ DWORD bytes_read = 0; DWORD cur_read = 0; for (;;) { if (!ReadFile(dev, buf + bytes_read, 1, &cur_read, NULL)) return FALSE; if (buf[bytes_read] == 0) continue; printf("%02X ", (unsigned char)buf[bytes_read]); bytes_read += cur_read; buf[bytes_read] = 0; if (strstr(buf, delims)) { printf("\n"); return TRUE; } else if (bytes_read >= sizeof(buf) - 1) { printf("\n"); return FALSE; } }}BOOL read_line(){ printf("%s\n", __FUNCTION__); return read_until("\r\n");}BOOL read_some(){ printf("%s\n", __FUNCTION__); DWORD bytes_read = 0; DWORD cur_read = 0; do { if (!ReadFile(dev, buf + bytes_read, 1, &cur_read, NULL)) return FALSE; printf("%02X ", (unsigned char)buf[bytes_read]); bytes_read += cur_read; }while(bytes_read < sizeof(buf)); printf("\n"); return TRUE;}void close_dev(){ CloseHandle(dev);}void open_dev(){ dev = CreateFile("\\\\.\\COM7", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);}BOOL clear_error(){ DWORD err; COMSTAT stat; return ClearCommError(dev, &err, &stat);}int main(int, char*[]){ open_dev(); if (dev == INVALID_HANDLE_VALUE) return 1; for (;;) { if (!set_opt_1()) break; if (!send_req("/?!\r\n")) break; if (!read_line()) break; { BYTE req[] = {0x06, 0x32, 0x35, 0x32, 0x0D, 0x0A}; if (!send_req(req, sizeof(req))) break; } Sleep(500); if (!set_opt_2()) break; { BYTE req[] = {0x7E, 0xA0, 0x07, 0x03, 0x21, 0x93, 0x0F, 0x01, 0x7E}; if (!send_req(req, sizeof(req))) break; } if (!read_line()) break; if (!read_some()) break; break; } CloseHandle(dev); return 0;}
- windows 串口编程例子
- Windows 串口编程例子
- linux串口编程例子
- 串口编程(例子)
- linux串口编程例子
- linux串口编程例子
- 串口基本概念和C#串口编程例子
- Windows串口编程
- Windows串口编程
- Windows API 串口编程
- Windows API串口编程
- windows 串口编程
- windows串口编程
- windows串口编程
- windows串口编程
- windows串口编程文章
- Windows 下串口编程
- windows串口编程
- 提取数据的变量信息content
- 黑马程序员-----jdk1.5的新特性
- Android通过HttpURLConnection与HttpClient联网代理网关设置
- (超详细)Ubuntu 10.10 图形安装教程、网络设置、软件源、基本配置
- 已安全化的ActiveX控件卸载时出现"DllUnregisterServer函数出错,错误代码:0x80070002"问题解决
- windows 串口编程例子
- 我的3D游戏开发书架
- 发布Android程序
- test
- 这里的资源怎样才能下载?
- 电影《 昂山素季 》有感
- xcode 中异步调用 WebService 获得大数据量的处理方式
- 2. HTML之标签
- 鸟哥的私房菜学习笔记