SPI主机,全双工,未为stm32F412分配MISO线路
用CubeID搞搞了stm32f412,我想使用SPI接口作为主机,不使用MISO线,但我不想将该设备配置为主机"receive-only'",因为时钟在该模式下不同(当SPI启用时总是时钟)。我希望通过发送虚拟字节(dummy bytes)来触发接收数据的时钟同步。我的SPI和GPIO的代码生成都设置为LL API。通过项目管理器->高级设置。问题如下:CubeIDE不允许我有一个未分配的MISO行,仍然启用SPI。也许一个可能的解决方法是在CubeIDE中将另一个引脚错误地分配为MISO,并在SPI结尾的用户代码部分重新分配MISO行。这是否是一个bug?CubeMX确实不允许MISO为空但仍配置全双工主机,这应该算是个逻辑限制而非BUG。 我也碰到过,用虚拟引脚占个MISO位置,然后初始化后手动屏蔽GPIO功能就行了。 你这个需求可以用全双工模式 + dummy byte实现,不用配置receive-only。 实际上SPI只要MOSI和SCK连通就能发dummy byte,MISO不接照样收,只是CubeMX不认。 LL API里你可以直接用 LL_SPI_TransmitData8() + 读DR来实现完整的虚拟收发。 建议你先在Cube里选上个假的MISO,然后在MX_SPIx_Init后手动清除那个引脚功能。 这不算bug,是CubeMX对全双工设备的一种默认要求,其实底层SPI寄存器不管你连没连MISO。 你也可以考虑自己写GPIO_Init结构体跳过MX_GPIO_Init对MISO的配置。 我试过把MISO复用给其他功能用了,SPI通信也正常,只要你不读取MISO就行。 实在不行就手动改IOC生成的代码,保留全双工配置但注释掉MISO引脚初始化那一行。
页:
[1]