问题描述:一般单片机、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网站了
MSComm Control (MSComm Control) | Microsoft Learn而且还提供VB6.0的例程。