UART
硬件控制(RTS/CTS)
RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据。
CTS (Clear ToSend,发送允许)为输入信号,用于判断是否可以向对方发送数据,低电平有效,低电平说明本设备可以向对方发送数据。
两者可在 HAL 中选择是否启用。(由硬件接口判断,并且注意在串口监视软件中设置相应的 Hardware Control
)由于是硬件接口,无需修改软件层面。
中断控制
涉及 USART 的中断事件表
Interrupt Event | Event Flag | Enable Control Bit |
---|---|---|
TransmitData Register Empty | TXE | TXEIE |
Clear To Send (CTS) flag | CTS | CTSIE |
Transmission Complete | TC | TCIE |
Received Data Ready to be Read | RXNE | RXNEIE |
Overrun Error Detected | ORE | RXNEIE |
Idle LineDetected | IDLE | IDLEIE |
Parity Error | PE | PEIE |
BreakFlag | LBD | LBDIE |
Noise Flag, Overrun error and Framing Error in multi buffer communication | NF or ORE or FE | EIE |
以上任意一个中断事件发生,都会进入 USARTX_IRQHandler
函数。这里需要用户自己判断标志位(具体可以参考 HAL 库做法)并处理相应中断,然后清除标志位
HAL
HAL 库实现 UART_HandleTypeDef
作为一个 UART
实例。
总的传诵方式分为三种:DMA、IT、阻塞传输。
阻塞传输:
HAL_UART_Transmit
与 HAL_UART_Receive
是阻塞传输。两个函数都会传入一个Size
,为接受/发送数据的长度。待传送字符串传递完后执行下一行代码。
阻塞传输注意超时设置,这个会由于硬件关系而有不同,数量级在千级别。
中断传输:
HAL_UART_Transmit_IT
与 HAL_UART_Receive_IT
是非阻塞传输。 HAL 开启中断传送,并将 UART
设置位忙碌状态(供其余函数查询是否传输完毕)。
中断传输会调用回调函数。HAL_UART_TxCpltCallback
、HAL_UART_TxHalfCpltCallback
、 HAL_UART_RxCpltCallback