STM32——CAN总线
STM32——CAN总线
1. CAN总线基础概念
1.1 CAN总线简介
控制器局域网(Controller Area Network, CAN)是由Bosch公司开发的串行通信协议,专为汽车电子和工业控制设计,具有以下核心特性:
- 多主控制架构:所有节点均可主动发送数据
- 差分信号传输:CAN_H与CAN_L双绞线抗干扰
- 非破坏性仲裁:基于ID优先级的冲突解决机制
- 高可靠性:CRC校验、错误帧检测等安全机制
图表
1.2 CAN物理层结构
组件 | 功能说明 | 典型参数 |
---|---|---|
CAN控制器 | 协议处理、帧过滤 | 集成在STM32内部 |
CAN收发器 | 电平转换(TTL↔差分) | TJA1050, SN65HVD |
双绞线 | 信号传输介质 | 特性阻抗120Ω |
终端电阻 | 消除信号反射 | 120Ω两端各1个 |
物理连接示意图:
STM32 CAN收发器 CAN总线
|------| |------| |--------|
| | TX ----| TXD | | CAN_H |
| CAN | | |--------| |
| 控制 | RX ----| RXD | | CAN_L |
| 器 | |------| |--------|
|------| ↑VCC(5V)
2. STM32 CAN控制器架构
2.1 功能框图
2.2 关键功能单元
- 发送邮箱:3个独立邮箱(F1/F4系列)
- 优先级管理机制
- 自动重传功能
- 接收FIFO:2个FIFO(FIFO0/FIFO1)
- 每个FIFO深度3个报文
- 可配置溢出处理
- 过滤器组:最多28个(F4系列)
- 工作模式:掩码模式/列表模式
- 尺度选择:16位/32位
3. 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)
4. STM32CubeMX配置步骤
4.1 基础配置流程
- 在Pinout视图启用CAN
- 配置参数:
- Mode:Normal/Loopback
- Bit Timings:设置Prescaler/BS1/BS2
- 过滤器配置:
- Filter Activate:Enable
- Scale:32-bit/16-bit
- Mode:Mask/List
- NVIC设置:启用接收中断
4.2 推荐配置参数(500kbps)
参数 | 值 | 说明 |
---|---|---|
Prescaler | 6 | 分频系数 |
Time Quanta | 12 | 总时间量子数 |
BS1 | 8 TQ | 传播时间段 |
BS2 | 3 TQ | 相位缓冲段2 |
SJW | 1 TQ | 同步跳转宽度 |
Sample Point | 75% | (1+BS1)/(1+BS1+BS2) |
5. HAL库编程实战
5.1 CAN初始化代码
CAN_HandleTypeDef hcan;
CAN_FilterTypeDef filter;void CAN_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_t CAN_Send(uint32_t id, uint8_t* data, uint8_t len)
{CAN_TxHeaderTypeDef txHeader;uint32_t txMailbox;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 中断接收处理
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{CAN_RxHeaderTypeDef rxHeader;uint8_t rxData[8];if(HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &rxHeader, rxData) == HAL_OK) {uint32_t id = rxHeader.StdId; // 获取标准IDuint8_t len = rxHeader.DLC; // 数据长度// 处理接收数据 (示例: 串口转发)printf("ID:0x%X Data:", id);for(int i=0; i<len; i++) {printf("%02X ", rxData[i]);}printf("\n");}
}
6. 调试技巧与工具
6.1 常见调试工具
工具类型 | 推荐型号 | 特点 |
---|---|---|
CAN分析仪 | PCAN-USB, ZLG USBCAN | 专业级报文分析 |
逻辑分析仪 | Saleae, DSLogic | 物理层信号观测 |
终端电阻 | 120Ω精密电阻 | 消除信号反射 |
6.2 典型问题排查
- 无法通信:
- 检查终端电阻(总线两端各120Ω)
- 验证波特率配置一致性
- 测量CAN_H-CAN_L差分电压(2V左右)
- 数据丢失:
- 增加接收FIFO深度
- 优化过滤器设置减少无关报文
- 提升中断优先级
- 总线错误:
- 使用
HAL_CAN_GetError()
获取错误码 - 检查物理线路是否受干扰
- 降低波特率测试稳定性
- 使用
7. 应用案例
7.1 汽车电子网络
┌──────────────┐ ┌──────────────┐
│ 发动机控制器 │◄─────►│ 车身控制模块 │
├──────────────┤ ├──────────────┤
│ CAN总线 │◄──┐ ┌─►│ 仪表盘显示 │
└──────▲───────┘ │ │ └──────────────┘│ ▼ ▼
┌──────┴───────┐ ┌──────────────┐
│ 制动系统 │ │ 网关控制器 │
└──────────────┘ └──────────────┘
7.2 工业控制系统
最佳实践提示:在工业环境中,建议使用带隔离的CAN收发器(如ISO1050)并增加TVS管保护电路,可显著提升系统抗干扰能力。
附录:CAN资源速查表
寄存器 | 功能描述 | 关键位域 |
---|---|---|
CAN_MCR | 主控制寄存器 | INRQ, SLEEP, TTCM |
CAN_MSR | 主状态寄存器 | INAK, SLAK, RX, TX |
CAN_TSR | 发送状态寄存器 | TME0/1/2, TXOK0/1/2 |
CAN_RF0R/RF1R | 接收FIFO寄存器 | FMP0/1, FULL0/1 |
CAN_FMR | 过滤器主寄存器 | FINIT, CAN2SB |
CAN_FA1R | 过滤器激活寄存器 | FACT0-27 |
相关文章:
STM32——CAN总线
STM32——CAN总线 1. CAN总线基础概念 1.1 CAN总线简介 控制器局域网(Controller Area Network, CAN)是由Bosch公司开发的串行通信协议,专为汽车电子和工业控制设计,具有以下核心特性: 多主控制架构:所有…...

嵌入式面试高频!!!C语言(四)(嵌入式八股文,嵌入式面经)
更多嵌入式面试文章见下面连接,会不断更新哦!!关注一下谢谢!!!! https://blog.csdn.net/qq_61574541/category_12976911.html?fromshareblogcolumn&sharetypeblogcolumn&…...
数据治理在制造业的实践案例
一、数据治理在制造业的重要性 随着工业4.0的到来,制造业正经历着前所未有的变革。数据治理作为制造业数字化转型的关键组成部分,对提升企业竞争力、优化生产流程、提高产品质量和客户满意度等方面起着至关重要的作用。在制造业中,数据治理不仅涉及到数据的收集、存…...
【强化学习】——03 Model-Free RL之基于价值的强化学习
【强化学习】——03 Model-Free RL之基于价值的强化学习 \quad\quad \quad\quad 动态规划算法是基于模型的算法,要求已知状态转移概率和奖励函数。但很多实际问题中环境 可能是未知的,这就需要不基于模型(Model-Free)的RL方法。 \quad\quad 其又分为: 基于价值(Valu…...

Edge(Bing)自动领积分脚本部署——基于python和Selenium(附源码)
微软的 Microsoft Rewards 计划可以通过 Bing 搜索赚取积分,积分可以兑换礼品卡、游戏等。每天的搜索任务不多,我们可以用脚本自动完成,提高效率,解放双手。 本文将手把手教你如何部署一个自动刷积分脚本,并解释其背…...
html表格转换为markdown
文章目录 工具功能亮点1.核心实现解析1. 剪贴板交互2. HTML检测与提取3. 转换规则设计 2. 完整代码 在日常工作中,我们经常遇到需要将网页表格快速转换为Markdown格式的场景。无论是文档编写、知识整理还是数据迁移,手动转换既耗时又容易出错。本文将介绍…...

VsCode 安装 Cline 插件并使用免费模型(例如 DeepSeek)
当前时间为 25/6/3,Cline 版本为 3.17.8 点击侧边栏的“扩展”图标 在搜索框中输入“Cline” 找到 Cline 插件,然后点击“安装” 安装完成后,Cline 图标会出现在 VS Code 的侧边栏中 点击 Use your own API key API Provider 选择 OpenRouter…...

短视频矩阵系统源码新发布技术方案有那几种?
短视频矩阵运营在平台政策频繁更迭的浪潮中,已成为内容分发的核心战场。行业领先者如筷子科技、云罗抖去推、超级编导等平台,其稳定高效的代发能力背后,离不开前沿技术方案的强力支撑。本文将深入剖析当前主流的六大短视频矩阵系统代发解决方…...

React 第五十二节 Router中 useResolvedPath使用详解和注意事项示例
前言 useResolvedPath 是 React Router v6 提供的一个实用钩子,用于解析给定路径为完整路径对象。 它根据当前路由上下文解析相对路径,生成包含 pathname、search 和 hash 的完整路径对象。 一、useResolvedPath 核心用途 路径解析:将相对…...
【PmHub面试篇】性能监控与分布式追踪利器Skywalking面试专题分析
你好,欢迎来到本次关于PmHub整合性能监控与分布式追踪利器Skywalking的面试系列分享。在这篇文章中,我们将深入探讨这一技术领域的相关面试题预测。若想对相关内容有更透彻的理解,强烈推荐参考之前发布的博文:【PmHub后端篇】Skyw…...

Cursor快速梳理ipynb文件Prompt
1. 整体鸟瞰 请在不运行代码的前提下,总结 <文件名.ipynb> 的主要目的、核心逻辑流程和输出结果。阅读整个项目目录,列出每个 .ipynb / .py 文件的角色,以及它们之间的数据依赖关系(输入→处理→输出)。2. 结构…...

天机学堂-分页查询
需求 分页查询我的课表 返回: 总条数、总页数、当前页的课表信息的集合 返回的VO(已经封装成统一的LearningLessonsVO) 定义Controller RestController RequestMapping("/lessons") RequiredArgsConstructor public class Lear…...
业态即战场:零售平台的生意模型与系统设计解构
目录 一、当我们在电商买菜、点外卖时,其实是零售业态在进化 (一)从“商场选货”到“算法推货”:零售的时代已经不同 (二)“控货”和“卖场”——零售的两种基本商业模式 二、四种经典零售业态解析:控货 vs 卖场,地面 vs 线上 (一)地面控货零售:直营模式的黄金…...

微算法科技(NASDAQ:MLGO)基于信任的集成共识和灰狼优化(GWO)算法,搭建高信任水平的区块链网络
随着数字化转型的加速,区块链技术作为去中心化、透明且不可篡改的数据存储与交换平台,正逐步渗透到金融、供应链管理、物联网等多个领域,探索基于信任的集成共识机制,并结合先进的优化算法来提升区块链网络的信任水平,…...

全新Xsens Animate版本是迄今为止最大的软件升级,提供更清晰的数据、快捷的工作流程以及从录制开始就更直观的体验
我们整合了专业人士喜爱的 Xsens 动捕功能,并使其更加完善。全新Xsens Animate版本是我们迄今为止最大的软件升级,旨在提供更清晰的数据、更快捷的工作流程以及从录制开始就更直观的体验。 从制作游戏动画到流媒体直播头像或构建实时电影内容࿰…...

大语言模型评测体系全解析(下篇):工具链、学术前沿与实战策略
文章目录 一、评测工具链:从手工测试到自动化工程的效率革命(一)OpenCompass:开源评测框架的生态构建1. 技术架构:三层架构实现评测自动化2. 开发者赋能:从入门到进阶的工具矩阵 (二)…...

python打卡day46@浙大疏锦行
知识点回顾: 不同CNN层的特征图:不同通道的特征图什么是注意力:注意力家族,类似于动物园,都是不同的模块,好不好试了才知道。通道注意力:模型的定义和插入的位置通道注意力后的特征图和热力图 内…...
C++.OpenGL (1/64) 创建窗口(Hello Window)
OpenGL 创建窗口(Hello Window) 步骤详解与代码实现 #mermaid-svg-436DlGvysFQogISc {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-436DlGvysFQogISc .error-icon{fill:#552222;}#mermaid-svg-436DlGvysFQogISc…...

Excel 发现此工作表中有一处或多处公式引用错误。请检查公式中的单元格引用、区域名称、已定义名称以及到其他工作簿的链接是否均正确无误。弹窗
Excel 提示“发现此工作表中有一处或多处公式引用错误”通常表示公式中存在无效引用。以下是系统化的检查步骤,帮助你定位和修复问题: 1. 检查单元格引用: 无效单元格引用:检查公式中的单元格地址(如 A1、B10&…...

NVIDIA DRIVE AGX平台:引领智能驾驶安全新时代
随着科技的不断进步,汽车行业正迎来前所未有的变革,智能驾驶技术成为全球产业竞相布局的焦点之一。然而,这场技术革命的背后,最关键且被广泛关注的是安全性问题。近日,我认真研读了NVIDIA发布的《自动驾驶安全报告》白…...

推荐12个wordpress企业网站模板
WordPress企业网站模板是一种专为企业网站设计的WordPress主题,旨在帮助企业创建专业、美观且易于管理的网站。这些模板通常具备响应式设计、SEO优化、多语言支持等功能,能够满足不同行业和企业的需求。 WordPress企业网站模板的适用场景 企业官网&…...

沙市区举办资本市场赋能培训会 点赋科技分享智能消费新实践
荆州市沙市区,2025年6月5日—— 在沙市区政府主办的“发挥区域性股权市场功能,助力企业拥抱资本市场”专题培训会上,区委副书记、区长郭熙胜强调要充分发挥资本市场服务实体经济功能,推动本土创新企业高质量发展。区内重点企业点赋…...
Docker 容器化基础:镜像、容器与仓库的本质解析
Docker 概念与容器化技术 Docker 是一种容器化平台,能够将应用程序及其依赖项打包成一个容器,确保在任何环境中都能一致运行。容器化技术通过操作系统级别的虚拟化,为应用程序提供了一个独立的运行环境。 容器化技术的核心优势 一致性&…...
九.C++ 对引用的学习
一.基本概念 引用即内存的别名 int a 10; int& b a; 引用本身不占用内存,并非实体,对引用的所有操作都是在对目标内存进行操作 引用必须初始化,且不能更换对象 int c 5; b c; // 仅仅是在对引用的目标内存进行赋值 #include <ios…...

探秘鸿蒙 HarmonyOS NEXT:实战用 CodeGenie 构建鸿蒙应用页面
在开发鸿蒙应用时,你是否也曾为一个页面的布局反复调整?是否还在为查 API、写模板代码而浪费大量时间?今天带大家实战体验一下鸿蒙官方的 AI 编程助手——CodeGenie(代码精灵) ,如何从 0 到 1 快速构建一个…...

art-pi2 上手记录(二)
功能比较庞杂,写得不好,抛砖引玉 预备知识 stm32 默认从主闪存0x08000000启动 art-pi2的psram 映射0x90000000 art-pi2的8线ospi flash 映射0x70000000 stm32h7比较灵活,通过修改选项字节,可以实现从 0x0000 0000 到 0x3FFF 0…...

数据库SQLite基础
SQLite的存储结构 --->B树 大型数据库 :Oracle 中型数据库 :Server是微软开发的数据库产品,主要支持windows平台 小型数据库 : MySQL是一个小型关系型数据库管理系统。开放源码 (嵌入式不需要存储太多数据) 一、SQLite基础 SQLite的源代码…...

1.3 古典概型和几何概型
文章目录 古典概型模型(等可能模型)几何概型 古典概型模型(等可能模型) 两个条件: 1) 有限个样本点 2) 等可能性 例题: 设有n个人,每个人都等可能地被分配到N个房间中的任一间(n≤N), 求下列事件的概率: (1)某指定的n间房…...

html-pre标签
我们都知道在常见标签里面的文字的格式是不会显示的,比如你打了多个空格,但却不会显示,而pre标签会显示。 主要特点: 保留空格和换行:在 <pre> 标签内,HTML 会保留所有的空格、换行符和制表符等格式…...

【WPF】WPF 项目实战:用ObservableCollection构建一个可增删、排序的管理界面(含源码)
💡WPF 项目实战:构建一个可增删、排序的光源类型管理界面(含源码) 在实际的图像处理项目中,我们经常需要对“光源类型”进行筛选或管理。今天我们来一步步构建一个实用的 WPF 界面,实现以下功能࿱…...