我的设置如下:将 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 位置重要吗?