【问题标题】: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 时钟与设备允许的最大时钟进行比较。使用对您的应用程序足够快且低于最大值的速度。
如果您需要比设备最大时钟更高的时钟,则无法满足要求。