1

如何将 USART 波特率提高到 2Mbps、3Mbps 或 4Mbps。我正在使用 STM32L151RCT6A,我能够运行到 921600。我已经设置了 PLL 32MHz 的时钟。在给出的数据表上,这表明这是可能的,有人做过吗?

4

1 回答 1

3

数据表仅概述了特定部件及其外围设备和电气特性。有关如何使用设备的信息,您需要参考手册。这给出了以下波特率等式:

Tx/Rx 波特 = CK_APB1 / (8 x (2 - OVER8) x USARTDIV)

其中 USARTDIV 是在 USART_BRR 寄存器上编码的无符号定点数。

  • 当 OVER8=0 时,小数部分编码为 4 位,并由 USART_BRR 寄存器中的 DIV_fraction[3:0] 位编程
  • 当 OVER8=1 时,小数部分被编码为 3 位,并由 USART_BRR 寄存器中的 DIV_fraction[2:0] 位编程,并且位 DIV_fraction 3必须保持清零。

USART 位于 APB1 总线上,参考手册中的图 12 是时钟树,它显示了 APB1 时钟是如何从 PLL 时钟导出的。APB1 的最大时钟为 32MHz。OVER8=1 需要更高的速度,给出:

波特 = 32X10 6 / (USARTDIV x 8)。

所以 USARTDIV = 32X10 6 / (波特 x 8)

因此,对于 4Mbps,USARTDIV=1(详见表 138 S.No.12)。对于 2Mps,USARTDIV=2。要达到 3Mbps,您必须将 APB1 时钟降低到 24MHz 并设置 USARTDIV=1(参见表 131)。但请注意,所有其他 APB1 外设的时钟速率也会发生变化。

正确编程 USART 波特率的最简单方法是通过STM32L1xx 标准外设库。此外,要确定正确的外设时钟设置(以及更多)并生成初始化代码,您可以使用 STM 的MicroXplorer工具。

于 2013-12-10T20:28:31.273 回答