最好的 SPI 波特率预分频器

The best SPI Baudrate Prescaler

我的问题与 SPI 速度有关。我怎么知道要使用哪个预分频器?它应该基于我想通过协议与之交谈的设备吗?

使用HAL库的一个例子是它有以下预分频器变量

较低的预分频器变量会导致更快的数据速率。但是我怎么知道使用哪一个或哪一个能提供最佳的最佳结果?

您需要阅读您喜欢与之通话的设备的文档。它具有最大时钟速率。

然后你需要查看你系统的系统时钟,它是如何被SPI模块使用的,以及预分频器是如何分频这个时钟的。您可以为每个预分频器选项写下一行 table。

现在估计您需要以多快的速度读取设备以满足您的应用程序的要求。为此,您需要查找要传输的字节数,包括寻址和命令等。

然后将生成的 SPI 时钟与设备允许的最大时钟进行比较。使用对您的应用来说速度足够快且低于最大值的那个。

如果您需要比设备的最大值更高的时钟,则无法满足要求。

预分频器是特定于硬件的东西。因此,HAL 根本不应该关心它。 HAL 应该采用两个参数:系统时钟和所需的波特率。而已。给定系统时钟,可能支持也可能不支持特定波特率。

如果您正在查看 STM32 过时软件以寻求有关如何编写 HAL 的建议,请停止。他们称它为 HAL,但实际上是 "hide low level register access behind functions, because registers are scary"。而真正的 HAL 在 whole 硬件外设驱动程序周围添加了一个更高的抽象层。因此名称 abstraction layer - 而不是 "obfuscation layer".