首页 > 解决方案 > STM32 CANBUS功能模式初始化设置是什么意思?

问题描述

我想了解以下功能模式定义的含义,库中有解释。但我不明白,因为解释很短而且不够。我在网上搜索了我找不到任何有关的信息。

CAN_InitStructure.CAN_TTCM = DISABLE;
    CAN_InitStructure.CAN_ABOM = DISABLE;
    CAN_InitStructure.CAN_AWUM = DISABLE;
    CAN_InitStructure.CAN_NART = ENABLE;
    CAN_InitStructure.CAN_RFLM = DISABLE;
    CAN_InitStructure.CAN_TXFP = ENABLE;

标签: stm32can-bus

解决方案


这些是位于 CAN 主控制寄存器 ( CAN_MCR ) 中的位的名称。因此,其含义的正确来源是参考手册。我的以下答案将在某种程度上从参考手册中复制和粘贴,但我将尝试详细解释这些位。

TTCM(时间触发通信模式):该位激活时间触发通信 (TTCAN) 模式,这是 CAN 标准的扩展。我对TTCAN了解不多,但据我了解,它为消息分配时间窗口以满足一些实时要求。因此,通常该位应保持为 0。

ABOM(自动总线关闭管理):如果发送错误计数器 (TEC) 大于 255,则 CAN 硬件切换到总线关闭状态。要恢复,它必须等待恢复序列,即 11 个连续隐性位出现 128 次。只有在此之后,CAN 硬件才能恢复正常运行状态。该位控制返回行为。如果为 1,则自动返回正常状态。否则,软件应发出请求,前提是已观察到恢复顺序。

AWUM(自动唤醒模式): CAN 模块可以处于 3 种模式之一:初始化模式、正常模式或睡眠(低功耗)模式。软件请求休眠模式。但是,您有 2 个选项可以退出睡眠模式。如果该位为 0,则您必须手动退出睡眠模式。您可以启用 CAN 唤醒中断以通知您总线活动,然后在 ISR 中退出睡眠模式。但如果该位为 1,则硬件在检测到总线活动时会自动返回正常模式。

NART(无自动重传):通常情况下,如果之前的尝试失败,由于仲裁丢失等原因,CAN 硬件会重试发送消息。但如果将此位设为 1,则发送器不会重试。当您使用时间触发通信 (TTCAN) 时,这是必需的。否则,您应该保持该位为 0。

RFLM(接收 FIFO 锁定模式):您的接收邮箱有 3 级深度,这意味着它们在溢出之前最多可以存储 3 条消息。该位控制邮箱溢出时发生的情况。默认行为是保留最旧的 2 条消息和最新的一条。例如,如果您收到 5 条消息,则缓冲区会保留消息 1、2 和 5。但是,如果将此位设为 1,则邮箱会保留消息 1、2 和 3 并丢弃新到达的消息。

TXFP(发送 FIFO 优先级):您有 3 个发送邮箱。当您填充多个时,硬件必须决定首先传输哪一个。通常,可以假设 ID 号较低的消息更重要,应该首先发送。但是如果你出于某种原因想以先到先得的方式传输它们,则需要将此位设为 1。当然,这只是本地优先级。在物理总线上,ID 较低的消息始终具有优先权。


推荐阅读