[STM32L4] 如果将SPI配置为slave_rxonly并启用SPI,当我将设备重新配置为主机时,会意外地立即发送时钟信号

[复制链接]
80|16
shashaa 发表于 2026-3-3 19:57 | 显示全部楼层 |阅读模式
让STM32F4在一定时间后从从机模式切换为主机模式,作为主机发送消息,然后再切换回从机模式。如果将SPI配置为slave_rxonly并启用SPI,当我将设备重新配置为主机时,会意外地立即发送时钟信号。而我此时并没有发送任何数据。
这是我的主循环。
while (1)  {    /* USER CODE END WHILE */     /* USER CODE BEGIN 3 */          MX_SPI1_Init(); /* This configures master */          HAL_Delay(10);           sendHelloWorld();          configSlave(); /* Configures slave mode */          __HAL_SPI_ENABLE(&hspi1); /* Enabling the device in this mode generates a continous clock during master init */           HAL_Delay(100);           HAL_SPI_DeInit(&hspi1);        /* Disables SPI and de-initializes the peripheral */  }
litengg 发表于 2026-3-3 20:04 | 显示全部楼层
在切换模式前最好关一下 SPI。
androidbus 发表于 2026-3-3 20:04 | 显示全部楼层
像是 SPI_CR1 寄存器里的位没清干净
xia00 发表于 2026-3-3 20:08 | 显示全部楼层
用 __HAL_SPI_DISABLE 再改模式会稳定点。
hfdy01 发表于 2026-3-3 20:09 | 显示全部楼层
我之前也遇到过类似的情况。
CallReceiver 发表于 2026-3-3 20:11 | 显示全部楼层
可以试试在切主从之前关掉外设时钟。是不是 SPI 外设时钟没关?
boy1990 发表于 2026-3-3 20:12 | 显示全部楼层
可以把 HAL_SPI_DeInit 放在切换模式前做一次。
sourceInsight 发表于 2026-3-3 20:16 | 显示全部楼层
可以先把 NSS 拉高再切换,防止主机模式立刻输出时钟。
bbapple 发表于 2026-3-3 20:16 | 显示全部楼层
你是主循环里一直重新 init,能不能把 init 拆成主从两个函数?
handleMessage 发表于 2026-3-3 20:19 | 显示全部楼层
STM32 的 SPI 切模式时残留的状态机会触发时钟的吧。
zhouhuanの 发表于 2026-3-3 20:20 | 显示全部楼层
切模式要注意先关闭 SPI,然后重置控制寄存器。
wanglaojii 发表于 2026-3-3 20:22 | 显示全部楼层
可以考虑直接操作寄存器来切换模式
laozhongyi 发表于 2026-3-3 20:23 | 显示全部楼层
别走 HAL了,那样可控性高点。
Edisons 发表于 2026-3-3 20:25 | 显示全部楼层
这个循环里反复 init/deinit 其实挺浪费的
_gege 发表于 2026-3-3 20:26 | 显示全部楼层
有条件的话最好保持一个状态机来管理。
Mozarts 发表于 2026-3-3 20:27 | 显示全部楼层
通常与SPI 外设状态未正确复位或模式切换时序问题有关。
Listate 发表于 2026-3-3 20:28 | 显示全部楼层
可在MX_SPI1_Init中添加断点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

164

主题

1594

帖子

6

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