`

波特率和行控制函数

阅读更多
    虽然大多数终端设备对输入和输出都使用同一波特率(即“位/秒”),但只要硬件允许,就可以使用下面 4 个函数将它们设置为不同的值。
#include <termios.h>
speed_t cfgetispeed(const struct termios *termptr);
speed_t cfgetospeed(const struct termios *termptr);
                              /* 两个函数的返回值:波特率值 */
int cfsetispeed(struct termios *termptr, speed_t speed);
int cfsetospeed(struct termios *termptr, speed_t speed);
                            /* 两个函数的返回值:若成功,返回 0;否则,返回 -1 */

    其中,两个 cfget 函数的返回值,以及两个 cfset 函数的 speed 参数都是下列常量之一:B50、B75、B110、B134、B150、B200、B300、B600、B1200、B1800、B2400、B4800、B9600、B19200 或 B38400(多数系统还定义了另外的波特率值)。常量 B0 表示“挂断”。在调用 tcsetattr 时,如若将输出波特率指定为 B0,则调制解调器的控制线就不再起作用。
    另外,使用这些函数时,必须认识到输入、输出波特率是存储在设备的 termios 结构中的。在调用任意一个 cfget 函数之前,要先用 tcgetattr 函数获得设备的 termios 结构。同理,在调用任意一个 cfset 函数后,还应当调用 tcsetattr 函数来使这种更改影响到设备。不过即使所设置的两个波特率中的任意一个出错,在调用 tcsetattr 之前可能也不会发现该错误。

    下列 4 个函数提供了终端设备的行控制能力。它们都要求参数 fd 引用一个终端设备,否则出错返回 -1,并将 errno 设置为 ENOTTY。
#include <termios.h>
int tcdrain(int fd);
int tcflow(int fd, int action);
int tcflush(int fd, int queue);
int tcsendbreak(int fd, int duration);
                           /* 四个函数的返回值:若成功,返回 0;否则,返回 -1 */

    tcdrain 函数等待所有输出都被传递。
    tcflow 函数用于对输入和输出流控制进行控制。action 参数是下列 4 个值之一。
    * TCOOFF:输出被挂起。
    * TCOON:重新启动以前被挂起的输出。
    * TCIOFF:系统发送一个 STOP 字符,这将使终端设备停止发送数据。
    * TCION:系统发送一个 START 字符,使终端设备恢复发送数据。
    tcflush 函数冲洗(抛弃)输入缓冲区(其中的数据是终端驱动程序已接收到,但用户程序尚未读取的)或输出缓冲区(其中的数据是用户程序已经写入,但尚未被传递的)。queue 参数是下列 3 个常量之一。
    * TCIFLUSH:冲洗输入队列。
    * TCOFLUSH:冲洗输出队列。
    * TCIOFLUSH:冲洗输入和输出队列。
    tcsendbreak 函数在一个指定的时间区间内发送连续的 0 值位流。若 duration 参数为 0,则此种传递延续 0.25~0.5 秒。POSIX.1 说明若 duration 非 0,则传递时间依赖于实现。
分享到:
评论

相关推荐

    单片机波特率 计算助手

    波特率是时钟频率的一个函数,因此要计算波特率,首先需要知道单片机的工作时钟。 2. **波特率发生器(BRG)**:430单片机内部有专门的波特率发生器来产生所需的波特率。它通过分频器从系统时钟产生所需波特率的...

    C/C++代码 波特率检测程序

    5. **src.c文件**:这是C语言源代码文件,通常包含了实现特定功能的函数和逻辑。在这个例子中,`src.c`很可能包含了波特率检测的算法和相关操作,如串口初始化、数据读取和波特率计算等。 6. **单片机应用**:在...

    linux下串口编程及非标准波特率的实现代码

    使用`tcgetattr()`获取当前设置,然后使用`cfsetispeed()`和`cfsetospeed()`设置输入和输出波特率,`cfsetospeed(&options, B9600)`将波特率设为9600。接着使用`cfsetspeed()`设置非标准波特率,这需要自定义波特率...

    PIC 自动波特率程序C语言版

    1. 初始化函数:初始化UART(通用异步收发传输器)模块,设置波特率、数据位、停止位和校验位等参数。这些参数通常由用户预先设定,但在自动波特率程序中,波特率会动态调整。 2. 波特率检测算法:程序会按照预设的...

    STC单片机波特率计算器

    这些代码通常包括对串行接口的初始化函数,如设置波特率寄存器和控制寄存器,以及开启串行通信。 C语言代码示例可能如下: ```c void init_UART(uint32_t baudrate) { uint16_t ubrr = (FOSC / (16UL * baudrate)...

    51单片机定时器波特率设置

    在实际应用中,我们需要根据具体需求选择合适的工作模式,计算合适的计数值,并编写相应的程序来实现精确的波特率控制。在进行波特率设置时,应充分考虑系统的整体性能和稳定性,确保通信的可靠性和效率。

    CAN波特率计算

    STM32的HAL库提供了方便的接口函数如`HAL_CAN_Init()`和`HAL_CAN_ConfigClock()`,用于初始化CAN模块和设置波特率。 在压缩包文件"STM32 CANBaudRate"中,很可能包含了一段示例代码或者一个工具,演示了如何在STM32...

    单片机延时计算与波特率初值工具

    设定波特率初值的过程包括选择适当的分频系数和设置UART的控制寄存器。具体计算公式一般为:波特率 = (系统时钟频率 / (16 * 波特率初值))。其中,系统时钟频率通常由单片机的晶振频率决定,波特率初值是介于1到255...

    C8051F040 CAN初始化程序 和can波特率初值

    通过对 C8051F040 CAN 初始化程序和波特率初值的深入解析,我们了解到正确配置 CAN 控制器的重要性。合理的初始化设置不仅能够提高系统的通信效率,还能增强整个系统的稳定性。此外,理解如何根据不同的应用需求灵活...

    一个单片机波特率简易计算小工具

    在串行通信中,波特率的计算通常涉及到定时器的设置,因为单片机通常会利用内部定时器来产生所需的时钟脉冲序列,从而控制数据的发送和接收。例如,在8位微处理器中,如果使用T1作为波特率发生器,那么波特率可以...

    单片机与PC机串行通信中波特率的确定.doc

    1. 单片机部分:利用内部的RXD和TXD引脚,通过T1定时器产生波特率,波特率与工作方式、主振频率Fosc以及SMOD位有关。 2. PC机部分:PC机通常使用UART(如8250或16450)芯片,通过设置除数锁存器产生所需的波特率,...

    基于51单片机的波特率自动识别系统程序(附C51源码)

    传统的串行通信通常需要事先设定波特率,以便发送和接收端保持同步。然而,这种自动识别方法避免了这一需求,通过分析接收到的第一个字符的位时间来估算波特率。程序启动后,会监听串行输入口,等待起始位的下降沿,...

    stm32 CAN波特率计算及代码生成小工具

    这些参数与实际波特率之间存在一定的关系,需要通过计算来确保CAN通信的准确性和稳定性。 同步段定义了所有节点在开始数据传输时的时间对齐。传播段是信号在总线上传播所需的时间,而相位缓冲段则用于调整发送和...

    MSP430F55xx_串口发送字符或者字符串函数_控制LED指示【波特率9600】

    这个文件会包含初始化UART、设置波特率、定义sendChar()和sendString()函数以及LED控制逻辑的函数或宏定义。 8. **编程和调试**:开发过程中,需要使用如CCS(Code Composer Studio)或其他兼容的IDE进行编程和调试...

    labview 8通道串口波形显示(波特率115200).rar

    5. **串口编程**:在LabVIEW中,可以使用内置的Serial VIs(虚拟仪器)来配置和控制串口,包括设置波特率、校验位、数据位、停止位等,并进行读写操作。开发者需要确保串口设置与连接设备的配置一致,以实现正确的...

    QT,进行串口上位机的设计,波特率数据长度等参数可改.zip

    这可以通过QT的`QWidget`和`QLayout`等组件来实现,例如使用`QSpinBox`控件让用户选择波特率,`QComboBox`让用户选择数据长度,然后通过按钮触发设置和发送数据的函数。 至于"User_Ship2、1",这可能是项目中的文件...

    串口通讯_串口通讯c_51单片机串口程序9600波特率_bottomyr1_源码

    在源码中,我们可能会看到如下关键函数和步骤: 1. 初始化串口:设置波特率、工作模式、中断使能等。 2. 发送数据:通过`SBUF`寄存器发送数据,当`TI`标志位被置位时,表示数据已发送完成,可以清除中断标志。 3. ...

    MSP430F149 Uart 波特率9600 工程文件

    在这个工程文件中,我们重点关注的是MSP430F149如何配置和使用UART(通用异步接收/发送器)来实现9600波特率的数据通信。 UART是一种串行通信接口,允许设备之间进行全双工通信,即数据可以同时在两个方向上传输。...

    VB2010 简易高速串口助手 波特率4.5Mbps

    3. **错误检测与恢复**:高波特率意味着更高的错误率,因此需要强大的错误检测和纠正机制,如CRC校验、奇偶校验等。 四、VB2010简易高速串口助手的特性 1. **可扩展性**:该助手提供的VB2010工程可作为基础,用户...

    comfp.rar_linux 波特率_linux串口

    其中,`cfsetispeed()`和`cfsetospeed()`函数分别用来设置输入和输出的波特率。例如: ```c struct termios options; speed_t baud_rate = B9600; // 设置为9600波特 cfsetispeed(&options, baud_rate); ...

Global site tag (gtag.js) - Google Analytics