USART 到 4MBps!如何? STM32L151xx

Posted

技术标签:

【中文标题】USART 到 4MBps!如何? STM32L151xx【英文标题】:USART to 4MBps! how? STM32L151xx 【发布时间】:2013-12-27 17:32:25 【问题描述】:

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

【问题讨论】:

你想在什么模式下使用它们?一个 USART 可以做 uart 类型的东西,同步串行等等,4Mbit/sec 可能不是在所有模式下都是可能的。 我是通过中断使用usart-RX/TX,可能是使用波特率计算公式,使用pclk外设时钟,但需要测试。 reference manual的第26.3.4章有详细的解释。当 OVER8=1 和 USART_BRR=1 时,您将达到 4Mb。使其可靠并跟上比特率是不平凡的。 所以我已经完成了 usart_oversampling8 ENABLE 并且我的 pclk 时钟是 32MHz。我尝试将 usart_brr 设置为 1,但我需要在 Windows 上使用一些串行终端实用程序,当我连接到它时可以显示一些打印。有什么想法吗? "usart" 不是一种模式。它是一个(“通用”)外围引擎,可以在同步或异步模式下运行,但您必须选择一个。由于异步模式通常需要一个过采样接收时钟,这会使高波特率复杂化。为了进行测试,您将需要类似功能的硬件 - 如果没有现成的硬件,则可能是您的第二块板(或相关的功能更强大的发现系列板)通过 USB 后端到您的开发机器上的转储或终端实用程序。 【参考方案1】:

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

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_fraction3 必须保留 清除。

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

波特 = 32X106 / (USARTDIV x 8)。

所以 USARTDIV = 32X106 / (baud x 8)

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

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

【讨论】:

谢谢!好答案!我将尝试在两个 STM32L151RCT6A 板之间进行 USART 通信,我将使用非常小的电线连接 USART TXD 和 RXD,我看到了 STM32L1xx 标准库,我正在使用它。 请注意,自从编写此答案以来,MicroXplorer 已被更全面的 STM32CubeMX 取代 - 尽管我个人仍会推荐 StdPeriph 库而不是 CubeMX 生成的代码和 HAL,但它仍然是一个有用的时钟计算器和引脚多路冲突检查器。

以上是关于USART 到 4MBps!如何? STM32L151xx的主要内容,如果未能解决你的问题,请参考以下文章

STM32L011 无法在 rx 模式下设置 USART

Stm32L151RCxxx USART 挂起问题,同时基于中断的 TX/RX

在 STM32L0 上进入低功耗模式以使用 USART1

STM32L1xx——ADC(中断/DMA)样例代码

STM32L1X系列GPIO运用

STM32L151 LL库串口发送丢数据解决办法