VC实现串口通信例程 点击:762 | 回复:0



liuyangvic

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:16帖 | 46回
  • 年度积分:0
  • 历史总积分:198
  • 注册:2006年7月09日
发表于:2006-07-10 22:34:00
楼主
VC实现串口通信例程
作者:阮帮秋(2001.4) 
 

 
摘要:WIN95界面下的VC++串口通讯程序在WIN32下是不建议对端口进行操作的,在WIN32中所有的设备都被看成是文件,串行口也不例外也是作为文件来进行处理的。
 关键词 串行口,DWORD,缓冲区 

  WIN95界面下的VC++串口通讯程序在WIN32下是不建议对端口进行操作的,在WIN32中所有的设备都被看成是文件,串行口也不例外也是作为文件来进行处理的。这是我的一份关于串口编程的读书笔记,对于使 用VC进行编程的同行应该有一定的帮助。
1.打开串口:

  在Window 95下串行口作为文件处理,使用文件操作对串行口进行处理。使用CreateFile()打开串口,CreateFile()将返回串口的句柄。
  HANDLE CreateFile(
  LPCTSTR lpFileName, // pointer to name of the file
  DWORD dwDesiredAccess, // access (read-write) mode
  DWORD dwShareMode, // share mode
  LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security attributes
  DWORD dwCreationDistribution, // how to create
  DWORD dwFlagsAndAttributes, // file attributes
  HANDLE hTemplateFile // handle to file with attributes to copy
  );
  lpFileName: 指明串口制备,例:COM1,COM2
  dwDesiredAccess: 指明串口存取方式,例:GENERIC_READ|GENERIC_WRITE
  dwShareMode: 指明串口共享方式
  lpSecurityAttributes: 指明串口的安全属性结构,NULL为缺省安全属性
  dwCreateionDistribution: 必须为OPEN_EXISTIN
  dwFlagAndAttributes: 对串口唯一有意义的是FILE_FLAG_OVERLAPPED
  hTemplateFile: 必须为NULL

2.关闭串口:

  CloseHandle(hCommDev);

3.设置缓冲区长度:

  BOOL SetupComm(
  HANDLE hFile, // handle of communications device
  DWORD dwInQueue, // size of input buffer
  DWORD dwOutQueue // size of output buffer
  );

4.COMMPROP结构:

  可使用GetCommProperties()取得COMMPROP结构,COMMPROP结构中记载了系统支持的各项设置。
  typedef struct _COMMPROP { // cmmp
  WORD wPacketLength; // packet size, in bytes
  WORD wPacketVersion; // packet version
  DWORD dwServiceMask; // services implemented
  DWORD dwReserved1; // reserved
  DWORD dwMaxTxQueue; // max Tx bufsize, in bytes
  DWORD dwMaxRxQueue; // max Rx bufsize, in bytes
  DWORD dwMaxBaud; // max baud rate, in bps
  DWORD dwProvSubType; // specific provider type
  DWORD dwProvCapabilities; // capabilities supported
  DWORD dwSettableParams; // changeable parameters
  DWORD dwSettableBaud; // allowable baud rates
  WORD wSettableData; // allowable byte sizes
  WORD wSettableStopParity; // stop bits/parity allowed
  DWORD dwCurrentTxQueue; // Tx buffer size, in bytes
  DWORD dwCurrentRxQueue; // Rx buffer size, in bytes
  DWORD dwProvSpec1; // provider-specific data
  DWORD dwProvSpec2; // provider-specific data
  WCHAR wcProvChar[1]; // provider-specific data
  } COMMPROP;
  dwMaxBaud:
  BAUD_075 75 bps
  BAUD_110 110 bps
  BAUD_134_5 134.5 bps
  BAUD_150 150 bps
  BAUD_300 300 bps
  BAUD_600 600 bps
  BAUD_1200 1200 bps
  BAUD_1800 1800 bps
  BAUD_2400 2400 bps
  BAUD_4800 4800 bps
  BAUD_7200 7200 bps
  BAUD_9600 9600 bps
  BAUD_14400 14400 bps
  BAUD_19200 19200 bps
  BAUD_38400 38400 bps
  BAUD_56K 56K bps
  BAUD_57600 57600 bps
  BAUD_115200 115200 bps
  BAUD_128K 128K bps
  BAUD_USER Programmable baud 


热门招聘
相关主题

官方公众号

智造工程师