STM32
直播中

张龙祥

8年用户 1254经验值
擅长:连接器
私信 关注
[问答]

使用HAL库SPI读不到数据的原因?

程序运行一段时间后,出现spi收不到数据的情况。
追踪进去查看,发现是在发送函数中执行到__HAL_LOCK(hspi)就跳出去了
查看SPI_HANDLER,state一直是busy,lock一直是locked
不知道为什么会出现lock之后没有unlock的情况
因为程序同时只会有一个地方调用SPI函数,所以我在每次发送前将state和lock的值修改
这样修改之后就没有再出问题了
HAL库研究不深,不知道这是BUG还是我哪里处理有漏洞导致的。

回帖(2)

周烜

2024-4-26 11:02:11
是不是地址没有被解析正确
举报

京五环以外

2024-4-26 17:29:22
使用HAL库SPI读不到数据的原因可能有以下几点:

1. SPI初始化配置错误:请检查SPI的初始化配置,确保时钟、数据位、极性、相位等参数设置正确。

2. SPI中断配置错误:如果使用中断方式进行SPI通信,请确保中断配置正确,如中断优先级、中断服务函数等。

3. SPI通信速率不匹配:请检查SPI的通信速率是否与从设备兼容。

4. SPI从设备未正确响应:请检查从设备是否正确连接并正常工作。

5. SPI总线冲突:请检查SPI总线上是否有其他设备干扰通信。

关于您提到的__HAL_LOCK(hspi)跳出问题,这可能是由于以下原因导致的:

1. 程序中存在多个地方调用SPI函数,导致SPI状态被其他任务占用。虽然您提到只有一个地方调用SPI函数,但请确保没有其他地方间接调用。

2. SPI中断服务函数中未正确处理状态和锁。请检查中断服务函数中的代码,确保在每次发送完成后,正确地解锁并更新状态。

3. SPI硬件故障:虽然较不常见,但不能完全排除硬件故障的可能性。请检查硬件连接和外围设备。

4. HAL库本身的问题:虽然HAL库通常很稳定,但不能完全排除库本身存在问题的可能性。您可以尝试升级到最新版本的HAL库,或者查看官方文档和社区讨论,看是否有类似问题的解决方案。

您提到修改了state和lock的值后没有再出问题,这可能是因为您的修改确保了SPI状态和锁的正确管理。但请注意,直接修改这些值可能不是最佳实践,因为HAL库本身应该已经处理了这些状态。建议您仔细检查程序逻辑,确保没有其他地方导致SPI状态和锁被错误地管理。
举报

更多回帖

×
20
完善资料,
赚取积分