首页/协议速查/CAN 协议
🚌

CAN 协议 控制器局域网

工业总线
多主+仲裁+硬件错误检测,汽车/工业现场总线的事实标准。
🧩 核心原理
📈 时序 / 工作过程图
CAN 标准帧结构(11位ID)SOF → 仲裁场 → 控制场 → 数据场 → CRC → ACK → EOFEOF总线空闲(隐性)显性位仲裁:ID 小的优先级高(显性0 覆盖 隐性1)· 数据段 0-8 字节 · 1Mbps@40m
⚙️ 配置 / 使用要点
  1. 波特率:分频+位时间(采样点 ~87.5% 常见)
  2. 滤波器:ID掩码/列表过滤接收
  3. 邮箱:3个发送邮箱 + FIFO接收
  4. 中断:接收FIFO/发送完成/错误
  5. 睡眠唤醒:低功耗总线唤醒
🛠️ 项目示例
CAN 接收滤波(只收 ID=0x321)
CAN_FilterTypeDef ft = {0};
ft.FilterIdHigh = (0x321 << 5);        // 标准帧ID左移5位
ft.FilterIdLow = 0;
ft.FilterMaskIdHigh = 0x7FF << 5;      // 全掩码=精确匹配
ft.FilterMaskIdLow = 0;
ft.FilterFIFOAssignment = CAN_RX_FIFO0;
ft.FilterActivation = ENABLE;
HAL_CAN_ConfigFilter(&hcan1, &ft);

CAN_RxHeaderTypeDef rh;
uint8_t data[8];
HAL_CAN_Receive(&hcan1, CAN_RX_FIFO0, &rh, data, 100);
// rh.StdId==0x321 才会进入本FIFO
❓ 面试高频
CAN怎么做到多主无冲突?
总线空闲谁都可以发;同时发则逐位仲裁,显性覆盖隐性,ID小的自然获胜,输家自动退出等待重发
CAN错误帧什么时候产生?
任何节点检测到位错误/填充错误/CRC错/应答错/格式错,发6位显性错误标志,通知全网丢弃该帧
CAN和CAN FD区别?
CAN FD数据段最高8Mbps、单帧最多64字节、可CRC增强,向后兼容CAN 2.0
✅ 自查清单 (点击勾选,本地保存)
0/0
会画CAN帧结构
理解仲裁机制
知道错误检测机制
会配波特率与滤波器
知道CAN FD改进点