windows 串口编程例子
2012-04-20 14:16
302 查看
此文版权属于作者
所有,任何人、媒体或者网站转载、借用都必须征得作者本人同意!
今天需要测试一些串口设备,写了一个简单例子,贴到这里,做个备忘。
所有,任何人、媒体或者网站转载、借用都必须征得作者本人同意!
今天需要测试一些串口设备,写了一个简单例子,贴到这里,做个备忘。
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 串口编程例子
- 串口号大于10的情况 - QT在windows下的串口编程
- 串口基本概念和C#串口编程例子
- 串口编程(例子)
- Windows下C语言的Socket编程例子(TCP和UDP)
- Windows下C语言的Socket编程例子(TCP和UDP)
- Windows下C语言的Socket编程例子(TCP和UDP)
- Windows下的Win32串口编程
- 【转】Windows下C语言的Socket编程例子(TCP和UDP)
- Windows下C语言的Socket编程例子(TCP和UDP)
- Windows下C语言的Socket编程例子(TCP和UDP)
- Windows下C语言的Socket编程例子(TCP和UDP)
- windows编程几个小例子(一)
- windows下串口初步编程(多线程+windows串口)
- Windows下的Win32串口编程
- Windows下C语言的Socket编程例子(TCP和UDP)
- windows下的socket编程【清晰,好用的一个例子~】
- Windows下C语言的Socket编程例子(TCP和UDP)
- Windows下的Win32串口编程
- 对<<寒江独钓---Windows内核安全编程>>中第3章<<串口过滤>>的改进