0

我一直在阅读有关串行通信的握手和硬件流控制的内容,但我有一个似乎找不到答案的问题。

如果您为 cubeMX 上的串行端口设置硬件流控制,它将设置所需的引脚。我知道您也可以使用其他引脚,这可以通过 cubeMX 完成。

我的问题是,您是否可以通过使用不同的引脚手动设置硬件流控制,或者您是否必须严格使用已实现的引脚?

我使用的是 STM32F207ZETx,我使用的是 USB 和串口 - 但是,当使用 USB 外围设备时,它会阻止我需要的 USART1 的硬件流控制引脚,并且我的项目需要硬件流控制!硬件流控制的备用引脚也已经使用,所以我有点麻烦。

4

1 回答 1

3

我的问题是,您是否可以通过使用不同的引脚手动设置硬件流控制,或者您是否必须严格使用已实现的引脚?

您可以在软件中自己进行硬件流控制,实际上这很简单。

USART1_RTS 是一个输出引脚。当 USART1 准备好接收数据时设置/高电平。USART1_CTS 是输入引脚。另一端在准备好接收数据时将其设置为高电平,而在未准备好接收数据时将其设置为低电平。

假设您一次发送和接收一个字符,并将两个 GPIO 引脚用于 USART1_RTS 和 USART1_CTS,而不是硬件支持。

通常,您将 USART1_RTS 保持为高电平。接收数据时,如果接收缓冲区不足,则将 USART1_RTS 设置为低。当您在接收缓冲区中腾出更多空间时,您将 USART1_RTS 设置为高电平。(如果您有一个无法用完接收缓冲区的缓冲方案,您可以将 RTS 线拉高。)

在发送每个字符之前,检查 USART1_CTS 是否为高电平。如果它为低电平,则不发送数据,而是等待 USART1_CTS 变为高电平后再发送。

而已。

于 2018-09-06T03:40:18.467 回答