【问题标题】:The best SPI Baudrate Prescaler最好的 SPI 波特率预分频器
【发布时间】:2019-09-26 21:33:42
【问题描述】:

我的问题与 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

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

【问题讨论】:

    标签: embedded spi hal baud-rate


    【解决方案1】:

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

    如果您正在查看 STM32 膨胀软件以获取有关如何编写 HAL 的建议,请停止。他们称其为 HAL,但它是“将低级寄存器访问隐藏在函数后面,因为寄存器很可怕”。而真正的 HAL 在 whole hw 外围驱动程序周围添加了更高的抽象层。因此名称 抽象层 - 不是“混淆层”。

    【讨论】:

      【解决方案2】:

      您需要阅读您想与之交谈的设备的文档。它有一个最大的时钟频率。

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

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

      然后将得到的 SPI 时钟与设备允许的最大时钟进行比较。使用对您的应用程序足够快且低于最大值的速度。

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

      【讨论】:

        猜你喜欢
        • 2018-10-19
        • 2015-09-12
        • 1970-01-01
        • 2014-03-18
        • 1970-01-01
        • 2015-10-28
        • 1970-01-01
        • 1970-01-01
        • 2017-01-01
        相关资源
        最近更新 更多