串口流控提供了由于某种原因不能进行通讯时阻塞通讯的一种机制,经常采用硬件流控和软件流控两种方式。
一、硬件流控方式:
MODEM 硬件流控常用的有 RTS/CTS 流控制和 DTR/DSR 流控制
二:DB9串口引脚定义:
引脚编号 | 名称 | 含义 | I/O |
CD | Carrier Detect | 载波检测 | I |
RXD | Receive Data | 接收数据 | I |
TXD | Transmit Data | 发送数据 | O |
DTR | Data Terminal Ready | 数据终端就绪 | O |
GND | System Ground | 系统接地 | - |
DSR | Data Set Ready | 数据设备就绪 | I |
RTS | Request To Send | 请求发送 | O |
CTS | Clear To Send | 允许发送 | I |
RI | Ring Indicator | 响铃指示器 | I |
三:流控逻辑:
在ARM处理器中的USART中,基本上都具有硬件流控的功能,即一般都有RTS、CTS引脚。
RTS:是主机的输出端,模块的输入端,用于MCU指示模块是否已准备好接收数据,RTS的有效电平为低
CTS:是主机的输入端,模块的输出端,用于MCU判断模块是否已准备好接收数据,CTS的有效电平为低。
示意图如下:
如果 MCU 拉高 RTS 信号(RTS无效,通知对方停止发送),表明通知模块停止发送,模块检测 CTS 引脚无效,停止发送数据;
如果 MCU 拉低 RTS 信号(RTS有效,请求对方开始发送),表明通知模块发送数据,模块检测 CTS 引脚有效,开始发送数据。
四:STM32硬件流控配置:
STM32配置串口时,有如下一段配置代码:
USART_InitStructure.USART_BaudRate = bound;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
代码中
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
点击USART_HardwareFlowControl_None,右键 选择 Go To Definition
#define USART_HardwareFlowControl_None ((uint16_t)0x0000)
#define USART_HardwareFlowControl_RTS ((uint16_t)0x0100)
#define USART_HardwareFlowControl_CTS ((uint16_t)0x0200)
#define USART_HardwareFlowControl_RTS_CTS ((uint16_t)0x0300)
可以配置使用RTS和CTS这两个引脚为硬件流控的功能。