梧桐uuu 发表于 2025-7-9 12:01

SPI主机,全双工,未为stm32F412分配MISO线路

用CubeID搞搞了stm32f412,我想使用SPI接口作为主机,不使用MISO线,但我不想将该设备配置为主机"receive-only'",因为时钟在该模式下不同(当SPI启用时总是时钟)。我希望通过发送虚拟字节(dummy bytes)来触发接收数据的时钟同步。我的SPI和GPIO的代码生成都设置为LL API。通过项目管理器->高级设置。问题如下:CubeIDE不允许我有一个未分配的MISO行,仍然启用SPI。也许一个可能的解决方法是在CubeIDE中将另一个引脚错误地分配为MISO,并在SPI结尾的用户代码部分重新分配MISO行。这是否是一个bug?

公羊子丹 发表于 2025-7-28 07:18

CubeMX确实不允许MISO为空但仍配置全双工主机,这应该算是个逻辑限制而非BUG。

周半梅 发表于 2025-7-28 07:19

我也碰到过,用虚拟引脚占个MISO位置,然后初始化后手动屏蔽GPIO功能就行了。

帛灿灿 发表于 2025-7-28 07:19

你这个需求可以用全双工模式 + dummy byte实现,不用配置receive-only。

童雨竹 发表于 2025-7-28 07:20

实际上SPI只要MOSI和SCK连通就能发dummy byte,MISO不接照样收,只是CubeMX不认。

万图 发表于 2025-7-28 07:21

LL API里你可以直接用 LL_SPI_TransmitData8() + 读DR来实现完整的虚拟收发。

Wordsworth 发表于 2025-7-28 07:22

建议你先在Cube里选上个假的MISO,然后在MX_SPIx_Init后手动清除那个引脚功能。

Bblythe 发表于 2025-7-28 07:23

这不算bug,是CubeMX对全双工设备的一种默认要求,其实底层SPI寄存器不管你连没连MISO。

Pulitzer 发表于 2025-7-28 07:23

你也可以考虑自己写GPIO_Init结构体跳过MX_GPIO_Init对MISO的配置。

Uriah 发表于 2025-7-28 07:24

我试过把MISO复用给其他功能用了,SPI通信也正常,只要你不读取MISO就行。

Clyde011 发表于 2025-7-28 07:25

实在不行就手动改IOC生成的代码,保留全双工配置但注释掉MISO引脚初始化那一行。
页: [1]
查看完整版本: SPI主机,全双工,未为stm32F412分配MISO线路