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

[复制链接]
 楼主| 梧桐uuu 发表于 2025-7-9 12:01 | 显示全部楼层 |阅读模式
用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引脚初始化那一行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

41

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

39

主题

41

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部