久芯网

stm32f407的spi2调试稳定性问题

avatar savant 提问时间: 2023-07-25 08:20:46 / 未解决
我现在用stm32f407的spi2基于HAL库来调试一款spi设备,遇到的现象是:当我单步调试并能跟spi设备成功通信后,我断开这次单步调试,然后再紧跟着进行下一次单步调试,发现跟spi设备就不能成功通信了。请问这种情况是什么原因?十分感谢。

同样的现象是:当我单步调试并能跟spi设备成功通信后,我给板子断电后再上电,然后进行下一次单步调试,发现跟spi设备就又不能成功通信了。

如需获得 stm32f407 等器件的更多信息,请点击链接或 点击此处 联系在线客服!

12个回答
  • avatar savant
    回答时间: 2023-07-25 08:46:02

    同样的现象是:当我单步调试并能跟spi设备成功通信后,我给板子断电后再上电,然后进行下一次单步调试,发现跟spi设备就又不能成功通信了。

  • avatar butterflyspring
    回答时间: 2023-07-25 09:08:00

    断开从设备试试看,是不是从设备拉住或没有相应。 如果断开口每次主设备都能发出波形,那么就是与冲设备同步的问题,需要从设备准备好的情况下才能通信。

  • avatar savant
    回答时间: 2023-07-25 09:31:26
    butterflyspring 发表于 2022-7-4 10:29
    断开从设备试试看,是不是从设备拉住或没有相应。 如果断开口每次主设备都能发出波形,那么就是与冲设备同 ...

    您好! 1.现在的现象就是从设备没有相应。 2.我们把spi从设备断开后,每次主设备都能发出波形。 3.硬件上从设备和mcu之间连了一根线,从设备要求mcu侧判断这个线为高时,表明可以与从设备可以进行通信了。这些我在程序里都做了处理,如果这个线不为高的话程序不会往下执行的。所以我感觉跟从设备没多大关系。您认为呢?谢谢!

  • avatar xmshao
    回答时间: 2023-07-25 09:57:48

    你所说的不成功通信是指的什么?发不出去还是接收不了?还是说根本没反应?你可以先基于F407这边的SPI自发自收测试验证下,这边跑顺了,然后连接外部SPI进一步调试。还有,F407这边的SPI通信是基于查询方式?还是中断方式 抑或 DMA方式?

  • avatar butterflyspring
    回答时间: 2023-07-25 10:27:50

    假如通讯信号传输了一部分,这时候主突然复位,而从设备还处在接收状态,再次通讯就会有这种故障。 这是主从没有同步所致,在调试时会很容易发生。 可以这样验证一下,将程序延迟几秒中执行(从的要延迟时间要短一些),然后主从同时复位看看

  • avatar savant
    回答时间: 2023-07-25 10:53:50
    butterflyspring 发表于 2022-7-4 14:08
    假如通讯信号传输了一部分,这时候主突然复位,而从设备还处在接收状态,再次通讯就会有这种故障。 这是主 ...

    您说的“可以这样验证一下,将程序延迟几秒中执行(从的要延迟时间要短一些),然后主从同时复位看看”,不是特别理解。是主从两侧都要延迟吗?另外主从同时复位肯定不行。因为在主这侧还有其他功能程序在运行啊。

  • avatar savant
    回答时间: 2023-07-25 11:20:23
    butterflyspring 发表于 2022-7-4 14:08
    假如通讯信号传输了一部分,这时候主突然复位,而从设备还处在接收状态,再次通讯就会有这种故障。 这是主 ...

    您可以看看我录的调试视频。

  • avatar savant
    回答时间: 2023-07-25 11:44:11
    butterflyspring 发表于 2022-7-4 14:08
    假如通讯信号传输了一部分,这时候主突然复位,而从设备还处在接收状态,再次通讯就会有这种故障。 这是主 ...

    您好,您说的“可以这样验证一下,将程序延迟几秒中执行(从的要延迟时间要短一些),然后主从同时复位看看”,我不是太理解怎么测试?是说主从两端都加延迟吗?主从同时复位?

  • avatar savant
    回答时间: 2023-07-25 12:06:53
    butterflyspring 发表于 2022-7-4 14:08
    假如通讯信号传输了一部分,这时候主突然复位,而从设备还处在接收状态,再次通讯就会有这种故障。 这是主 ...

    您好,您说的“将程序延迟几秒中执行(从的要延迟时间要短一些),然后主从同时复位看看”是什么意思?是主从两侧都要延时? 怎么做到主从同时复位?

  • avatar 李康1202
    回答时间: 2023-07-25 12:25:01

    有没有可能是频率太快

  • avatar butterflyspring
    回答时间: 2023-07-25 12:44:14
    savant 发表于 2022-7-4 20:58
    您好,您说的“将程序延迟几秒中执行(从的要延迟时间要短一些),然后主从同时复位看看”是什么意思?是 ...

    这样设置的目的是保证主从同时上电时,从先准备好,主再发送信号。 另外发送最好参考一下官方库的例程,在发送完成的回调函数里设置发送成功的标志。用延时的话一般可以用实现,就是逻辑上不如官方的那么完善而已。

  • avatar xmshao
    回答时间: 2023-07-25 13:01:59

    你所说的不成功通信是指的什么?发不出去还是接收不了?还是说根本没反应?你可以先基于F407这边的SPI自发自收测试验证下,这边跑顺了,然后连接外部SPI进一步调试。还有,F407这边的SPI通信是基于查询方式?还是中断方式 抑或 DMA方式?

会员中心 微信客服
客服
回到顶部