VC实现串口通信例程 点击:563 | 回复:3



www.auto-meter.cn

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:3帖 | 86回
  • 年度积分:0
  • 历史总积分:146
  • 注册:2007年3月29日
发表于:2007-03-29 10:52: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 rates available



www.auto-meter.cn

  • 精华:0帖
  • 求助:1帖
  • 帖子:3帖 | 86回
  • 年度积分:0
  • 历史总积分:146
  • 注册:2007年3月29日
发表于:2009-09-19 15:08:35
1楼
这么好的帖子,居然没人顶

蓝云

  • 精华:0帖
  • 求助:1帖
  • 帖子:60帖 | 328回
  • 年度积分:0
  • 历史总积分:995
  • 注册:2001年12月18日
发表于:2009-10-12 20:51:05
2楼

说的也是,不但要顶,还要收藏

www.auto-meter.cn

  • 精华:0帖
  • 求助:1帖
  • 帖子:3帖 | 86回
  • 年度积分:0
  • 历史总积分:146
  • 注册:2007年3月29日
发表于:2009-11-02 19:37:11
3楼
强烈支持楼上意见!总算有人顶了

热门招聘
相关主题

官方公众号

智造工程师