更改STM32上的硬件流控制引脚

标签 c embedded stm32 cubemx

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

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

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

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

最佳答案

My question is, could you set up hardware flow control manually by using different pins or do you strictly have to use the implemented pins?

您可以在软件中自己进行硬件流控制,而且实际上非常简单。

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

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

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

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

就是这样。

关于更改STM32上的硬件流控制引脚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52195247/

相关文章:

c - 读取STM32 MCU SPI数据寄存器的值

我可以/应该通过单个指针访问多个设备寄存器吗?

c - 寻找数组的中位数

c++ - 如何仅打印完整路径名的文件部分?

C语言 : How do I ignore carriage return and line feed when reading from text file?

c - 确定参数列表中参数类型的简单方法

gcc - 在嵌入式目标上动态加载代码

c - 实现拼字游戏求解器

programming-languages - F35 Lightning II飞机使用的主要编程语言是什么?

python - 协议(protocol)中的 CRC 计算不正确。一种是使用zlib实现的,另一种是用函数计算的