嵌入式 - UART Flow Control

简介 / Introduction

UART 流量控制是一种让慢速和快速设备通过 UART 相互通信而不会丢失数据的方法。

考虑两个设备通过 UART 通信的情况。发送器 T 正在向接收器 R 发送一长串字节。R 是一个比 T 慢的设备,在某些时候 R 无法跟上。它需要对数据进行一些处理或清空一些缓冲区,然后才能继续接收数据。

R 需要告诉 T 暂时停止传输。这就是流量控制的作用。 流量控制提供额外的信令,通知发送器应该停止(暂停)或开始(恢复)传输。

目前存在几种形式的流量控制。例如,硬件流量控制使用额外的导线,这些导线上的逻辑电平决定发送器是继续发送数据还是停止发送。在软件流量控制中,通过正常数据线发送特殊字符来启动或停止传输。

UART Flow Control is a method for slow and fast devices to communicate with each other over  UART without the risk of losing data.

Consider the case where two units are communicating over UART. A transmitter T is sending a  long stream of bytes to a receiver R. R is a slower device than T, and at some point R cannot keep up. It needs to either do some  processing on the data or empty some buffers before it can keep receiving data.

R needs to tell T to stop transmitting for a while. This is where flow control comes in.  Flow control provides extra signaling to inform the transmitter that it should stop (pause) or start (resume) the transmission.

Several forms of flow control exist. For example, hardware flow control uses extra wires,  where the logic level on these wires define whether the transmitter should keep sending data or stop. With software flow control,  special characters are sent over the normal data lines to start or stop the transmission.

流控协议 / Flow Control Protocols

下面来介绍实现流控的常用方法。

  • UART Hardware Flow Control / 硬件流控

使用硬件流量控制(也称为 RTS/CTS 流量控制)时,除了数据线外,还需要两条额外的导线。它们分别称为 RTS(请求发送)和 CTS(清除发送)。这两条线在两台设备之间

### 使用STM32CubeMX配置UART #### 打开STM32CubeMX并创建新工程 启动STM32CubeMX软件,在初始界面点击“New Project”,选择目标MCU型号,对于本案例而言即为STM32G474VET6。确认所选器件无误后单击下一步直至完成新建项目向导。 #### 设置时钟树与时基 进入主窗口后需先调整系统的时钟设置以满足应用需求。通常情况下,默认的HSE/HSI作为系统时钟源已足够大多数应用场景;若有特殊要求则可根据实际情况修改PLL参数等选项来优化性能[^1]。 #### 配置USART外设资源 - **使能USART功能**:在Pinout & Configuration标签页找到对应的USART接口(如USART1),双击开启其功能。 - **设定波特率**:切换至Configuration->USARTx页面内指定合适的波特率数值,这决定了数据传输速率大小。 - **校验位、停止位及其他属性的选择**:同样在此处按照具体通讯协议规定选取相应的工作模式,比如8N1格式意味着每帧由起始位+8个数据位+N(无)奇偶检验位+1个停止位构成。 - **硬件(HW Flow Control)**:依据实际连接情况决定是否启用CTS/RTS握手机制制发送程[^2]。 #### DMA与中断处理 为了提高效率减少CPU占用时间,可以考虑采用DMA方式进行大批量连续的数据交换操作。针对UART接收不定长度的消息体场景尤为适用——通过激活DMA请求允许自动搬运接收到字节到内存缓冲区中去[^3]。与此同时,还需适当安排错误异常以及溢出状况下的响应措施确保程序稳健运行。 ```c // 初始化结构体定义部分代码片段示意如下: __HAL_UART_ENABLE(&huart1); /* Enable the UART Data Register not empty Interrupt */ __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE); // 中断服务函数模板展示: void USART1_IRQHandler(void){ HAL_UART_IRQHandler(&huart1); } ``` #### 生成初始化文件 最后一步就是利用STM32CubeMX提供的Code Generator特性一键产出全部必要的驱动层框架代码。只需简单勾选所需组件即可快速获得一份完整的嵌入式应用程序起点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值