ST意法半导体
直播中

李泳瑜

8年用户 1215经验值
私信 关注
[问答]

STM32H750 FDCAN发送异常的原因?

最近在调CANopen,用的芯片是STM32H750VBT6,发现按照ST的例程生成简单的测试程序后,只要执行一次发送后,CAN模块就会自动一直往外发送这帧数据,查看寄存器发现发送挂起寄存器一直有标志。
开始以为是配置问题,网上搜索也没有搜到太多相关的信息,之后分别查看了H7-Tool、rtthread和ST官方例程,发现设置并没有问题,后面就重新生成了一个只有CAN模块的代码,这时问题不再出现了,所以再去查之前的版本是否哪些代码导致了这个异常。
最后排查出来,原因是时钟的配置问题,由于其他部分需要,我的APB1时钟配置成了15MHz,而FDCAN1的时钟我用的是80MHz,将FDCAN1时钟改为40MHz后问题消失。(同时测试FDCAN1时钟80M,APB1时钟120M也是正常的)
查看手册可以看到FDCAN是有内核时钟域和APB时钟域两个时钟域,两个时钟域的数据进行交互时需要进行时钟同步
请问是否是之前的时钟配置使得这两个时钟域的同步异常了,所以导致发送挂起寄存器未被清空,从而一直往外发送数据?

回帖(2)

谢昌火

2025-3-8 10:32:21
楼主看一下CAN的配置是否开启重新发送的设置。发生这种情况,可以查看CAN的发送错误计数器。如果一直增加,说明是由于CAN波特率的问题或者CAN总线的问题,ST收不到对方的ACK后,重新发送导致。
举报

你又知道了

2025-3-10 17:29:43

在使用STM32H750VBT6的FDCAN模块时,遇到发送异常的问题,特别是发送挂起寄存器一直有标志的情况,通常与时钟配置、硬件初始化、中断处理或软件逻辑有关。根据你的描述,问题最终定位到时钟配置,以下是可能的原因和解决方案:




1. 时钟配置问题



  • 原因:FDCAN模块的时钟源来自APB1总线,APB1时钟的频率直接影响FDCAN的工作。如果APB1时钟配置不正确(例如频率过高或过低),可能导致FDCAN模块无法正常工作,从而出现发送异常。

  • 解决方案

    • 确保APB1时钟频率在FDCAN模块支持的范围内。根据STM32H750的参考手册,FDCAN模块的时钟频率需要满足以下条件:

      • 如果使用CAN协议(非CAN FD),时钟频率不能超过100 MHz。

      • 如果使用CAN FD协议,时钟频率不能超过20 MHz(取决于具体配置)。


    • 如果APB1时钟配置为15 MHz,确保FDCAN模块的分频配置正确,以满足CAN协议或CAN FD协议的位时间要求。

    • 检查RCC配置,确保FDCAN时钟源正确启用,并且APB1时钟频率与FDCAN模块的预期频率一致。





2. FDCAN初始化问题



  • 原因:FDCAN模块的初始化配置(如波特率、工作模式、过滤器等)不正确,可能导致发送异常。

  • 解决方案

    • 检查FDCAN的初始化代码,确保波特率、工作模式(正常模式或回环模式)等配置正确。

    • 使用ST提供的HAL_FDCAN_Init函数进行初始化,并确保所有参数符合应用需求。

    • 如果使用CAN FD,确保FDCAN_InitTypeDef中的DataPrescalerDataSyncJumpWidthDataTimeSeg1DataTimeSeg2等参数配置正确。





3. 发送缓冲区管理问题



  • 原因:如果发送缓冲区未正确管理,可能导致发送挂起寄存器一直有标志,从而持续发送数据。

  • 解决方案

    • 在发送数据后,检查发送缓冲区状态,确保数据已成功发送。

    • 使用HAL_FDCAN_GetTxFifoFreeLevel函数检查发送缓冲区的空闲空间。

    • 在发送完成后,清除发送挂起标志(如果使用中断,确保中断处理函数中正确处理了发送完成事件)。





4. 中断处理问题



  • 原因:如果启用了FDCAN发送中断,但未正确处理中断事件,可能导致发送挂起标志未清除,从而持续发送数据。

  • 解决方案

    • 检查FDCAN中断配置,确保发送完成中断(FDCAN_IT_TX_COMPLETE)已启用。

    • 在中断处理函数中,调用HAL_FDCAN_IRQHandler,并确保清除发送完成标志。





5. 硬件问题



  • 原因:如果硬件连接不正确(如CAN总线终端电阻缺失或连接错误),可能导致发送异常。

  • 解决方案

    • 检查CAN总线的物理连接,确保终端电阻(通常为120Ω)正确配置。

    • 使用示波器或逻辑分析仪检查CAN总线的信号质量,确保没有噪声或干扰。





6. 软件逻辑问题



  • 原因:如果软件逻辑中未正确处理发送完成事件,可能导致发送挂起标志未清除,从而持续发送数据。

  • 解决方案

    • 在发送数据后,检查发送完成标志,确保数据已成功发送。

    • 如果使用轮询方式,调用HAL_FDCAN_GetTxEventFifoFillLevel检查发送事件缓冲区的状态。

    • 如果使用中断方式,确保中断处理函数中正确处理了发送完成事件。





总结


根据你的描述,问题最终定位到时钟配置,建议重点检查以下内容:



  1. 确保APB1时钟频率在FDCAN模块支持的范围内。

  2. 检查FDCAN初始化配置,确保波特率、工作模式等参数正确。

  3. 在发送数据后,检查发送缓冲区状态,确保数据已成功发送。

  4. 如果使用中断,确保中断处理函数中正确处理了发送完成事件。


通过以上步骤,应该能够解决FDCAN发送异常的问题。如果问题仍然存在,可以进一步检查硬件连接或使用调试工具(如ST-Link、逻辑分析仪等)分析CAN总线的信号。

举报

更多回帖

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