一主一从刚开始可以正常通讯,运行时间久了之后(大概两个小时之后),通讯就断开了,主从机一直处于hal_spi_state_busy_tx_rx状态,执行hal_spi_transmitreceive_it函数了,也都没进去中断回调函数
看起来你的SPI通讯在长时间运行后遇到了问题,这可能是由许多原因引起的。以下是一些可能的问题和解决方法:
硬件问题:长时间运行可能导致硬件过热或者出现其他硬件问题。检查硬件连接,尤其是SPI线路和电源,确保一切都正常。
中断优先级问题:如果你在中断处理程序中使用了阻塞函数,或者你的中断优先级设置不当,可能会造成这样的问题。检查中断优先级设置,并确保在中断处理程序中不使用阻塞函数。
缓冲区溢出:确保你的SPI数据缓冲区没有溢出。如果有必要,清空或者增大你的缓冲区。
超时问题:你可能需要调整SPI通讯的超时时间。如果你的设备在等待SPI数据时超时,可能会导致通讯失败。
软件错误或内存泄漏:长时间运行的程序可能会因为内存泄漏或其他软件错误而失败。尝试使用代码分析工具检查你的程序,看是否存在内存泄漏或者其他潜在的问题。
HAL库问题:你也可能遇到了HAL库的bug。如果可能的话,尝试升级到最新的库版本,或者查看STM32的官方论坛或者GitHub仓库,看是否有相关的已知问题。
请记住,解决这类问题往往需要具体的调试和详细的代码分析。这只是一些可能的原因和解决方案,可能需要更多的信息才能找到具体的问题。如果以上方法都不能解决问题,你可能需要提供更多的代码或者硬件信息。