- 浏览: 142523 次
文章分类
最新评论
虽然大多数终端设备对输入和输出都使用同一波特率(即“位/秒”),但只要硬件允许,就可以使用下面 4 个函数将它们设置为不同的值。
其中,两个 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。
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,则传递时间依赖于实现。
#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,则传递时间依赖于实现。
发表评论
-
打开伪终端设备
2018-07-09 20:50 1253在伪终端概述一节中已对 PTY进行了初步的介绍。尽管 ... -
伪终端概述
2018-06-02 11:05 1550伪终端就是指,一个应用程序看上去像一个终端,但事实上它 ... -
终端窗口大小和 termcap
2018-05-29 22:39 800多数 UNIX 系统都提供了一种跟踪当前终端窗口大小的 ... -
终端规范模式和非规范模式
2018-05-29 00:25 950终端规范模式很简单:发一个读请求,当一行已经输入后,终 ... -
终端标识
2018-05-23 11:18 569尽管控制终端的名字在多数 UNIX 系统上都是 /de ... -
终端属性和选项标志
2018-05-20 07:40 710tcgetattr 和 tcsetattr ... -
终端特殊输入字符
2018-05-17 06:33 815终端支持下表所示的特殊输入字符。 为了更改 ... -
终端 I/O 综述
2018-05-10 07:56 439终端设备可认为是由内核中的终端驱动程序控制的。每个终端 ... -
POSIX 信号量
2018-05-09 00:03 579在XSI IPC通信之信 ... -
XSI IPC 通信之共享存储
2018-04-25 07:18 947在XSI IPC通信之消息队列和XSI IPC通信之信 ... -
XSI IPC通信之信号量
2018-04-17 23:38 618在XSI IPC通信之消 ... -
XSI IPC通信之消息队列
2018-04-15 10:54 498消息队列是消息的链接表,存储在内核中,由消息队列标识符 ... -
XSI IPC 相似特征介绍
2018-02-08 23:48 485有 3 种称作 XSI IPC ... -
IPC 通信之 FIFO
2018-02-06 22:55 421FIFO 也被称为命名管道,未命名的管道只能在两个相关 ... -
IPC 通信之管道
2018-01-30 22:22 389管道是 UNIX 系统 IPC 的最古老但也是最常用的 ... -
readv/writev 函数及存储映射 I/O
2018-01-19 00:57 891readv 和 writev 函数可用于在一次函数调用 ... -
POSIX 异步 I/O
2018-01-16 21:33 455POSIX 异步 I/O 接口为对不同类型的文件进行异 ... -
fcntl 记录锁
2018-01-06 23:48 618记录锁的功能是:当有进程正在读或修改文件的某个部分时, ... -
守护进程惯例
2018-01-06 23:52 439UNIX 系统中,守护进程遵循下列通用惯例。 ... -
守护进程编写规则与出错记录
2017-12-26 01:53 455在编写守护进程程 ...
相关推荐
波特率是时钟频率的一个函数,因此要计算波特率,首先需要知道单片机的工作时钟。 2. **波特率发生器(BRG)**:430单片机内部有专门的波特率发生器来产生所需的波特率。它通过分频器从系统时钟产生所需波特率的...
5. **src.c文件**:这是C语言源代码文件,通常包含了实现特定功能的函数和逻辑。在这个例子中,`src.c`很可能包含了波特率检测的算法和相关操作,如串口初始化、数据读取和波特率计算等。 6. **单片机应用**:在...
使用`tcgetattr()`获取当前设置,然后使用`cfsetispeed()`和`cfsetospeed()`设置输入和输出波特率,`cfsetospeed(&options, B9600)`将波特率设为9600。接着使用`cfsetspeed()`设置非标准波特率,这需要自定义波特率...
1. 初始化函数:初始化UART(通用异步收发传输器)模块,设置波特率、数据位、停止位和校验位等参数。这些参数通常由用户预先设定,但在自动波特率程序中,波特率会动态调整。 2. 波特率检测算法:程序会按照预设的...
这些代码通常包括对串行接口的初始化函数,如设置波特率寄存器和控制寄存器,以及开启串行通信。 C语言代码示例可能如下: ```c void init_UART(uint32_t baudrate) { uint16_t ubrr = (FOSC / (16UL * baudrate)...
在实际应用中,我们需要根据具体需求选择合适的工作模式,计算合适的计数值,并编写相应的程序来实现精确的波特率控制。在进行波特率设置时,应充分考虑系统的整体性能和稳定性,确保通信的可靠性和效率。
STM32的HAL库提供了方便的接口函数如`HAL_CAN_Init()`和`HAL_CAN_ConfigClock()`,用于初始化CAN模块和设置波特率。 在压缩包文件"STM32 CANBaudRate"中,很可能包含了一段示例代码或者一个工具,演示了如何在STM32...
设定波特率初值的过程包括选择适当的分频系数和设置UART的控制寄存器。具体计算公式一般为:波特率 = (系统时钟频率 / (16 * 波特率初值))。其中,系统时钟频率通常由单片机的晶振频率决定,波特率初值是介于1到255...
通过对 C8051F040 CAN 初始化程序和波特率初值的深入解析,我们了解到正确配置 CAN 控制器的重要性。合理的初始化设置不仅能够提高系统的通信效率,还能增强整个系统的稳定性。此外,理解如何根据不同的应用需求灵活...
在串行通信中,波特率的计算通常涉及到定时器的设置,因为单片机通常会利用内部定时器来产生所需的时钟脉冲序列,从而控制数据的发送和接收。例如,在8位微处理器中,如果使用T1作为波特率发生器,那么波特率可以...
传统的串行通信通常需要事先设定波特率,以便发送和接收端保持同步。然而,这种自动识别方法避免了这一需求,通过分析接收到的第一个字符的位时间来估算波特率。程序启动后,会监听串行输入口,等待起始位的下降沿,...
1. 单片机部分:利用内部的RXD和TXD引脚,通过T1定时器产生波特率,波特率与工作方式、主振频率Fosc以及SMOD位有关。 2. PC机部分:PC机通常使用UART(如8250或16450)芯片,通过设置除数锁存器产生所需的波特率,...
这些参数与实际波特率之间存在一定的关系,需要通过计算来确保CAN通信的准确性和稳定性。 同步段定义了所有节点在开始数据传输时的时间对齐。传播段是信号在总线上传播所需的时间,而相位缓冲段则用于调整发送和...
这个文件会包含初始化UART、设置波特率、定义sendChar()和sendString()函数以及LED控制逻辑的函数或宏定义。 8. **编程和调试**:开发过程中,需要使用如CCS(Code Composer Studio)或其他兼容的IDE进行编程和调试...
5. **串口编程**:在LabVIEW中,可以使用内置的Serial VIs(虚拟仪器)来配置和控制串口,包括设置波特率、校验位、数据位、停止位等,并进行读写操作。开发者需要确保串口设置与连接设备的配置一致,以实现正确的...
这可以通过QT的`QWidget`和`QLayout`等组件来实现,例如使用`QSpinBox`控件让用户选择波特率,`QComboBox`让用户选择数据长度,然后通过按钮触发设置和发送数据的函数。 至于"User_Ship2、1",这可能是项目中的文件...
在源码中,我们可能会看到如下关键函数和步骤: 1. 初始化串口:设置波特率、工作模式、中断使能等。 2. 发送数据:通过`SBUF`寄存器发送数据,当`TI`标志位被置位时,表示数据已发送完成,可以清除中断标志。 3. ...
在这个工程文件中,我们重点关注的是MSP430F149如何配置和使用UART(通用异步接收/发送器)来实现9600波特率的数据通信。 UART是一种串行通信接口,允许设备之间进行全双工通信,即数据可以同时在两个方向上传输。...
3. **错误检测与恢复**:高波特率意味着更高的错误率,因此需要强大的错误检测和纠正机制,如CRC校验、奇偶校验等。 四、VB2010简易高速串口助手的特性 1. **可扩展性**:该助手提供的VB2010工程可作为基础,用户...
其中,`cfsetispeed()`和`cfsetospeed()`函数分别用来设置输入和输出的波特率。例如: ```c struct termios options; speed_t baud_rate = B9600; // 设置为9600波特 cfsetispeed(&options, baud_rate); ...