STM32H7 FDCAN 外设CubeMX配置 (Classic 模式) 详解与避坑

张开发
2026/4/3 9:23:52 15 分钟阅读
STM32H7 FDCAN 外设CubeMX配置 (Classic 模式) 详解与避坑
前言在 STM32H7 系列中ST 使用了全新的 FDCAN 外设替代了传统的 bxCAN。很多开发者在刚升级到 H7 时会感到困惑“我只需要普通的 CAN 2.0 通讯不想用复杂的 CAN-FD该怎么配”其实FDCAN 外设完美向下兼容经典 CAN 2.0 通讯。本文将详细记录如何利用 HAL 库将 H7 的 FDCAN 外设配置为Classic 模式并梳理其中必须注意的 Message RAM 内存分配等“大坑”一、时钟树配置首先CORTEX_M7模式内全都DISABLE。将RCC内的高速外部时钟打开选择高速外部晶振点开Clock Configuration界面使用外部高速时钟HSE。启动FDCAN1再进入Clock Configuration界面出现如图所示界面直接点击Yes即可。FDCAN时钟树激活如下图所示。FDCAN时钟频率为50MHZ。二、FDCAN参数配置打开参数设置界面参数相当之多我们进行逐一解释。01FrameFormat - 帧格式直接选择Classic mode即可。02Mode - 工作模式我现在属于调试阶段选择内部回环模式。03 AutoRetransmission - 自动重传启用即可。04 TransmitPause - 发送暂停按图片配置即可。05 ProtocolException - 协议异常处理可开可不开。三、波特率配置FDCAN有两套波特率配置Nominal标称用于仲裁阶段标准CAN速率Data数据用于数据阶段CAN-FD高速速率仅FD模式有效。经典CAN模式不需要配置Data参数当FrameFormat FDCAN_FRAME_CLASSIC时Data阶段的配置参数会被硬件完全忽略不参与任何计算。但为了代码规范建议保持与Nominal相同的值。波特率计算公式为时钟频率为50MHZ时波特率配置示例NSWJ1与Seg2保持一致。N-Prescaler 25N-Seg1 2N-Seg2 1。具体配置来源可以上网找FDCAN的波特率计算软件。结果即为500BPS标准CAN的最高速率约为1MBPS可以自行尝试一下。那么D-Prescaler 25D-Seg1 2D-Seg2 1。接下来到了重头戏Message RAM 配置。四、Message RAM 配置STM32H7特有机制——STM32H7的FDCAN使用专用的Message RAM存储消息需要手动分配空间。总容量为10KB需要合理规划。01 StdFiltersNbr - 标准帧过滤器数量02 ExtFiltersNbr - 扩展帧过滤器数量03 RxFifo0ElmtsNbr - RX FIFO0 元素数量04 RxFifo0ElmtSize - RX FIFO0 元素大小经典CAN选8Byte即可。RxFifo1ElmtsNbr与RxFifo1ElmtSize是对于Fifo的辅助可以不设置前者给0即可需要用到可以自行了解。TxEventsNbr也可以不用管给0即可。05 TxFifoQueueElmtsNbr - TX FIFO 元素数量但是我这个版本的CubeMX要求TxFifoQueueElmtsNbrTxBuffersNbr 需要等于32我只能给TxFifoQueueElmtsNbr32如果有问题可以在评论区讲解一下。06 TX Buffer 数量07 TxFifoQueueMode - TX FIFO 模式使用先进先出的模式如果想高优先级ID先发送可选择队列模式。五、TX FIFO vs TX Buffer至此所有参数配置完成。但是想让FDCAN正常工作GPIO的模式也必须配置好。六、GPIO配置由于FDCAN的引脚具有复用所以我们只针对RX与引脚TX引脚做描述。01 CANTX 引脚配置模式复用推挽输出 (Alternate Function Push-Pull)TX发送引脚的输出速率通常建议选择 High高速。原因复用 (Alternate Function)该引脚的高低电平不由普通的 GPIO 寄存器控制而是交由 MCU 内部的 CAN 外设控制器接管。推挽输出 (Push-Pull)CAN 控制器需要通过 TX 引脚将数字信号逻辑 0 或 1发送给外部的 CAN 收发器如 TJA1050。推挽模式能提供较强的驱动能力确保信号边缘陡峭且电平切换迅速。2. CAN_RX (接收引脚)配置模式上拉输入 (Pull-up Input)输出速率Output Speed的设置对它没有任何影响随便选即可。原因上拉输入在某些设计中为了提高抗干扰能力会使用上拉输入。因为 CAN 总线的空闲状态隐性电平对应的数字逻辑是高电平1配置内部上拉可以保证在外部收发器未接入或线路断开时引脚保持高电平从而防止 MCU 产生误接收中断。七、结语行文至此FDCAN 的经典模式Classic Mode配置已全部完成。考虑到网上关于发送与接收的代码实现已有详尽资料笔者在此不再赘述以免冗余。限于个人知识体系的局限性本文观点具体实现可能存在 Bug 或非最优解。技术迭代日新月异如有谬误还望各位大佬海涵并指正。本博文仅供参考请大家在实战中结合具体情况谨慎复现期待与大家共同交流进步。

更多文章