RT-Thread论坛
直播中

温暖镜头

9年用户 991经验值
擅长:电源/新能源 制造/封装
私信 关注

STM32F407GET6的工程发CAN数据时,容易卡死在rt_device_write函数里面,为什么?

同样是在RTThread里面调用

rt_device_write(can_dev, 0, &msg, sizeof(msg))
发送CAN数据时,

基于STM32F407GET6的工程就容易卡死在这个函数里面,而基于STM32F105RCT6的工程运行的很好,这是为什么呀?

回帖(1)

硕达科讯

2024-7-15 17:10:02
要解决这个问题,我们可以按照以下步骤进行排查和分析:

1. **检查硬件连接**:首先确保STM32F407GET6的CAN硬件连接正确,包括CAN收发器、终端电阻等。硬件问题可能导致通信不稳定或失败。

2. **检查CAN驱动**:确认STM32F407GET6和STM32F105RCT6使用的CAN驱动是否相同。如果不同,可能存在驱动不兼容或性能差异的问题。可以尝试更新或替换驱动。

3. **检查CAN配置**:检查两个工程的CAN配置是否一致,包括波特率、模式等。如果配置不一致,可能导致通信问题。

4. **分析rt_device_write函数**:检查rt_device_write函数的实现,看是否有可能在STM32F407GET6上出现死循环或资源竞争的情况。可以尝试添加调试信息,以便更好地了解函数的执行过程。

5. **检查中断处理**:STM32F407GET6和STM32F105RCT6的中断处理方式可能有所不同。检查中断服务程序(ISR)的实现,确保它们在两个平台上都能正确处理CAN中断。

6. **检查内存管理**:STM32F407GET6和STM32F105RCT6的内存大小和类型可能不同。检查工程的内存分配,确保在STM32F407GET6上没有内存泄漏或溢出的问题。

7. **检查RTOS调度**:RTThread的调度策略可能在两个平台上表现不同。检查调度器的配置,确保在STM32F407GET6上没有调度问题。

8. **测试其他功能**:尝试在STM32F407GET6上运行其他功能,看是否也会出现卡死的情况。这有助于确定问题是否仅限于CAN通信。

9. **查看错误日志**:检查RTThread的错误日志,看是否有关于CAN通信失败或错误的信息。这可能为解决问题提供线索。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分