原创 第5节 LabWindows学习笔记(3串口)

2009-5-15 23:36 6746 18 20 分类: 软件与OS 文集: Labwindows技术板块

四、RS-232 Library串口函数库

1int OpenCom (int portNumber, char deviceName[]);

函数说明:串口开启。

int  portNumber  串口号;

char deviceName[]串口名称。

portNumber

deviceName under Windows

1

"COM1"

2

"COM2"

3

"COM3"

4

"COM4"

返回值:如果返回为负值表示有错误!否则成功打开!

2int OpenComConfig(int portNumber, char deviceName[], long baudRate, int parity, int dataBits,int stopBits, int inputQueueSize, int outputQueueSize);

函数说明:开启串口,并设置参数。

int portNumber串口号;

char deviceName[]串口名称,一般为空字符串;

long baudRate波特率;

int parity奇偶校验;

int dataBits数据位数;

int stopBits停止位;

int inputQueueSize, int outputQueueSize输入输出队列最大长度。

返回值:为“0”开启成功,否则失败。

3int CloseCom (int portNumber);

函数说明:关闭串口。

4int ComRd (int portNumber, char buffer[], int count);

函数说明:从串口中读取count个数据存储在buffer中。

int portNumber为串口号。

返回值:返回读取的字节个数。即一般出现错误时为count

5int ComRdByte (int portNumber);

函数说明:从串口中读一个字节。

int portNumber为串口号。

返回值:返回的是一个整型数据,它的低8位为读到的字节。

6int ComRdTerm (int portNumber, char buffer[], int count, int terminationByte);

函数说明:从串口中读取数据,当读到的数据与terminationByte一样时,或是读到的数据个数达到count个时,停止读。

返回值:返回读取的个数。

7int ComToFile (int portNumber, int fileHandle, int count, int terminationByte);

函数说明:从串口中读取数据,然后将数据写入文件中。当数据个数达到count个,遇到terminationByte时或是超时或错误发生时停止读数据。

返回值:数据的个数。

8int ComWrt (int portNumber, char buffer[], int count);

函数说明:向串口写count个字节。

返回值:写的数据个数。

9. int ComWrtByte (int portNumber, int byte);

函数说明:向串口写一个字节。写的数据虽然是整型的,但是实际写到串口中的是byte的低8位。

返回值:写的数据的个数。

10int ComFromFile (int portNumber, int fileHandle, int count, int terminationByte);

函数说明:将文件中的数据写如串口,当数据个数达到count个,遇到terminationByte时或是超时或错误发生时停止读数据。

返回值:写的数据的个数。

11int XModemReceive (int portNumber, char fileName[]);

函数说明:从串口中接受一个信息包,然后写到文件filename中。必须遵循Modem协议。

返回值:为负值表示错误,否则操作成功。

12int XModemSend (int portNumber, char fileName[]);

函数说明:将文件中的数据传输到串口中。

返回值:为负值表示错误,否则操作成功。

13int XModemConfig (int portNumber, double startDelay, int maximumNumOfRetries,double waitPeriod, int packetSize);

函数说明:Modem设置函数。

14int SetComTime (int portNumber, double timeoutSeconds);

函数说明:设置串口的超时时间。

返回值:为负值表示错误,否则操作成功。

15int SetXMode (int portNumber, int mode);

函数说明:在传输和接收的数据时间,启用或禁用XON / XOFF,或启用或禁用软件握手。

int portNumber串口号;

int mode选择串口的模式(“0”禁止“1”启用);

返回值:为负值则有错误发生,否则设置成功。

16int SetCTSMode (int portNumber, int hardwareHandshaking);

函数说明:设置硬件握手模式。

int portNumber串口号;

int hardwareHandshaking 握手方式

Value

Defined Constant

Description

0

LWRS_HWHANDSHAKE_OFF

Hardware handshaking is disabled. The library ignores the CTS line, and raises the RTS and DTR lines the entire time the port is open.

1

LWRS_HWHANDSHAKE_CTS_RTS_DTR

Hardware handshaking is enabled. The library monitors the CTS line and uses the RTS and DTR lines for handshaking.

2

LWRS_HWHANDSHAKE_CTS_RTS

Hardware handshaking is enabled. The library monitors the CTS line, uses the RTS for handshaking, and raises the DTR line the entire time the port is open.

返回值:为负值则有错误发生,否则设置成功。


17int FlushInQ (int portNumber);

函数说明:清空串口输入队列的数据。

返回值:为负值则有错误发生,否则清除成功

18int FlushOutQ (int portNumber);

函数说明:清空串口输出队列的数据。

返回值:为负值则有错误发生,否则清除成功

19int ComBreak (int portNumber, int breakTimeMsec);

函数说明:产生中断信号。

int portNumber串口号

int breakTimeMsec产生中断信号的的周期。多少毫秒产生一次。

返回值:如果没有打开串口,或设置了一个错误的参数时,函数返回一个错误。

20int ComSetEscape (int portNumber, int escapeCode);

函数说明:设置串口扩展命令,

 int escapeCode 表示扩展函数代码

21int GetComStat (int portNumber);

函数说明:得到串口的状态。

返回值:状态代码。如下表

Hex Value

Mnemonic

Description

0001

INPUT LOST

Windows Input queue filled and input characters lost; you did not remove characters fast enough.

0010

PARITY

奇偶检测错误。

0020

OVERRUN

Windows and RT Overrun error detected; a character was received before the receiver data register was emptied.

0040

FRAMING

Framing error detected; stop bits were not received when expected.

0080

BREAK

Break signal detected.

1000

REMOTE XOFF

Windows Transmission is in a suspended state because an
XOFF character was received from the remote device. No characters will be removed
from the output queue and sent to the device until an XON character is
received. Note that this status is only returned if the port has enabled
XON/XOFF handshaking. Refer to SetXMode
for more information about handshaking.

4000

LOCAL XOFF

Windows The driver sent an XOFF character and is
waiting for the input queue to fall to 10% of its capacity. XOFF is
transmitted when the input queue reaches 90% of its capacity. If the other
device is sensitive to XON/XOFF protocol, it transmits no more characters
until it receives an XON character. You use this process to avoid the INPUT
LOST error.

22unsigned int GetComLineStatus (int portNumber);

函数说明:得到modem控制寄存器的内容。

返回值:

Name

Value

Description

kRS_CTS_ON

0x10

The CTS (clear-to-send) signal is on.

kRS_DSR_ON

0x20

The DSR (data-set-ready) signal is on.

kRS_RING_ON

0x40

The ring indicator signal is on.

kRS_RLSD_ON

0x80

The RLSD (receive-line-signal-detect) signal is on.

23int GetComConnectionState (int portNumber);

函数说明:得到串口的连接状况。

返回值:


V.alue

 

Description

 

0

 

No connection on this port.

 

1

 

Valid connection on this port.

 24int GetInQLen (int portNumber);

函数说明:得到串口输入队列中的数据长度。

返回值:数据的长度。

25int GetOutQLen (int portNumber);

函数说明:得到串口输出队列中的数据长度。

返回值:数据的长度。

26int ReturnRS232Err (void);

函数说明:返回错误代码。

27char *GetRS232ErrorString (int errorNum);

函数说明:用于得到串口错误码的字符串描述;
       其中errorNumber为ReturnRS232Err得到的错误码。
28int InstallComCallback (int portNumber, int eventMask, int notifyCount, int eventCharacter, ComCallbackPtr callbackPtr, void *callbackData);

函数说明:安装一个同步回调函数为特定的COM端口。

int portNumber串口号

int eventMask如下表:

Bit

Hex Value

COM Port Event

Constant Name

Description

0

0x0001

Any character received.

LWRS_RXCHAR

Set when a character is received and placed in the
input queue.

1

0x0002

Received certain character.

LWRS_RXFLAG

Set when the event character is received and placed in
the input queue. The event character is specified in eventCharacter.

2

0x0004

Transmit queue empty.

LWRS_TXEMPTY

Set when the last character in the output queue is
sent.

3

0x0008

CTS changed state.

LWRS_CTS

Set when the CTS (clear-to-send) line changes state.

4

0x0010

DSR changed state.

LWRS_DSR

Set when the DSR (data-set-ready) line changes state.

5

0x0020

RLSD changed state.

LWRS_RLSD

Set when the RLSD (receive-line-signal-detect) line changes state.

6

0x0040

BREAK received.

LWRS_BREAK

Set when a break is detected on input.

7

0x0080

Line status error occurred.

LWRS_ERR

Set when a line-status error occurs. Line-status errors
are CE_FRAME, CE_OVERRUN, and CE_RXPARITY.

8

0x0100

Ring signal detected.

LWRS_RING

Set to indicate that a ring indicator was detected.

15

0x8000

notifyCount bytes in input queue.

LWRS_RECEIVE

Set to detect when at least notifyCount bytes
are in the input queue. Once this event has occurred, it does not trigger again until the input queue falls below and then rises back above notifyCount bytes.

int notifyCount 在发送LWRS_RECEIVE事件到回调函数中时,输入队列中至少有多少个字节数。

int eventCharacter触发LWRS_RXFLAG事件时的字或字节的值。(0-255

ComCallbackPtr callbackPtr回调函数;

 void *callbackData一个4字节的值。

返回值:

例子:

notifyCount= 50; /* Wait for at least 50 bytes in queue. */
eventChar = 10; /* Wait for LF. */
eventMask = LWRS_RXFLAG | LWRS_TXEMPTY | LWRS_RECEIVE;
InstallComCallback (portNumber, eventMask, notifyCount, eventChar, ComCallback,NULL);
/* Callback Function */
void ComCallback(int portNumber, int eventMask, void *callbackdata)
{

if(eventMask & LWRS_RXFLAG)

printf("Received specified character\n");

if(eventMask & LWRS_TXEMPTY)

printf("Transmit queue now empty\n");

if(eventMask & LWRS_RECEIVE)

printf("50 or more bytes in input queue\n");

}

29int GetSystemComHandle (int portNumber, int *systemHandle);

函数说明:得到一个串口和系统的一个句柄。

作者: sharcky, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-221763.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论2条评论)

登录后参与讨论

用户377235 2013-1-24 09:05

你好,请问我向SIM300(用RS232与电脑连接)发送AT指令,希望读到它返回的消息“OK”应该用什么函数呢?急需,看到请尽快回。谢谢!

tengjingshu_112148725 2009-5-19 09:02

学习了,谢谢
相关推荐阅读
sharcky 2020-06-07 21:37
技术书籍分享
最近将自己一直积累收藏的一些电子书籍拿出来给大家分享一下,希望对大家有帮助!电子电路相关书籍: (1)有源滤波器的设计手册.pdf 下载地址:http://www.yimuhe.com/file...
sharcky 2020-06-07 20:57
第9节 CVI添加日历控件及操作
1、如何添加日历控件 (1)在需要添加日历控件的界面,点击鼠标右键,选择“ActiveX…”,如图3-1所示。然后进入选择外部插件的界面,如图3-2所示。 图3-1 添加外部控件 图3-...
sharcky 2020-06-07 20:52
第8节 鼠标右键实现菜单功能
(1)在主界面下,新建一个界面,菜单Create中,选择Panel..,直接就生成一个新的面板,双击新建的面板,修改参数。 图2-1 右键菜单面板参数设置界面 如图2-1所示,设置界面的名称代...
sharcky 2020-06-07 18:14
第1节 CVI实现无标题栏界面如何实现界面的移动
(1)首先需要在主界面添加一个函数,如图1所示,在Callback function 中加入主界面回调函数,命名为mainTableFunction,点击“ok”按钮确定设置。 图1 程序的主界...
sharcky 2013-03-03 13:37
放大电路的级间耦合及多级放大电路
   电子设备中所用的放大电路常将微弱的信号放大,使之成为能带动负载的有用信号。这就要求放大电路有很高的放大倍数,并能输出一定的功率。单级放大器通常是无法胜任的。通常将若干个单...
sharcky 2013-03-03 13:31
交流信号幅度的微小变化的检测,遇到问题...
1、引言:分子力学研究一个或多个分子的非键合原子的相互作用,它能够决定某种结构的空间构型或邻近分子导致的构型转变,概括地说,分子力学是分子结构、相互作用及其变化的模型,以及根据物理和物理化学第一定...
我要评论
2
18
关闭 站长推荐上一条 /2 下一条