CAN(Controller Area Network,控制器局域网络)是一种多主机制的串行通信协议,广泛用于汽车电子、工业控制、电机驱动、医疗设备、轨道交通等领域。它最早由德国 Bosch 公司为了解决汽车内部 ECU(电子控制单元)之间的信息交换而开发,具备高速、抗干扰、实时性强的特点。
CAN 接口,是指支持 CAN 通信协议的数据收发接口,通常由硬件收发器(如 TJA1050)和 CAN 控制器(内置于 MCU 或单独芯片)组成。CAN 接口的开发,涵盖了驱动配置、数据格式处理、收发逻辑实现、协议扩展等多个环节。
1. 总线结构
CAN 总线是一种两线制差分信号通信方式,线缆为 CAN_H(高电平)和 CAN_L(低电平),数据传输通过这两根线之间的电压差来实现:
多个节点共享总线,遵循优先级仲裁机制进行非破坏性争用。
特性 | 说明 |
---|---|
多主架构 | 所有节点都可发起通信 |
差分通信 | 抗干扰能力强 |
位填充机制 | 保持时钟同步性 |
CRC 校验与确认机制 | 确保数据完整性 |
仲裁机制 | 通过 ID 实现优先级控制 |
CAN 有两种协议版本:
每一帧 CAN 数据帧由以下几个部分组成:
字段 | 位数 | 说明 |
---|---|---|
起始位 | 1 | 表示一帧数据开始 |
标识符(ID) | 11 | 标志帧的优先级,越小优先级越高 |
RTR 位 | 1 | 远程传输请求位:0=数据帧,1=远程帧 |
控制字段 | 6 | 包括 IDE、r0、DLC(数据长度)等 |
数据字段 | 0~64 | 数据内容,最多 8 字节(CAN FD 最多 64) |
CRC 校验 | 15 | 冗余校验码 |
ACK 确认位 | 2 | 应答字段,其他节点返回 ACK |
结束位 | 7 | 标志帧结束 |
开发 CAN 接口的基本硬件由以下几部分构成:
plaintext复制编辑MCU (CAN TX/RX) ↔ TJA1050 ↔ CAN_H / CAN_L ↔ 120Ω ↔ 节点2
多个节点并联在总线上,所有节点 CAN_H 和 CAN_L 对应连接。
https://vk.com/topic-231006945_53355596 https://vk.com/topic-231006465_53355595 https://vk.com/topic-231008479_53958984 https://vk.com/topic-231003648_53887571 https://vk.com/topic-231006945_53355591 https://vk.com/topic-231006465_53355590 https://vk.com/topic-231008479_53958976 https://vk.com/topic-231003648_53887562 https://vk.com/topic-231006945_53355586 https://vk.com/topic-231006465_53355585 https://vk.com/topic-231008479_53958971 https://vk.com/topic-231003648_53887558 https://vk.com/topic-231006945_53355578 https://vk.com/topic-231006465_53355577 https://vk.com/topic-231008479_53958965 https://vk.com/topic-231003648_53887552 https://vk.com/topic-231006945_53355570 https://vk.com/topic-231006465_53355569 https://vk.com/topic-231008479_53958959 https://vk.com/topic-231003648_53887544 https://vk.com/topic-231005518_53887360 https://vk.com/topic-231005518_53887357 https://vk.com/topic-231005518_53887353 https://vk.com/topic-231005518_53887348 https://vk.com/topic-231007415_53355419 https://vk.com/topic-231006581_54814423 https://vk.com/topic-231006938_53887346 https://vk.com/topic-231005518_53887342 https://vk.com/topic-231007415_53355413 https://vk.com/topic-231006581_54814418 https://vk.com/topic-231006938_53887340 https://vk.com/topic-231007415_53355409 https://vk.com/topic-231006581_54814412 https://vk.com/topic-231006938_53887333 https://vk.com/topic-231007415_53355406 https://vk.com/topic-231006581_54814408 https://vk.com/topic-231006938_53887326 https://vk.com/topic-231007415_53355401 https://vk.com/topic-231006581_54814406 https://vk.com/topic-231006938_53887318 https://vk.com/topic-231006581_54814254 https://vk.com/topic-231008479_53958527 https://vk.com/topic-231006676_53717396 https://vk.com/topic-231075348_53887097 https://vk.com/topic-231006581_54814247 https://vk.com/topic-231008479_53958518 https://vk.com/topic-231006676_53717392 https://vk.com/topic-231075348_53887090 https://vk.com/topic-231006581_54814243 https://vk.com/topic-231008479_53958512 https://vk.com/topic-231006676_53717384 https://vk.com/topic-231075348_53887084 https://vk.com/topic-231006581_54814238 https://vk.com/topic-231008479_53958504 https://vk.com/topic-231006676_53717377 https://vk.com/topic-231075348_53887079 https://vk.com/topic-231006581_54814232 https://vk.com/topic-231008479_53958495 https://vk.com/topic-231006676_53717374 https://vk.com/topic-231075348_53887073 https://vk.com/topic-231075345_53355061 https://vk.com/topic-231005856_53717232 https://vk.com/topic-231075345_53355056 https://vk.com/topic-231006676_53717230 https://vk.com/topic-231006581_54814026 https://vk.com/topic-231005856_53717226 https://vk.com/topic-231075345_53355054 https://vk.com/topic-231006676_53717223 https://vk.com/topic-231006581_54814023 https://vk.com/topic-231005856_53717220 https://vk.com/topic-231075345_53355049 https://vk.com/topic-231006676_53717218 https://vk.com/topic-231006581_54814017 https://vk.com/topic-231005856_53717217 https://vk.com/topic-231075345_53355044 https://vk.com/topic-231006676_53717213 https://vk.com/topic-231006581_54814012 https://vk.com/topic-231005856_53717209 https://vk.com/topic-231006676_53717207 https://vk.com/topic-231006581_54814007 https://vk.com/topic-231007485_53354909 https://vk.com/topic-231002355_53354906 https://vk.com/topic-231006616_53717017 https://vk.com/topic-231007220_54461152 https://vk.com/topic-231007485_53354902 https://vk.com/topic-231002355_53354898 https://vk.com/topic-231006616_53717008 https://vk.com/topic-231007220_54461143 https://vk.com/topic-231007485_53354895 https://vk.com/topic-231002355_53354892 https://vk.com/topic-231006616_53717001 https://vk.com/topic-231007220_54461133 https://vk.com/topic-231007485_53354889 https://vk.com/topic-231002355_53354886 https://vk.com/topic-231006616_53716994 https://vk.com/topic-231007220_54461126 https://vk.com/topic-231007485_53354883 https://vk.com/topic-231002355_53354881 https://vk.com/topic-231006616_53716988 https://vk.com/topic-231007220_54461119 https://vk.com/topic-231007301_54813770 https://vk.com/topic-231075348_53886544 https://vk.com/topic-231006938_53886542 https://vk.com/topic-231006584_53431136 https://vk.com/topic-231007301_54813767 https://vk.com/topic-231075348_53886540 https://vk.com/topic-231006938_53886538 https://vk.com/topic-231006584_53431130 https://vk.com/topic-231007301_54813763 https://vk.com/topic-231075348_53886536 https://vk.com/topic-231006938_53886534 https://vk.com/topic-231006584_53431124 https://vk.com/topic-231007301_54813756 https://vk.com/topic-231075348_53886529 https://vk.com/topic-231006938_53886527 https://vk.com/topic-231006584_53431118 https://vk.com/topic-231007301_54813752 https://vk.com/topic-231075348_53886518 https://vk.com/topic-231006938_53886516 https://vk.com/topic-231006584_53431115 https://vk.com/topic-231007415_53354452 https://vk.com/topic-231075348_53886352 https://vk.com/topic-231006945_53354450 https://vk.com/topic-231002355_53354447 https://vk.com/topic-231007415_53354445 https://vk.com/topic-231075348_53886349 https://vk.com/topic-231006945_53354441 https://vk.com/topic-231002355_53354440 https://vk.com/topic-231007415_53354438 https://vk.com/topic-231075348_53886342 https://vk.com/topic-231006945_53354433 https://vk.com/topic-231002355_53354432 https://vk.com/topic-231007415_53354429 https://vk.com/topic-231075348_53886337 https://vk.com/topic-231006945_53354424 https://vk.com/topic-231002355_53354423 https://vk.com/topic-231007415_53354422 https://vk.com/topic-231075348_53886336 https://vk.com/topic-231006945_53354416 https://vk.com/topic-231002355_53354415 https://vk.com/topic-231008279_53957275 https://vk.com/topic-231007002_54159855 https://vk.com/topic-231007220_54460407 https://vk.com/topic-231003870_54460406 https://vk.com/topic-231008279_53957270 https://vk.com/topic-231007002_54159853 https://vk.com/topic-231007220_54460403 https://vk.com/topic-231003870_54460402 https://vk.com/topic-231008279_53957262 https://vk.com/topic-231007002_54159847 https://vk.com/topic-231007220_54460399 https://vk.com/topic-231003870_54460398 https://vk.com/topic-231008279_53957256 https://vk.com/topic-231007002_54159843 https://vk.com/topic-231007220_54460395 https://vk.com/topic-231003870_54460394 https://vk.com/topic-231008279_53957252 https://vk.com/topic-231007002_54159836 https://vk.com/topic-231007220_54460388 https://vk.com/topic-231003870_54460387 https://vk.com/topic-231003649_53957075 https://vk.com/topic-231003649_53957065 https://vk.com/topic-231006676_53716203 https://vk.com/topic-231008299_53957062 https://vk.com/topic-231007224_53430477 https://vk.com/topic-231003649_53957060 https://vk.com/topic-231006676_53716196 https://vk.com/topic-231008299_53957057 https://vk.com/topic-231007224_53430467 https://vk.com/topic-231003649_53957055 https://vk.com/topic-231006676_53716192 https://vk.com/topic-231008299_53957051 https://vk.com/topic-231007224_53430460 https://vk.com/topic-231003649_53957049 https://vk.com/topic-231006676_53716187 https://vk.com/topic-231008299_53957045 https://vk.com/topic-231007224_53430456 https://vk.com/topic-231006676_53716182 https://vk.com/topic-231008299_53957043 https://vk.com/topic-231007224_53430449 https://vk.com/topic-231006584_53430281 https://vk.com/topic-231007251_54813044 https://vk.com/topic-231006065_53353813 https://vk.com/topic-231008479_53956897 https://vk.com/topic-231006584_53430277 https://vk.com/topic-231007251_54813040 https://vk.com/topic-231006065_53353807 https://vk.com/topic-231008479_53956894 https://vk.com/topic-231006584_53430271 https://vk.com/topic-231007251_54813034 https://vk.com/topic-231006065_53353801 https://vk.com/topic-231008479_53956891 https://vk.com/topic-231006584_53430265 https://vk.com/topic-231007251_54813032 https://vk.com/topic-231006065_53353795 https://vk.com/topic-231008479_53956885 https://vk.com/topic-231006584_53430257 https://vk.com/topic-231007251_54813026 https://vk.com/topic-231006065_53353788 https://vk.com/topic-231008479_53956878 https://vk.com/topic-231006676_53715761 https://vk.com/topic-231007251_54812905 https://vk.com/topic-231003870_54459865 https://vk.com/topic-231008292_54159219 https://vk.com/topic-231006676_53715754 https://vk.com/topic-231007251_54812900 https://vk.com/topic-231003870_54459859 https://vk.com/topic-231008292_54159212 https://vk.com/topic-231006676_53715747 https://vk.com/topic-231007251_54812896 https://vk.com/topic-231003870_54459852 https://vk.com/topic-231008292_54159207 https://vk.com/topic-231006676_53715741 https://vk.com/topic-231007251_54812892 https://vk.com/topic-231003870_54459849 https://vk.com/topic-231008292_54159203 https://vk.com/topic-231006676_53715735 https://vk.com/topic-231007251_54812888 https://vk.com/topic-231003870_54459843 https://vk.com/topic-231008292_54159197 https://vk.com/topic-231008279_53956537 https://vk.com/topic-231005856_53715474 https://vk.com/topic-231008279_53956526 https://vk.com/topic-231005856_53715467 https://vk.com/topic-231006569_53956521 https://vk.com/topic-231003870_54459599 https://vk.com/topic-231008279_53956519 https://vk.com/topic-231005856_53715462 https://vk.com/topic-231006569_53956516 https://vk.com/topic-231003870_54459594 https://vk.com/topic-231008279_53956510 https://vk.com/topic-231005856_53715452 https://vk.com/topic-231006569_53956506 https://vk.com/topic-231003870_54459585 https://vk.com/topic-231008279_53956502 https://vk.com/topic-231005856_53715443 https://vk.com/topic-231006569_53956498 https://vk.com/topic-231003870_54459579 https://vk.com/topic-231006569_53956492 https://vk.com/topic-231003870_54459567 https://vk.com/topic-231006569_53956263 https://vk.com/topic-231007415_53353301 https://vk.com/topic-231006465_53353299 https://vk.com/topic-231006581_54812438 https://vk.com/topic-231006569_53956254 https://vk.com/topic-231007415_53353293 https://vk.com/topic-231006581_54812431 https://vk.com/topic-231006465_53353292 https://vk.com/topic-231006569_53956248 https://vk.com/topic-231007415_53353284 https://vk.com/topic-231006581_54812424 https://vk.com/topic-231006465_53353283 https://vk.com/topic-231006569_53956242 https://vk.com/topic-231007415_53353278 https://vk.com/topic-231006581_54812418 https://vk.com/topic-231006465_53353276 https://vk.com/topic-231006569_53956234 https://vk.com/topic-231007415_53353269 https://vk.com/topic-231006581_54812410 https://vk.com/topic-231006465_53353266 https://vk.com/topic-231002420_54458995 https://vk.com/topic-231008286_53714921 https://vk.com/topic-231007220_54458994 https://vk.com/topic-231006616_53714919 https://vk.com/topic-231002420_54458987 https://vk.com/topic-231008286_53714912 https://vk.com/topic-231007220_54458986 https://vk.com/topic-231006616_53714911 https://vk.com/topic-231002420_54458979 https://vk.com/topic-231008286_53714903 https://vk.com/topic-231007220_54458978 https://vk.com/topic-231006616_53714902 https://vk.com/topic-231002420_54458975 https://vk.com/topic-231008286_53714896 https://vk.com/topic-231007220_54458973 https://vk.com/topic-231006616_53714894 https://vk.com/topic-231002420_54458966 https://vk.com/topic-231008286_53714887 https://vk.com/topic-231007220_54458965 https://vk.com/topic-231006616_53714886 https://vk.com/topic-231007301_54811922 https://vk.com/topic-231007301_54811917 https://vk.com/topic-231006615_53352746 https://vk.com/topic-231007301_54811915 https://vk.com/topic-231006615_53352741 https://vk.com/topic-231007301_54811907 https://vk.com/topic-231006615_53352737 https://vk.com/topic-231007301_54811902 https://vk.com/topic-231006615_53352732 https://vk.com/topic-231007224_53429045 https://vk.com/topic-231006945_53352729 https://vk.com/topic-231006615_53352726 https://vk.com/topic-231007224_53429041 https://vk.com/topic-231006945_53352725 https://vk.com/topic-231007224_53429038 https://vk.com/topic-231006945_53352717 https://vk.com/topic-231007224_53429034 https://vk.com/topic-231006945_53352712 https://vk.com/topic-231007224_53429028 https://vk.com/topic-231006945_53352709 https://vk.com/topic-231007002_54157728 https://vk.com/topic-231005603_53700977以 STM32 内置 CAN 控制器为例,使用 HAL 库进行配置与通信:
c复制编辑CAN_FilterTypeDef filter;
filter.FilterIdHigh = 0x0000;
filter.FilterMaskIdHigh = 0x0000;
filter.FilterMode = CAN_FILTERMODE_IDMASK;
filter.FilterScale = CAN_FILTERSCALE_32BIT;
filter.FilterActivation = ENABLE;
HAL_CAN_ConfigFilter(&hcan, &filter);
c复制编辑CAN_TxHeaderTypeDef TxHeader;
uint8_t TxData[8] = {0x01, 0x02, 0x03, 0x04};
uint32_t TxMailbox;
TxHeader.StdId = 0x321;
TxHeader.IDE = CAN_ID_STD;
TxHeader.RTR = CAN_RTR_DATA;
TxHeader.DLC = 4;
HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox);
配置中断接收或轮询读取:
c复制编辑CAN_RxHeaderTypeDef RxHeader;
uint8_t RxData[8];
HAL_CAN_GetRxMessage(&hcan, CAN_RX_FIFO0, &RxHeader, RxData);
抓取报文可以帮助验证:
故障现象 | 可能原因 |
---|---|
无法通信 | 波特率不一致 / 无终端电阻 |
收不到数据 | ID 过滤配置错误 / 硬件故障 |
数据出错 | 干扰问题 / 接收器电平异常 |
进入 BUS-OFF | 多次发送失败 / 网络拥堵 |
协议 | 特性说明 |
---|---|
UART | 点对点、简单、低成本、无仲裁机制 |
SPI | 主从结构、速度快、连线复杂 |
I2C | 主从通信、易扩展、速率有限 |
CAN | 多主仲裁、抗干扰强、长距离稳定性高 |
CAN FD | 增强版 CAN,数据帧可达 64 字节 |
c复制编辑uint8_t speed_cmd[2] = {0x00, 0x64}; // 速度 100
TxHeader.StdId = 0x100;
TxHeader.DLC = 2;
HAL_CAN_AddTxMessage(&hcan, &TxHeader, speed_cmd, &TxMailbox);
c复制编辑if (RxHeader.StdId == 0x100) {
uint16_t speed = (RxData[0] << 8) | RxData[1];
Motor_SetSpeed(speed);
}
结果:实现了主节点向多个从节点广播速度控制命令,CAN 总线稳定运行,误码率 < 1%。
近年来,CAN FD(Flexible Data-rate) 作为 CAN 的升级版本,逐渐被更多工业系统接受:
同时,越来越多企业也采用 CAN → 网关 → 工业以太网 的架构,兼顾现场实时性与上位机互联能力。
https://vk.com/topic-231006065_53346425 https://vk.com/topic-231006445_53346424 https://vk.com/topic-231009400_54452256 https://vk.com/topic-231006065_53346417 https://vk.com/topic-231008292_54150514 https://vk.com/topic-231006065_53346412 https://vk.com/topic-231008292_54150505 https://vk.com/topic-231003842_54150141 https://vk.com/topic-231007415_53346069 https://vk.com/topic-231075348_53876147 https://vk.com/topic-231006676_53706710 https://vk.com/topic-231003842_54150132 https://vk.com/topic-231007415_53346062 https://vk.com/topic-231075348_53876142 https://vk.com/topic-231006676_53706699 https://vk.com/topic-231003842_54150122 https://vk.com/topic-231007415_53346058 https://vk.com/topic-231075348_53876131 https://vk.com/topic-231006676_53706692 https://vk.com/topic-231003842_54150113 https://vk.com/topic-231007415_53346050 https://vk.com/topic-231075348_53876122 https://vk.com/topic-231006676_53706684 https://vk.com/topic-231007415_53346041 https://vk.com/topic-231003842_54150104 https://vk.com/topic-231075348_53876113 https://vk.com/topic-231006676_53706678 https://vk.com/topic-231007415_53345885 https://vk.com/topic-231007220_54451818 https://vk.com/topic-231003842_54149957 https://vk.com/topic-231006945_53345883 https://vk.com/topic-231007415_53345879 https://vk.com/topic-231007220_54451816 https://vk.com/topic-231003842_54149954 https://vk.com/topic-231006945_53345878 https://vk.com/topic-231007415_53345876 https://vk.com/topic-231007220_54451814 https://vk.com/topic-231003842_54149951 https://vk.com/topic-231006945_53345874 https://vk.com/topic-231007415_53345872 https://vk.com/topic-231007220_54451813 https://vk.com/topic-231003842_54149947 https://vk.com/topic-231006945_53345869 https://vk.com/topic-231007415_53345868 https://vk.com/topic-231007220_54451811 https://vk.com/topic-231003842_54149946 https://vk.com/topic-231006945_53345865 https://vk.com/topic-231006584_53420865 https://vk.com/topic-231006584_53420847 https://vk.com/topic-231006445_53345641 https://vk.com/topic-231007002_54149703 https://vk.com/topic-231008286_53706228 https://vk.com/topic-231006584_53420833 https://vk.com/topic-231006445_53345634 https://vk.com/topic-231007002_54149693 https://vk.com/topic-231008286_53706216 https://vk.com/topic-231006584_53420829 https://vk.com/topic-231006445_53345629 https://vk.com/topic-231007002_54149688 https://vk.com/topic-231008286_53706210 https://vk.com/topic-231006584_53420825 https://vk.com/topic-231006445_53345626 https://vk.com/topic-231007002_54149684 https://vk.com/topic-231008286_53706206 https://vk.com/topic-231006445_53345622 https://vk.com/topic-231007002_54149675 https://vk.com/topic-231008286_53706200 https://vk.com/topic-231006938_53875520 https://vk.com/topic-231006938_53875519 https://vk.com/topic-231006938_53875515 https://vk.com/topic-231006938_53875513 https://vk.com/topic-231006938_53875512 https://vk.com/topic-231003870_54451503 https://vk.com/topic-231003870_54451500 https://vk.com/topic-231007415_53345472 https://vk.com/topic-231003870_54451495 https://vk.com/topic-231006445_53345471 https://vk.com/topic-231007415_53345465 https://vk.com/topic-231003870_54451491 https://vk.com/topic-231006445_53345464 https://vk.com/topic-231007415_53345462 https://vk.com/topic-231006445_53345458 https://vk.com/topic-231003870_54451487 https://vk.com/topic-231007415_53345453 https://vk.com/topic-231006445_53345452 https://vk.com/topic-231007415_53345450 https://vk.com/topic-231006445_53345445 https://vk.com/topic-231006615_53345239 https://vk.com/topic-231006569_53947370 https://vk.com/topic-231008504_53420505 https://vk.com/topic-231007251_54804806 https://vk.com/topic-231006615_53345232 https://vk.com/topic-231006569_53947367 https://vk.com/topic-231008504_53420500 https://vk.com/topic-231007251_54804804 https://vk.com/topic-231006615_53345231 https://vk.com/topic-231006569_53947365 https://vk.com/topic-231008504_53420494 https://vk.com/topic-231007251_54804798 https://vk.com/topic-231006615_53345226 https://vk.com/topic-231006569_53947360 https://vk.com/topic-231008504_53420490 https://vk.com/topic-231007251_54804791 https://vk.com/topic-231006615_53345218 https://vk.com/topic-231006569_53947353 https://vk.com/topic-231008504_53420487 https://vk.com/topic-231007251_54804781 https://vk.com/topic-231006465_53345117 https://vk.com/topic-231006465_53345114 https://vk.com/topic-231006039_53947221 https://vk.com/topic-231003648_53875217 https://vk.com/topic-231006465_53345111 https://vk.com/topic-231006039_53947206 https://vk.com/topic-231003648_53875215 https://vk.com/topic-231006465_53345104 https://vk.com/topic-231006039_53947202 https://vk.com/topic-231003648_53875212 https://vk.com/topic-231005827_54420418 https://vk.com/topic-231006039_53947199 https://vk.com/topic-231003648_53875207 https://vk.com/topic-231005827_54420415 https://vk.com/topic-231006039_53947192 https://vk.com/topic-231003648_53875204 https://vk.com/topic-231005827_54420410 https://vk.com/topic-231005827_54420402 https://vk.com/topic-231005827_54420393 https://vk.com/topic-231006676_53705615 https://vk.com/topic-231006615_53344989 https://vk.com/topic-231006676_53705612 https://vk.com/topic-231006615_53344984 https://vk.com/topic-231005603_53692882 https://vk.com/topic-231008279_53946986 https://vk.com/topic-231006676_53705606 https://vk.com/topic-231006615_53344983 https://vk.com/topic-231005603_53692878 https://vk.com/topic-231008279_53946981 https://vk.com/topic-231006676_53705604 https://vk.com/topic-231006615_53344979 https://vk.com/topic-231005603_53692876 https://vk.com/topic-231008279_53946979 https://vk.com/topic-231006676_53705603 https://vk.com/topic-231006615_53344976 https://vk.com/topic-231005603_53692874 https://vk.com/topic-231008279_53946976 https://vk.com/topic-231005603_53692868 https://vk.com/topic-231008279_53946973CAN 接口作为一种稳健的现场通信方案,具备以下优势:
对于嵌入式开发者而言,掌握 CAN 接口开发不仅是进入工业控制、汽车电子的关键一步,更是在工程项目中实现模块化、网络化通信的基石。
文章评论(0条评论)
登录后参与讨论