USART全称为Universal Synchronous and Asynchronous Receiver and Transmitter,即通用同步异步收发器。
串口通信,是一种数据传输方式,通过发送方产生一定的电压,接收方检测该电压的状态,从而实现数据的传输。串口通信分为同步和异步两种方式。异步串口通信是码元之间相互独立的一种串行传输方式。在异步串口通信中,采用的串行通信协议通常称为UART(Universal Asynchronous Receiver and Transmitter),支持单个传输通道,能够在给定的波特率下以异步方式实现传输。
USARTDIV是串口通信过程中的一个重要参数,它用于设置波特率分频系数,决定了数据的传输速率。
在STM32系列单片机中,USARTDIV的计算公式为$USARTDIV= \frac{PCLK}{8 \times (2-OVER8) \times USART\_BRR}$,其中PCLK为外设输入时钟,OVER8为一位控制位,USART_BRR是预分频器设置的数值。通过设置USART_BRR的不同数值,可以实现不同的波特率。
在实际的串口通信中,通常需要比较高的通信速率,即需要较小的USARTDIV值。但是在STM32中,如果希望设置较小的分频系数,即较高的波特率,需要使OVER8设为1来扩大分频系数范围。在这种情况下,USARTDIV的最小值就是16,即使我们期望的波特率能够被16整除,也需要采用大于16的值来设置USARTDIV。
可以通过以下公式来计算期望的波特率:$BaudRate = \frac{PCLK}{8 \times (2-OVER8) \times USARTDIV}$。当OVER8被设置为1时,它将导致预分频器输出的较低频率时钟周期加倍。因此,当OVER8为1时,每个数据位都需要8个周期,而不是16个周期。这就是为什么USARTDIV需要大于16的原因。
串口通信是一种常见的数据传输方式,USARTDIV作为串口通信过程中的一个重要参数,用于设置波特率分频系数。由于STM32中的OVER8一位控制位,设置其为1可以扩大分频系数的范围,但也导致了最小USARTDIV为16的限制。因此,在实际的系统设计中,需要注意USARTDIV的设置,以达到期望的通信速率。