问题描述:一般单片机、ARM、FPGA一类的板子基本都会带有RS232串口,因为协议简单,而且成熟,有许多现成的东西可以借鉴使用。在上位机通过串口获取下位机传来的信息或数据,Windows下一般有(1)使用开发环境自身提供的串口操作接口函数;(2)使用ActiveX控件MSComm;(3)直接调用WindowsAPI实现串口操作。直接调用 WindowsAPI实现串口操作实现难度相对要大一些,要对Windows底层API比较熟悉,而且这些事情MSComm已经做好了,因此下面重点了解MSComm控件。

   每个MSComm控件对应一个串口,若需访问多个串口时必须使用多个MSComm控件。

   MSComm:ActiveX控件,可以在PC操作串口发送和接收数据,支持查询方式和中断方式(Windows下称为事件驱动方式)。

   中断方式:当串口有数据到达或有数据写入到串口缓冲中时,就会触发中断,可以使用OnComm捕获事件并进行处理。这种方式响应及时,比轮询方式效率要高。

   查询方式:实际上仍热是事件驱动的,需要检查CommEvent属性值来查询事件。

   MSComm常用属性:

   CommPort:设置并返回通讯端口号

   Settings:以字符串形式设置并返回波特率、奇偶校验、数据位、停止位

   PortOpen: 设置并返回通讯端口的状态。也可以打开和关闭端口

  Input:从接收缓冲区返回和删除字符

  InputLen:设置并返回input属性从接收缓冲区读取的字符数

  Output:向传输缓冲区写一个字符串

 RThreshold:在设置CommEvent属性为comEvReceive并产生OnComm之前,设置并返回要接收的字符数

  CTSHolding:确定是否可通过查询CTS线的状态发送数据

 SThreshold:设置CommEvent属性为comEvSend并产生OnComm事件之前,设置并返回传输缓冲区中允许的最小字符数

  CDHolding:通过查询CD线的状态确定当前是否有传输

  DSRHolding:确定DSR线的状态

 EOFEnable:确定在输入过程中MSComm控件是否寻找文件结尾(EOF)

  MSComm 控件的事件:

  MSCOMM 控件只使用一个事件 OnComm ,用属性 CommEvent 的十七个值来区分不同的触发时机。主要有以下几个:  

  (1)CommEvent=1 时:传输缓冲区中的字符个数已少于 Sthreshold( 可设置的属性值 ) 个

  (2)CommEvent=2 时:接收缓冲区中收到 Rthreshold( 可设置的属性值 ) 个字符,利用此事件可编写接收数据的过程

  (3)CommEvent=3 时: CTS 线发生变化

  (4)CommEvent=4 时: DSR 线发生变化

  (5)CommEvent=5 时: CD 线发生变化

  (6)CommEvent=6 时:检测到振铃信号

  另外十种情况是通信错误时产生,即错误代码

   参考资料:更详细的资料当然是参考Microsoft的msdn网站了 http://msdn.microsoft.com/en-us/library/aa259393(v=vs.60).aspx而且还提供VB6.0的例程。