0

我的设置如下:将 Nucleo 板(嵌入 STM32H743 的 Nucleo 144)配置为 SPI Master。另一个相同的板被配置为 SPI 从设备。

对于 Master,我使用以下配置设置了 SPI1(引脚 GND、D11、D12 和 D13 - CN7 连接器的 PA5、6、7-):

  • GPIO:非常高速,备用功能 5
  • SPI:预分频器 DIV8,启用中断,单工通信,无从机选择
  • 所有时钟设置为最大值(CPU 400MHz 等...)

对于从站,我也设置了 SPI1(相同的引脚),它工作正常。

然后我尝试为从板切换到 SPI2 外设,但无法使其工作(主板没有变化)。我为 SCK 选择了引脚 D18 (PB13),为 MISO 选择了 A7 (PC2),为 MOSI 选择了 A2 (PC3)。

我检查了以下几点:

  • SPI2 外设时钟使能
  • 启用 GPIOB 和 C 时钟,引脚 PB13、PC2 和 PC3 的设置方式与之前设置中的 PA5、6、7 相同。
  • 对于 GND,我在板上尝试了不同的 GND 引脚,我不知道它是否有区别。
  • 用于 SPI2 的 GPIO 在我的代码中的其他地方没有使用。我从 STM32H743ZI 的数据表中得到了它们

我所看到的:

  • 我的从机仍在正确接收 SCK 信号:我得到了正确数量的 RXP 中断。
  • 从机接收的数据已损坏。
  • 但是从机发送给主机的数据是正确的。

我认为 MOSI 信号配置不当,无论是物理上还是逻辑上。我尝试了其他 GPIO 引脚,其替代功能可以是 SPI2_MOSI 但行为相同。

SPI2 和/或此 GPIO 设置是否有特殊性?板上的 GND 位置重要吗?

4

1 回答 1

0

我通过在从设备端设置 SPI2 输入 GPIO 的下拉来“修复”(?)问题。我真的不明白为什么它在没有下拉 SPI1 的情况下工作,为什么在 Slave 上需要这个下拉?

于 2020-04-22T10:13:30.377 回答