c - 更改 STM32 上的硬件流控制引脚
问题描述
我一直在阅读有关串行通信的握手和硬件流控制的内容,但我有一个似乎找不到答案的问题。
如果您为 cubeMX 上的串行端口设置硬件流控制,它将设置所需的引脚。我知道您也可以使用其他引脚,这可以通过 cubeMX 完成。
我的问题是,您是否可以通过使用不同的引脚手动设置硬件流控制,或者您是否必须严格使用已实现的引脚?
我使用的是 STM32F207ZETx,我使用的是 USB 和串口 - 但是,当使用 USB 外围设备时,它会阻止我需要的 USART1 的硬件流控制引脚,并且我的项目需要硬件流控制!硬件流控制的备用引脚也已经使用,所以我有点麻烦。
解决方案
我的问题是,您是否可以通过使用不同的引脚手动设置硬件流控制,或者您是否必须严格使用已实现的引脚?
您可以在软件中自己进行硬件流控制,实际上这很简单。
USART1_RTS 是一个输出引脚。当 USART1 准备好接收数据时设置/高电平。USART1_CTS 是输入引脚。另一端在准备好接收数据时将其设置为高电平,而在未准备好接收数据时将其设置为低电平。
假设您一次发送和接收一个字符,并将两个 GPIO 引脚用于 USART1_RTS 和 USART1_CTS,而不是硬件支持。
通常,您将 USART1_RTS 保持为高电平。接收数据时,如果接收缓冲区不足,则将 USART1_RTS 设置为低。当您在接收缓冲区中腾出更多空间时,您将 USART1_RTS 设置为高电平。(如果您有一个无法用完接收缓冲区的缓冲方案,您可以将 RTS 线拉高。)
在发送每个字符之前,检查 USART1_CTS 是否为高电平。如果它为低电平,则不发送数据,而是等待 USART1_CTS 变为高电平后再发送。
而已。
推荐阅读
- powershell - 使用 PowerShell 将 Get Thumbnail API 转换为 base64(来自 Microsoft Computer Vision Get Thumbnail API)
- sql - MV 视图与两个带有 blob 列的表连接 - 无法使用从远程表中选择的 LOB 定位器
- r - 识别使用 dfm_subset() 删除的行
- c# - 无法施放列表
- 通用的
- c++ - 考虑到 std::cout 是一个已初始化的对象,为什么 Visual Studio 在调试器中设置 Watch 时“无法识别其标识符”?
- vue.js - Vue组合api自定义v-model
- c - C90 - 使用非常量值初始化堆栈上的聚合类型
- wpf - WPF 使用 IDataErrorInfo 验证子类属性
- laravel-8 - 使用 Laravel 8 和 mysmsmantra 服务提供商集成短信网关方式
- vb.net - 如何从 gridpanel VB.NET 获取当前页面值