你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32H723FDCANT通信

[复制链接]
%- 提问时间:2026-1-14 11:06 / 未解决

使用FDCAN通信,外部和内部循环都可以成功收发数据,但是换成正常模式就是不行,我是一主一从,电路连接后,测电压是60欧正常,然后我使用keil5调试,显示lasterrorcode为5 datalasterrorcode为7,然后有变速,这是为什么,然后去测CAN-L和CAN-H线,发现其在未发送数据时,依旧有电位差,已经确认了不是硬件问题

收藏 评论3 发布时间:2026-1-14 11:06

举报

3个回答
fafa1 回答时间:2026-1-14 11:14:17

KIMI:

根据您的描述和搜索结果,我分析这是典型的位时序和波特率切换(BRS)配置不匹配 问题。外部/内部环回模式能成功,因为它们不依赖真实的ACK应答,而正常模式需要严格的总线时序同步。

错误码分析

  • lasterrorcode = 5:仲裁阶段发生Bit0Error (发送'1'但回读为'0')
  • datalasterrcode = 7:数据阶段NoChange (无新错误)

这表明仲裁阶段就出现ACK失败或总线冲突 ,数据阶段根本未执行。外部环回模式绕过了ACK检查,所以能正常工作

核心原因与解决方案

1. 主从设备波特率配置不一致

这是最常见的原因。虽然您提到"有变速",但很可能是:

  • 主设备和从设备的BRS相关参数不匹配
  • 仲裁阶段波特率相同,但数据阶段波特率差异大

检查清单:

  • 比较主从设备的以下参数(需完全一致):
    • NominalPrescaler, NominalSyncJumpWidth, NominalTimeSeg1, NominalTimeSeg2(仲裁阶段)
    • DataPrescaler, DataSyncJumpWidth, DataTimeSeg1, DataTimeSeg2(数据阶段,CAN FD BRS模式)
  • 建议先用FDCAN_FRAME_FD_NO_BRS 模式测试,排除BRS影响

2. 从设备ACK响应问题

正常模式下,发送方需要收到ACK才能认为成功。可能原因:

  • 从设备过滤器配置错误 ,丢弃了主设备消息
  • 从设备未正确启动 (未调用HAL_FDCAN_Start()
  • 从设备接收中断未使能接收FIFO未配置

验证方法:

c复制

// 在从设备上配置宽松的过滤器接收所有消息
sFilterConfig.IdType = FDCAN_STANDARD_ID;
sFilterConfig.FilterType = FDCAN_FILTER_RANGE;  // 或FDCAN_FILTER_DISABLE
sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig);

3. 总线物理层问题

虽然60Ω终端电阻正常,但需确认:

  • CAN_H和CAN_L电压 :隐性时约2.5V,显性时CAN_H≈3.5V, CAN_L≈1.5V
  • 是否存在短路或虚接 :环回模式可能掩盖接触不良
  • 共地问题 :主从设备GND必须可靠连接

4. GPIO和时钟配置

根据STM32H723参考手册,检查:

  • 引脚复用功能 :FDCAN_TX/RX是否配置为GPIO_AF9_FDCAN1
  • 引脚速度 :必须设置为GPIO_SPEED_FREQ_VERY_HIGH
  • FDCAN时钟源 :确保hfdcan1.Init.NominalPrescaler计算基于正确的时钟频率

调试步骤建议

  1. 简化测试
    • 主从设备都配置为经典CAN模式 (FDCAN_FRAME_CLASSIC),波特率500kbps
    • 确认经典CAN模式正常后,再切换到CAN FD模式
  2. 逐步排查
    • 使用FDCAN_MODE_BUS_MONITORING 模式监控总线
    • 读取PSR(Protocol Status Register)寄存器,查看LEC和DLEC详细状态
  3. 代码配置示例

c复制

// 确保主从设备使用完全相同的配置
hfdcan1.Init.FrameFormat = FDCAN_FRAME_FD_BRS;  // 或先尝试FDCAN_FRAME_FD_NO_BRS
hfdcan1.Init.Mode = FDCAN_MODE_NORMAL;
hfdcan1.Init.AutoRetransmission = ENABLE;  // 必须使能自动重传
hfdcan1.Init.TransmitPause = DISABLE;
hfdcan1.Init.ProtocolException = ENABLE;

总结 :问题根源在于正常模式需要真实的总线握手和时序匹配 。先统一主从配置,从经典CAN模式开始验证,再逐步启用CAN FD和BRS功能。

xmshao 回答时间:2026-1-15 10:09:51

如果确定硬件没问题,会不会是配置方面问题,比方两端的波特率配置不一致?

还有,如果接收时关闭过滤试试?

butterflyspring 回答时间:2026-1-15 11:57:28
是不是环路延迟引起的?

降低速率或改为经典CAN试试。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版