stm32 - 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;
解决方案
这些是位于 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 较低的消息始终具有优先权。
推荐阅读
- html - 使动态 MdBootstrap 卡具有相同的高度
- powershell - 使用 PowerShell 查找路径,而不是文件
- python - 如何从列表中过滤熊猫中的数据?
- javascript - window.open 并在控制台中执行操作
- javascript - 检查数字的快速方法是在一组数字的范围内
- python - 当字符串包含特殊字符“+”时,Python 正则表达式不匹配
- flutter - Flutter中如何设置ListTile中图片的高度?
- html - CSS - 将溢出的表格单元格内容集中在其父级上
- c++ - 如何将命名空间添加到 Lua?
- c# - 在 C# 中使用列表填充 ComboBox