当前位置: 首页 > article >正文

STM32——CAN总线

STM32——CAN总线


1. CAN总线基础概念

1.1 CAN总线简介

控制器局域网(Controller Area Network, CAN)是由Bosch公司开发的串行通信协议,专为汽车电子和工业控制设计,具有以下核心特性:

  • 多主控制架构:所有节点均可主动发送数据
  • 差分信号传输:CAN_H与CAN_L双绞线抗干扰
  • 非破坏性仲裁:基于ID优先级的冲突解决机制
  • 高可靠性:CRC校验、错误帧检测等安全机制

图表

CAN_H/CAN_L
CAN_H/CAN_L
CAN_H/CAN_L
节点1
CAN总线
节点2
节点3
终端电阻 120Ω

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 功能框图

CAN核心
发送邮箱
接收FIFO
过滤器组
控制逻辑
CAN TX
CAN RX
标识符匹配
波特率控制

2.2 关键功能单元

  1. 发送邮箱:3个独立邮箱(F1/F4系列)
    • 优先级管理机制
    • 自动重传功能
  2. 接收FIFO:2个FIFO(FIFO0/FIFO1)
    • 每个FIFO深度3个报文
    • 可配置溢出处理
  3. 过滤器组:最多28个(F4系列)
    • 工作模式:掩码模式/列表模式
    • 尺度选择:16位/32位

3. CAN通信协议详解

3.1 数据帧结构

┌───┬───────┬──────┬───┬───────┬──────┬──────┬───┬───┐
│SOF│Arbitr.│Control│IDE│Data  │ CRC  │ ACK  │EOF│IFS│
│111/29610-641627  |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 基础配置流程

  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)

参数说明
Prescaler6分频系数
Time Quanta12总时间量子数
BS18 TQ传播时间段
BS23 TQ相位缓冲段2
SJW1 TQ同步跳转宽度
Sample Point75%(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 典型问题排查

  1. 无法通信
    • 检查终端电阻(总线两端各120Ω)
    • 验证波特率配置一致性
    • 测量CAN_H-CAN_L差分电压(2V左右)
  2. 数据丢失
    • 增加接收FIFO深度
    • 优化过滤器设置减少无关报文
    • 提升中断优先级
  3. 总线错误
    • 使用HAL_CAN_GetError()获取错误码
    • 检查物理线路是否受干扰
    • 降低波特率测试稳定性

7. 应用案例

7.1 汽车电子网络

┌──────────────┐       ┌──────────────┐
│ 发动机控制器 │◄─────►│ 车身控制模块 │
├──────────────┤       ├──────────────┤
│    CAN总线   │◄──┐ ┌─►│  仪表盘显示  │
└──────▲───────┘  │ │  └──────────────┘│          ▼ ▼
┌──────┴───────┐  ┌──────────────┐
│  制动系统    │  │  网关控制器  │
└──────────────┘  └──────────────┘

7.2 工业控制系统

CAN
CAN
CAN
STM32-PLC
电机驱动器
IO模块
传感器集线器
伺服电机
限位开关
温度传感器

最佳实践提示:在工业环境中,建议使用带隔离的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总线简介 控制器局域网&#xff08;Controller Area Network, CAN&#xff09;是由Bosch公司开发的串行通信协议&#xff0c;专为汽车电子和工业控制设计&#xff0c;具有以下核心特性&#xff1a; 多主控制架构&#xff1a;所有…...

嵌入式面试高频!!!C语言(四)(嵌入式八股文,嵌入式面经)

更多嵌入式面试文章见下面连接&#xff0c;会不断更新哦&#xff01;&#xff01;关注一下谢谢&#xff01;&#xff01;&#xff01;&#xff01; ​​​​​​​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 搜索赚取积分&#xff0c;积分可以兑换礼品卡、游戏等。每天的搜索任务不多&#xff0c;我们可以用脚本自动完成&#xff0c;提高效率&#xff0c;解放双手。 本文将手把手教你如何部署一个自动刷积分脚本&#xff0c;并解释其背…...

html表格转换为markdown

文章目录 工具功能亮点1.核心实现解析1. 剪贴板交互2. HTML检测与提取3. 转换规则设计 2. 完整代码 在日常工作中&#xff0c;我们经常遇到需要将网页表格快速转换为Markdown格式的场景。无论是文档编写、知识整理还是数据迁移&#xff0c;手动转换既耗时又容易出错。本文将介绍…...

VsCode 安装 Cline 插件并使用免费模型(例如 DeepSeek)

当前时间为 25/6/3&#xff0c;Cline 版本为 3.17.8 点击侧边栏的“扩展”图标 在搜索框中输入“Cline” 找到 Cline 插件&#xff0c;然后点击“安装” 安装完成后&#xff0c;Cline 图标会出现在 VS Code 的侧边栏中 点击 Use your own API key API Provider 选择 OpenRouter…...

短视频矩阵系统源码新发布技术方案有那几种?

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

React 第五十二节 Router中 useResolvedPath使用详解和注意事项示例

前言 useResolvedPath 是 React Router v6 提供的一个实用钩子&#xff0c;用于解析给定路径为完整路径对象。 它根据当前路由上下文解析相对路径&#xff0c;生成包含 pathname、search 和 hash 的完整路径对象。 一、useResolvedPath 核心用途 路径解析&#xff1a;将相对…...

【PmHub面试篇】性能监控与分布式追踪利器Skywalking面试专题分析

你好&#xff0c;欢迎来到本次关于PmHub整合性能监控与分布式追踪利器Skywalking的面试系列分享。在这篇文章中&#xff0c;我们将深入探讨这一技术领域的相关面试题预测。若想对相关内容有更透彻的理解&#xff0c;强烈推荐参考之前发布的博文&#xff1a;【PmHub后端篇】Skyw…...

Cursor快速梳理ipynb文件Prompt

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

天机学堂-分页查询

需求 分页查询我的课表 返回&#xff1a; 总条数、总页数、当前页的课表信息的集合 返回的VO&#xff08;已经封装成统一的LearningLessonsVO&#xff09; 定义Controller RestController RequestMapping("/lessons") RequiredArgsConstructor public class Lear…...

业态即战场:零售平台的生意模型与系统设计解构

目录 一、当我们在电商买菜、点外卖时,其实是零售业态在进化 (一)从“商场选货”到“算法推货”:零售的时代已经不同 (二)“控货”和“卖场”——零售的两种基本商业模式 二、四种经典零售业态解析:控货 vs 卖场,地面 vs 线上 (一)地面控货零售:直营模式的黄金…...

微算法科技(NASDAQ:MLGO)基于信任的集成共识和灰狼优化(GWO)算法,搭建高信任水平的区块链网络

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

全新Xsens Animate版本是迄今为止最大的软件升级,提供更清晰的数据、快捷的工作流程以及从录制开始就更直观的体验

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

大语言模型评测体系全解析(下篇):工具链、学术前沿与实战策略

文章目录 一、评测工具链&#xff1a;从手工测试到自动化工程的效率革命&#xff08;一&#xff09;OpenCompass&#xff1a;开源评测框架的生态构建1. 技术架构&#xff1a;三层架构实现评测自动化2. 开发者赋能&#xff1a;从入门到进阶的工具矩阵 &#xff08;二&#xff09…...

python打卡day46@浙大疏锦行

知识点回顾&#xff1a; 不同CNN层的特征图&#xff1a;不同通道的特征图什么是注意力&#xff1a;注意力家族&#xff0c;类似于动物园&#xff0c;都是不同的模块&#xff0c;好不好试了才知道。通道注意力&#xff1a;模型的定义和插入的位置通道注意力后的特征图和热力图 内…...

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 提示“发现此工作表中有一处或多处公式引用错误”通常表示公式中存在无效引用。以下是系统化的检查步骤&#xff0c;帮助你定位和修复问题&#xff1a; 1. 检查单元格引用&#xff1a; 无效单元格引用&#xff1a;检查公式中的单元格地址&#xff08;如 A1、B10&…...

NVIDIA DRIVE AGX平台:引领智能驾驶安全新时代

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

推荐12个wordpress企业网站模板

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

沙市区举办资本市场赋能培训会 点赋科技分享智能消费新实践

荆州市沙市区&#xff0c;2025年6月5日—— 在沙市区政府主办的“发挥区域性股权市场功能&#xff0c;助力企业拥抱资本市场”专题培训会上&#xff0c;区委副书记、区长郭熙胜强调要充分发挥资本市场服务实体经济功能&#xff0c;推动本土创新企业高质量发展。区内重点企业点赋…...

Docker 容器化基础:镜像、容器与仓库的本质解析

Docker 概念与容器化技术 Docker 是一种容器化平台&#xff0c;能够将应用程序及其依赖项打包成一个容器&#xff0c;确保在任何环境中都能一致运行。容器化技术通过操作系统级别的虚拟化&#xff0c;为应用程序提供了一个独立的运行环境。 容器化技术的核心优势 一致性&…...

九.C++ 对引用的学习

一.基本概念 引用即内存的别名 int a 10; int& b a; 引用本身不占用内存&#xff0c;并非实体&#xff0c;对引用的所有操作都是在对目标内存进行操作 引用必须初始化&#xff0c;且不能更换对象 int c 5; b c; // 仅仅是在对引用的目标内存进行赋值 #include <ios…...

探秘鸿蒙 HarmonyOS NEXT:实战用 CodeGenie 构建鸿蒙应用页面

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

art-pi2 上手记录(二)

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

数据库SQLite基础

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

1.3 古典概型和几何概型

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

html-pre标签

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

【WPF】WPF 项目实战:用ObservableCollection构建一个可增删、排序的管理界面(含源码)

&#x1f4a1;WPF 项目实战&#xff1a;构建一个可增删、排序的光源类型管理界面&#xff08;含源码&#xff09; 在实际的图像处理项目中&#xff0c;我们经常需要对“光源类型”进行筛选或管理。今天我们来一步步构建一个实用的 WPF 界面&#xff0c;实现以下功能&#xff1…...