最好的SPI波特率预分频器



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

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

  • SPI_BAUDRATEPRESCALER_2
  • SPI_BAUDRATEPRESCALER_4
  • SPI_BAUDRATEPRESCALER_8
  • SPI_BAUDRATEPRESCALER_16
  • SPI_BAUDRATEPRESCALER_32
  • SPI_BAUDRATEPRESCALER_64
  • SPI_BAUDRATEPRESCALER_128
  • SPI_BAUDRATEPRESCALER_256

预分频器变量越低,数据速率越快。但是我怎么知道使用哪一个或哪一个能提供最佳结果呢?

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

如果您正在查看STM32英国媒体报道软件以获取有关如何编写HAL的建议,请停止。他们称之为HAL,但它更像是"将低级寄存器访问隐藏在函数后面,因为寄存器很可怕"。而真正的HAL在整个硬件外设驱动程序周围添加了更高的抽象层。因此命名抽象- 而不是"混淆层"。

您需要阅读要与之交谈的设备的文档。它具有最大时钟速率。

然后,您需要查找系统的系统时钟,SPI模块如何使用该时钟,以及预分频器如何划分此时钟。您可以写下每个预分频器选项的表格,其中有一行。

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

然后将所得SPI时钟与器件允许的最大时钟进行比较。使用对您的应用程序来说足够快且低于最大值的那个。

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

相关内容

  • 没有找到相关文章

最新更新