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

STM32H723FDCANT通信

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

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

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

举报

1个回答
fafa1 回答时间:10 小时前

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功能。

所属标签

相似问题

官网相关资源

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