我的设置如下:Nucleo板(Nucleo 144嵌入STM32H743(配置为SPI Master。另一个相同的板被配置为SPI Slave。
对于主I,设置SPI1(引脚GND、D11、D12和D13-CN7连接器的PA5、6、7-(,配置如下:
- GPIO:非常高的速度,可选功能5
- SPI:预分频器DIV8,中断启用,单工通信,无从选择
- 所有时钟设置为最大值(CPU 400MHz等(
对于从设备I也设置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在板上的位置重要吗?
I通过在从端设置SPI2输入GPIO下拉菜单来"修复"(?(该问题。我真的不明白为什么SPI1上没有下拉功能,也不明白为什么Slave上需要下拉功能?