STM32的USART中RTS、CTS的作用和意义

USART中RXTX这两个引脚的功能,这两个引脚是USART串行通信最常见和必不可少的两个引脚。但我们在手册中会发现关于USART的其他引脚:USART_CK、USART_RTS、USART_CTS,如下图:
Ⅱ、关于DB9串口接头

DB9个引脚的功能:

1 CD ← Carrier Detect 载波检测

2 RXD ← Receive Data 接收数据

3 TXD → Transmit Data 发送数据

4 DTR → Data Terminal Ready数据终端就绪

5 GND — System Ground 系统接地

6 DSR ← Data Set Ready 数据设备就绪

7 RTS → Request To Send 请求发送

8 CTS ← Clear To Send 允许发送

9 RI → 这个好像是什么提示信号

相信大家都知道DB9这个标准的串口接头,但我们大部分就只用RX、TX和GND这三个引脚,其他引脚都不关心,或者都不知道是什么意思,相信看了引脚定义之后,大概有所理解。
Ⅲ、RTS CTS

在ARM处理器中的USART中,基本上都具有硬件流控的功能,也就是说一般都有RTS CTS引脚(注意:功能简单一点的处理器,如51、STM8等,很少有串口硬件流控功能)。

RTS:是模块的输入端,用于MCU通知模块,MCU是否准备好,模块是否可向MCU发送信息,RTS的有效电平为低。

CTS:是模块的输出端,用于模块通知MCU,模块是否准备好,MCU是否可向模块发送信息,CTS的有效电平为低

RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据。

CTS (Clear ToSend,发送允许)为输入信号,用于判断是否可以向对方发送数据,低电平有效,低电平说明本设备可以向对方发送数据。

Ⅳ、STM32中硬件流控配置

我们配置串口时,有如下一段配置代码:

USART_InitTypeDef USART_InitStructure;

USART_InitStructure.USART_BaudRate = 115200;

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_Init(USART1, &USART_InitStructure);

上面配置代码中有一个参数:

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

其实这个参数可以为:

#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这两个引脚为硬件流控的功能。
Ⅴ、最后

 UART和USART:

UART:通用异步收发器

USART:通用同步/异步收发器,其可选使用异步方式,那将和UART无区别,如果是同步,则需要多一根时钟线(USART_CK)

STM32的USART注意:

通常USART1接口的通信速率较快,其它USART接口较慢。如STM32F103C8T6的USART1接口通信速率是4.5Mbps,其它USART接口的通信速率是2.25Mbps。片上所有的USART接口都可以使用DMA操作。

UART和COM是物理接口形式(物理接口)

TTL和RS-232是电平标准(电信号)

默认的TX GPIO:  模式为:推挽式复用功能    输出速率:高速

默认的RX GPIO: 模式为:浮空输入

  • 14
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MT7622 的串口 RTS (Request to Send) 控制信号默认是开启的,如果需要关闭 RTS 控制信号,可以通过修改相关的寄存器进行设置。 具体步骤如下: 1. 打开串口的 RTS 控制功能,使能 RTS 控制信号。 在 MT7622 ,串口 RTS 控制信号的使能由 UART_LCR 寄存器的 bit 6 控制。默认情况下,该 bit 6 是置位的,即 RTS 控制信号是使能的。如果需要关闭 RTS 控制信号,可以将该 bit 6 清零。具体的代码如下: ``` #define UART_LCR_REG (0x00C0) /* Line control register */ #define UART_LCR_CLR_RTS (1 << 6) /* Clear RTS */ /* 关闭 RTS 控制信号 */ unsigned int *uart_base_addr = (unsigned int *)0x12345678; // 替换为实际的串口基地址 unsigned int lcr_reg_val = readl(uart_base_addr + (UART_LCR_REG / 4)); lcr_reg_val &= ~UART_LCR_CLR_RTS; writel(lcr_reg_val, uart_base_addr + (UART_LCR_REG / 4)); ``` 2. 关闭 RTS 控制信号后,需要手动控制 RTS 线的状态。 因为 RTS 控制信号被关闭后,串口硬件将不再负责控制 RTS 线的状态,需要应用程序手动控制 RTS 线的状态。具体的代码如下: ``` #define GPIO_BASE_ADDR (0x12340000) // 替换为实际的 GPIO 基地址 #define GPIO_RTS_PIN (1 << 2) // 替换为实际的 RTS 线对应的 GPIO 引脚号 /* 控制 RTS 线为低电平 */ unsigned int *gpio_base_addr = (unsigned int *)GPIO_BASE_ADDR; writel(GPIO_RTS_PIN, gpio_base_addr + 0x10 / 4); // 将 RTS 引脚置为低电平 ``` 需要注意的是,关闭 RTS 控制信号后,应用程序需要负责控制 RTS 线的状态,以便保证数据的正常传输。同时,如果 RTS 控制信号被关闭了,那么在接收到数据时,应用程序也需要手动控制 RTS 线的状态,以便通知对方数据已经准备好,可以开始发送下一帧数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值