文章总结: 本文详细介绍了CAN总线的基本概念、物理层结构、STM32CAN控制器架构、通信协议、配置步骤、HAL库编程实战、调试技巧与软件以及应用案例,为读者提供了全面了解CAN总线的技术资料。 综合评分: 80 文章分类: 嵌入式系统,物联网安全,数据安全,网络安全,其他
CAN总线详解
谈思实验室
2026年9月28日 18:17 上海
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
点击上方蓝字谈思实验室
获取更多汽车网络安全资讯
01
CAN总线基础概念
1.1 CAN总线简介
控制器局域网(Controller Area Network, CAN)是由Bosch公司开发的串行通信协议,专为汽车电子和工业控制设计,具有以下核心特性:
- 多主控制架构:所有节点均可主动发送数据
- 差分信号传输:CAN_H与CAN_L双绞线抗干扰
- 非破坏性仲裁:基于ID优先级的冲突解决机制
- 高可靠性:CRC校验、错误帧检测等安全机制
1.2 CAN物理层结构
物理连接示意图:
| |
| --- |
| STM32 CAN收发器 CAN总线|------| |------| |--------| | | TX ----| TXD | | CAN_H | | CAN | | |--------| | | 控制 | RX ----| RXD | | CAN_L | | 器 | |------| |--------| |------| ↑ VCC(5V) |
#
02
STM32 CAN控制器架构
关键效果单元
1、发送邮箱:3个独立邮箱(F1/F4系列)
- 优先级管理机制
- 自动重传特性
2、接收FIFO:2个FIFO(FIFO0/FIFO1)
- 每个FIFO深度3个报文
- 可配置溢出处理
3、过滤器组:最多28个(F4系列)
- 工作模式:掩码模式/列表模式
- 尺度选择:16位/32位
03
CAN通信协议详解
3.1 数据帧结构
| |
| --- |
| ┌───┬───────┬──────┬───┬───────┬──────┬──────┬───┬───┐ │SOF│Arbitr.│Control│IDE│Data │ CRC │ ACK │EOF│IFS│ │1 │11/29 │6 │1 │0-64 │16 │2 │7 |3 |└───┴───────┴──────┴───┴───────┴──────┴──────┴───┴───┘ |
- SOF:帧起始(显性电平)
- Arbitration:ID+ RTR位(11位标准/29位扩展)
- Control:DLC(数据长度0-8字节)
- CRC:15位校验 + 1位界定符
- ACK:应答槽 + 应答界定符
3.2 波特率配置
计算公式:
| |
| --- |
| 波特率 =APB1时钟/ (Prescaler* (BS1 + BS2 + 1 ) ) |
位时间组成:
| |
| --- |
| ┌───┬──────────────┬──────────────┐ │SYNC│BS1(Prop) │ BS2(Ph2)│ ├───┼─────┬────┬───┼─────┬────┬───┤ │1│ TQ1│...│TQn│ TQ1│...│TQm│ └───┴─────┴────┴───┴─────┴────┴───┘ |
- SYNC_SEG:固定1个时间量子(TQ)
- BS1:传播时间段(1-16 TQ)
- BS2:相位缓冲段2(1-8 TQ)
04
STM32CubeMX配置步骤
4.1 基础配置流程
1、在Pinout视图启用CAN
2、配置参数:
- Mode:Normal/Loopback
- Bit Timings:设置Prescaler/BS1/BS2
3、过滤器配置:
- Filter Activate:Enable
- Scale:32-bit/16-bit
- Mode:Mask/List
4、NVIC设置:启用接收中断
4.2 推荐调整参数(500kbps)
05
HAL库编程实战
5.1 CAN初始化代码
| |
| --- |
| CAN_HandleTypeDef hcan;CAN_FilterTypeDef filter; voidCAN_Init( void ) { hcan.Instance= CAN1; hcan.Init.Prescaler= 6 ; hcan.Init.Mode =CAN_MODE_NORMAL; hcan.Init.SyncJumpWidth=CAN_SJW_1TQ; hcan.Init.TimeSeg1=CAN_BS1_8TQ; hcan.Init.TimeSeg2=CAN_BS2_3TQ; hcan.Init.TimeTriggeredMode=DISABLE; hcan.Init.AutoBusOff=DISABLE; hcan.Init.AutoWakeUp=DISABLE; hcan.Init.AutoRetransmission=ENABLE; hcan.Init.ReceiveFifoLocked=DISABLE; hcan.Init.TransmitFifoPriority=DISABLE; if (HAL_CAN_Init(&hcan) !=HAL_OK) { Error_Handler( ) ; } // 配备过滤器(接收所有消息)filter.FilterBank= 0 ;filter.FilterMode=CAN_FILTERMODE_IDMASK;filter.FilterScale=CAN_FILTERSCALE_32BIT;filter.FilterIdHigh= 0x0000 ;filter.FilterIdLow= 0x0000 ;filter.FilterMaskIdHigh= 0x0000 ;filter.FilterMaskIdLow= 0x0000 ;filter.FilterFIFOAssignment=CAN_FILTER_FIFO0;filter.FilterActivation=ENABLE; HAL_CAN_ConfigFilter(&hcan, &filter) ; HAL_CAN_Start(&hcan) ; HAL_CAN_ActivateNotification(&hcan,CAN_IT_RX_FIFO0_MSG_PENDING) ; } |
5.2 素材发送函数
| |
| --- |
| uint8_tCAN_Send(uint32_t id, uint8_t* data, uint8_t len) {CAN_TxHeaderTypeDef txHeader; uint32_ttxMailbox;txHeader.StdId = id; // 标准IDtxHeader.ExtId = 0 ; // 扩展ID(标准帧设为0)txHeader.IDE =CAN_ID_STD; // 使用标准帧txHeader.RTR =CAN_RTR_DATA; // 数据帧txHeader.DLC = len; // 数据长度txHeader.TransmitGlobalTime=DISABLE; if(HAL_CAN_AddTxMessage(&hcan, &txHeader, data, &txMailbox) !=HAL_OK) { return 0 ; // 发送失败 } // 等待发送完成 while(HAL_CAN_GetTxMailboxesFreeLevel(&hcan) != 3 ) ; return 1 ; } |
5.3 中断接收处理
| |
| --- |
| voidHAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef*hcan) {CAN_RxHeaderTypeDef rxHeader; uint8_trxData[8] ; if(HAL_CAN_GetRxMessage(hcan,CAN_RX_FIFO0, &rxHeader,rxData) ==HAL_OK) { uint32_t id =rxHeader.StdId; // 获取标准ID uint8_t len =rxHeader.DLC; // 素材长度 // 处理接收数据 (示例: 串口转发) printf("ID:0x%X Data:" , id) ; for( int i=0 ; i<len; i++ ) { printf("%02X " ,rxData[i] ) ; } printf("\n" ) ; } } |
#
06
调试技巧与软件
6.1 常见调试工具
6.2 典型问题排查
1、无法通信:
- 检查终端电阻(总线两端各120Ω)
- 验证波特率配置一致性
- 测量CAN_H-CAN_L差分电压(2V左右)
2、数据丢失:
- 增加接收FIFO深度
- 优化过滤器设置减少无关报文
- 提升中断优先级
3、总线错误:
- 使用HAL_CAN_GetError()获取错误码
- 否受干扰就是检查物理线路
- 降低波特率测试稳定性
07
应用案例
7.1 汽车电子网络
| |
| --- |
| ┌──────────────┐ ┌──────────────┐ │ 发动机控制器 │◄─────►│ 车身控制模块 │ ├──────────────┤ ├──────────────┤ │ CAN总线 │◄──┐ ┌─►│ 仪表盘显示 │ └──────▲───────┘ │ │ └──────────────┘ │ ▼ ▼ ┌──────┴───────┐ ┌──────────────┐ │ 制动框架 │ │ 网关控制器 │ └──────────────┘ └──────────────┘ |
7.2 工业控制系统
最佳实践提示:在工业环境中,建议使用带隔离的CAN收发器(如ISO1050)并增加TVS管保护电路,可显著提升系统抗干扰能力。
附录:CAN资源速查表
来源:
https://www.cnblogs.com/ljbguanli/p/18916660
end
谈思汽车媒体门户
精品活动推荐
AutoSec系列沙龙
专业社群
部分入群专家来自:
新势力车企:
特斯拉、理想、极氪、小米、零跑汽车、阿维塔汽车、智己汽车、小鹏、岚图汽车、蔚来汽车、吉祥汽车、赛力斯……
外资传统主流车企代表:
大众中国、大众酷翼、奥迪汽车、宝马、福特、戴姆勒-奔驰、通用、保时捷、沃尔沃、现代汽车、日产汽车、捷豹路虎、斯堪尼亚……
内资传统主流车企:
吉利汽车、上汽乘用车、长城汽车、上汽大众、长安汽车、北京汽车、东风汽车、广汽、比亚迪、一汽集团、一汽解放、东风商用、上汽商用……
全球领先一级供应商:
博世、大陆集团、联合汽车电子、安波福、采埃孚、科世达、舍弗勒、霍尼韦尔、大疆、日立、哈曼、华为、百度、联想、联发科、普瑞均胜、德赛西威、蜂巢转向、均联智行、武汉光庭、星纪魅族、中车集团、潍柴集团、地平线、紫光同芯、字节跳动、……
二级供应商(500+以上):
中科数测、ETAS、BlackDuck、NXP、上海软件中心、Deloitte、奇安信、为辰信安、云驰未来、信长城、泽鹿安全、纽创信安、复旦微电子、天融信、奇虎360、中汽中心、中国汽研、上海汽检、加特兰微电子、浙江大学……
人员占比
公司类型占比
文章
不要错过哦,这可能是汽车网络安全产业最大的专属社区!
关于涉嫌仿冒AutoSec会议品牌的律师声明
一文带你了解智能汽车车载网络通信安全架构
网络安全:TARA方法、工具与案例
汽车数据安全合规重点分析
浅析汽车芯片信息安全之安全启动
域集中式架构的汽车车载通信安全方案探究
系统安全架构之车辆网络安全架构
车联网中的隐私保护问题
智能网联汽车网络安全技术研究
AUTOSAR 信息安全框架和关键技术分析
AUTOSAR 信息安全机制有哪些?
信息安全的底层机制
汽车网络安全
Autosar硬件安全模块HSM的使用
首发!小米雷军两会上就汽车数据安全问题建言:关于构建完善汽车数据安全管理体系的建议
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:谈思实验室 《CAN总线详解》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论