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

第 4 章:网络与总线——CAN / Ethernet / USB-OTG


本章目标:

  • 深入理解三种关键通信总线(CAN、Ethernet、USB-OTG)的协议架构、硬件接口与软件驱动

  • 掌握 STM32(或同类 MCU)中各总线的寄存器配置、中断/DMA 驱动框架

  • 通过实战案例,实现基于 CAN 总线的节点通信、基于 Ethernet 的 TCP/IP 通信,以及基于 USB-OTG 的虚拟串口与大容量存储访问

章节结构
4.1 CAN 总线
 4.1.1 CAN 协议概览与帧结构
 4.1.2 硬件电气特性与物理连接
 4.1.3 STM32 CAN 控制器寄存器解析
 4.1.4 CAN 驱动框架(中断与报文过滤)
 4.1.5 实战案例:STM32 与多个节点的可靠通信
4.2 Ethernet
 4.2.1 Ethernet 协议栈概览(MAC+PHY, TCP/IP)
 4.2.2 硬件接口与 MII/RMII/PSE 报文时序
 4.2.3 STM32 Ethernet MAC 寄存器解析
 4.2.4 LwIP 驱动集成与零拷贝 DMA
 4.2.5 实战案例:Web 服务器与 MQTT 客户端示例
4.3 USB-OTG
 4.3.1 USB 枚举与端点模型(Host/Device/OTG)
 4.3.2 硬件信号:DP/DM、ID 引脚、VBUS 检测
 4.3.3 STM32 USB-OTG 控制器寄存器解析
 4.3.4 USB-CDC(虚拟串口)与 MSC(大容量存储)实现
 4.3.5 实战案例:STM32 同时支持 CDC 与 MSC Composite 设备
4.4 本章小结与选型建议


4.1 CAN 总线

4.1.1 CAN 协议概览与帧结构

Controller Area Network (CAN) 是一种多主、基于广播的实时通信总线,广泛用于汽车电子、工业控制与分布式系统。CAN 的关键特点包括:

  • 多主访问:所有节点并行收发,使用位仲裁确保无冲突

  • 帧结构:支持标准帧(11 位标识符)与扩展帧(29 位标识符)、数据字段长度 0–8 字节

—— CAN 数据报文结构(标准帧) ——
┌────────┬───────┬───────┬───────┬───────┐
│ 标识符(11b) │ RTR(1) │ IDE(1) │ DLC(4) │ Data(0–8×8b) │ CRC(15) │
└────────┴───────┴───────┴───────┴───────┘
  • 标识符 (ID):决定优先级,ID 值越小优先权越高

  • RTR:远程帧请求位

  • IDE:扩展帧指示位

  • DLC:数据长度码

  • CRC:循环冗余校验

相关文章:

第 4 章:网络与总线——CAN / Ethernet / USB-OTG

本章目标: 深入理解三种关键通信总线(CAN、Ethernet、USB-OTG)的协议架构、硬件接口与软件驱动 掌握 STM32(或同类 MCU)中各总线的寄存器配置、中断/DMA 驱动框架 通过实战案例,实现基于 CAN 总线的节点通信、基于 Ethernet 的 TCP/IP 通信,以及基于 USB-OTG 的虚拟串口…...

【python进阶知识】Day 31 文件的规范拆分和写法

知识点 规范的文件命名规范的文件夹管理机器学习项目的拆分编码格式和类型注解 机器学习流程 - 数据加载:从文件、数据库、API 等获取原始数据。 - 命名参考:load_data.py 、data_loader.py - 数据探索与可视化:了解数据特性,初期…...

leetcode 162. Find Peak Element

题目描述 如果nums[i-1]<nums[i]并且nums[i]>nums[i1]&#xff0c;那么nums[i]就是峰值。除此情况之外&#xff0c;nums[i-1]和nums[i1]至少有一个大于nums[i]&#xff0c;因为题目已经保证相邻的元素不相等。坚持向上坡方向走一定能达到一个峰值&#xff0c;如果往两边走…...

2025系统架构师---案例题(押题)

1. 微服务相关的概念: 微服务是一种架构风格,它将单体应用划分为一组小服务,服务之间相互协作,实现业务功能每个服务运行在独立的进程中,服务间采用轻量级的通信机制协作(通常是HTTP/JSON),每个服务围绕业务能力进行构建,并且能够通过自动化机制独立的部署。 微服务有…...

t检验详解:原理、类型与应用指南

t检验详解&#xff1a;原理、类型与应用指南 t检验&#xff08;t-test&#xff09;是一种用于比较两组数据均值是否存在显著差异的统计方法&#xff0c;适用于数据近似正态分布且满足方差齐性的场景。以下从核心原理、检验类型、实施步骤到实际应用进行系统解析。 一、t检验的…...

使用 OpenCV 实现万花筒效果

万花筒效果&#xff08;Kaleidoscope Effect&#xff09;是一种图像处理效果&#xff0c;通过对图像进行对称旋转或镜像处理&#xff0c;产生具有多重反射和对称的艺术效果。它常用于视频编辑、视觉艺术、游戏设计等领域&#xff0c;为图像添加富有创意和视觉冲击力的效果。 在…...

Rocketmq broker 是主从架构还是集群架构,可以故障自动转移吗

RocketMQ Broker的架构与故障转移机制 RocketMQ的Broker架构同时采用了主从架构和集群架构&#xff0c;并且支持故障自动转移。下面详细说明&#xff1a; 一、架构类型 1. 集群架构 RocketMQ天然支持分布式集群部署 一个RocketMQ集群包含多个Broker组(每组有主从) 不同Bro…...

MySQL中添加一个具有创建数据库权限的用户

要在MySQL中添加一个具有创建数据库权限的用户&#xff0c;可按以下步骤操作&#xff1a; 1. 登录MySQL 使用拥有足够权限&#xff08;一般是root用户 &#xff09;的账号登录到MySQL数据库。在命令行输入&#xff1a; mysql -u root -p然后输入对应的密码&#xff0c;即可进…...

Go语言使用通义灵码辅助开发 - AI编程助手提升效率

一、引言 Go 语言以其高效性能和简洁语法&#xff0c;成为构建微服务、分布式系统及高性能后端的首选。对于有其他语言编程经验的开发者和初学者&#xff0c;入门 Go 语言时&#xff0c;如何快速开发第一个程序是关键。传统方式如慢慢摸索、向老师请教或查找资料&#xff0c;效…...

演示:【WPF-WinCC3D】 3D工业组态监控平台源代码

一、目的&#xff1a;分享一个应用WPF 3D开发的3D工业组态监控平台源代码 二、功能介绍 WPF-WinCC3D是基于 WPF 3D研发的工业组态软件&#xff0c;提供将近200个预置工业模型&#xff08;机械手臂、科幻零部件、熔炼生产线、机加生产线、管道等&#xff09;&#xff0c;支持组态…...

Oracle资源管理器

14.8资源管理器 14.8.1资源管理器的功能和控制种类 传统意义上&#xff0c;系统的资源分配是由 OS 来完成的&#xff0c;但是对于数据库资源&#xff0c;OS 分配资源会带来一些问题。以 Linux 为例&#xff0c;最为突出的一个问题是&#xff1a;Linux 的资源调度是基于进程的&…...

下载Ubuntu 64 位

学习目标&#xff1a; 下载 学习内容&#xff1a; 学习时间&#xff1a; 学习时间为学习时间 学习时间筋肉人为学习时间future 内容为笔记【有时比较抽象&#xff0c;有时比较过于详细&#xff0c;请宽恕。作者可能写的是仅个人笔记&#xff0c;筋肉人future】 学习产出&…...

ubuntu14.04/16.06 安装vscode(实测可以用)

地址&#xff1a;https://code.visualstudio.com/updates/v1_38 选择deb 这个版本还支持ubuntu14.04和16.06 sudo dpkg -i code_1.38.1-1568209190_amd64.deb sudo apt-get install -f安装成功&#xff0c;正常使用...

Linux命令大全

前言&#xff1a;工作中或多或少都会用到Linux服务器&#xff0c;我为大家分享一下常用命令 一丶文件与目录操作 命令作用示例ls列出目录内容ls -l&#xff08;详细列表&#xff09;cd切换目录cd /homepwd显示当前目录路径pwdmkdir创建目录mkdir -p dir1/dir2&#xff08;递归…...

spark的缓存提升本质以及分区数量和task执行时间的先后

文章目录 示例代码缓存效果分析第1次 user.count第2次 user.count——这里解释了spark缓存提升的本质原因关于分区数量和task数量以及task的执行流程有多少个分区就有多少线程task并发执行不同分区数量对计算效率的提升 示例代码 import org.apache.spark.storage.StorageLeve…...

SQL次日留存率计算精讲:自连接与多字段去重的深度应用

一、问题拆解&#xff1a;理解次日留存率的计算逻辑 1.1 业务需求转换 题目&#xff1a;运营希望查看用户在某天刷题后第二天还会再来刷题的留存率。 关键分析点&#xff1a; 留存率 &#xff08;第一天刷题且第二天再次刷题的用户数&#xff09; / 第一天刷题的总用户数需…...

PostgreSQL初体验

目录 一&#xff1a;PostgreSQL 1.简介 3.优势 4.架构 5.应用场景 6.结论 二&#xff1a;安装PostgreSQL 1.编译安装 三&#xff1a;PostgreSQL架构 1.PG的逻辑结构 2.PG的物理结构 前言 在数据驱动的时代&#xff0c;掌握 PostgreSQL 这一全球顶尖的开源关系型数据…...

Vue 3.0 Transition 组件使用详解

Vue 3.0 的 Transition 组件提供了一种简单的方式来为元素或组件的进入/离开添加动画效果。下面是使用<script setup>语法糖的实现方式。 1. 基本用法 使用场景&#xff1a;当需要为元素的显示/隐藏添加简单的淡入淡出效果时&#xff0c;这是最基础的过渡实现方式。 &…...

深入浅出IIC协议 - 从总线原理到FPGA实战开发 -- 第三篇:Verilog实现I2C Master核

第三篇&#xff1a;Verilog实现I2C Master核 副标题 &#xff1a;从零构建工业级I2C控制器——代码逐行解析与仿真实战 1. 架构设计 1.1 模块分层设计 三层架构 &#xff1a; 层级功能描述关键信号PHY层物理信号驱动与采样sda_oe, scl_oe控制层协议状态机与数据流控制state…...

通义灵码助力JavaScript开发:快速获取API与智能编码技巧

一、引言 JavaScript 拥有丰富的 API 生态&#xff0c;从浏览器的 Web API 到 Node.js 的环境生态&#xff0c;为开发者提供了强大的工具和库。然而&#xff0c;面对如此庞大的生态系统&#xff0c;开发者常常需要花费大量时间翻阅文档来查找和学习如何使用这些 API。通义灵码…...

ubuntu kubeasz 部署高可用k8s 集群

ubuntu kubeasz 部署高可用k8s 集群 测试环境主机列表软件清单kubeasz 部署高可用 kubernetes配置源配置host文件安装 ansible 并进行 ssh 免密登录:下载 kubeasz 项⽬及组件部署集群部署各组件开始安装修改 config 配置文件增加 master 节点增加 kube_node 节点登录dashboard…...

如何看待镍钯金PCB在当代工业制造中的地位和应用?

随着电子科技的飞速发展&#xff0c;电路板作为电子设备的核心组成部分&#xff0c;其制造材料和工艺也在不断进步。镍钯金&#xff08;NiPdAu&#xff09;电路板因其独特的物理和化学性质&#xff0c;在众多领域得到了广泛应用。本文将探讨镍钯金电路板的主要应用领域&#xf…...

Datawhale PyPOTS时间序列5月第4次笔记

端到端学习&#xff1a;使用一个模型直接接受包含缺失值的数据。 brits_classification.py 完整代码如下&#xff1a; # brits_classification.pyfrom benchpots.datasets import preprocess_physionet2012 from pypots.classification import BRITS from pypots.nn.function…...

(05)数字化转型之生产制造:从通常的离散制造到柔性化生产的全景指南

当今制造业正经历着前所未有的数字化变革&#xff0c;从传统的离散制造到流程制造&#xff0c;再到新兴的项目制造和柔性制造&#xff0c;各种生产模式都在加速向智能化方向演进。本文将系统性地介绍制造业生产管理的完整体系&#xff0c;为企业数字化转型提供全面的方法论和实…...

JMeter 教程:JSON 断言的简单介绍

目录 JMeter 教程&#xff1a;JSON 断言的简单介绍【快速上手】 ✅ 什么是 JSON 断言&#xff1f; &#x1f6e0;️ 使用前提 &#x1f4c4; JSON 断言添加步骤 步骤一&#xff1a;添加 JSON Assertion &#x1f4cc; 示例说明 ✅ 常用 JSONPath 写法速查 ✅ 断言结果查…...

RedissonClient主要功能概述

以下是 RedissonClient 提供的主要功能和特性的详细用法说明&#xff0c;结合代码示例和实际应用场景&#xff1a; 1. 分布式集合与映射 Redisson 提供了多种线程安全的分布式集合和映射&#xff0c;适用于分布式环境下的数据存储和操作。 RMap&#xff08;分布式 Map&#x…...

USB学习【13】STM32+USB接收数据过程详解

目录 1.官方的描述2.HAL的流程把接收到的数据从PMA拷贝到用户自己定义的空间中 3.处理接收到的数据4.最后再次开启准备接收工作 1.官方的描述 2.HAL的流程 以上的官方说法我们暂时按下不表。 如果接收到数据&#xff0c;会激活中断进入到USB_LP_CAN1_RX0_IRQHandler&#xff0…...

更新2011-2025经济类联考 396-真题+解析 PDF

目录树&#xff1a; ├── 2011-2025经综-真题 │ ├── 2011年396经济联考综合能力真题 .pdf │ ├── 2012年396经济联考综合能力真题 .pdf │ ├── 2013年396经济联考综合能力真题 .pdf │ ├── 2014年396经济联考综合能力真题 .pdf │ ├── 2015年396经…...

string在c语言中代表什么(非常详细)

在 C 语言中&#xff0c;string 更多让人联想到的是 <string.h> 这个标准库。 <string.h> 库为我们提供了一系列用于操作字符串的函数接口&#xff0c;就像是一个功能强大的工具箱&#xff0c;让程序员能够方便地对字符串进行各种操作。 例如&#xff0c;当我们想…...

JIT即时编译器全面剖析:原理、实现与优化

引言 在现代软件开发领域&#xff0c;性能优化一直是开发者关注的核心问题之一。随着计算能力的提升和应用场景的多元化&#xff0c;如何提高程序运行效率成为技术发展的关键驱动力。即时编译器&#xff08;Just-In-Time Compiler&#xff0c;简称JIT&#xff09;作为一项革命性…...

电网中窃电分析:概念、算法与应用

一、引言 在现代电力系统中&#xff0c;窃电行为是一个严重影响电网经济运行和供电秩序的问题。窃电不仅导致供电企业的经济损失&#xff0c;破坏了电力市场的公平性&#xff0c;还可能对电网的安全稳定运行构成威胁&#xff0c;甚至引发安全事故。随着科技的不断进步&#xff…...

从零开始的嵌入式学习day24

标准IO 头文件需求&#xff1a; #include <stdio.h>1.fopen和fclose (1)fopen fopen的函数功能是打开一个文件。 首先看看fopen的函数声明&#xff1a; FILE *fopen(const char *path, const char *mode);第一个参数path是文件地址&#xff0c;传入的是不可变的字符…...

高级SQL技巧:窗口函数与复杂查询优化实战

高级SQL技巧&#xff1a;窗口函数与复杂查询优化实战 开篇&#xff1a;数据库开发中的挑战 在现代企业级应用中&#xff0c;数据库不仅是存储数据的核心组件&#xff0c;更是处理复杂业务逻辑的重要工具。然而&#xff0c;随着数据量和并发请求的不断增长&#xff0c;传统的S…...

C++修炼:map和set的使用

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C修炼之路》 欢迎点赞&#xff0c;关注&am…...

ABC 355

D. Intersecting Intervals 首先思考两个区间相交会有哪些情况&#xff1a;有两种左右端点包含&#xff0c;一种大区间包含小区间。 但是反过来思考&#xff0c;两个区间不相交只会有两种情况&#xff1a;Ri < Lj 和 Rj < Li。非常典型的逆向思考 对左右端点升序排序后&a…...

正则表达式进阶(三):递归模式与条件匹配的艺术

在正则表达式的高级应用中&#xff0c;递归模式和条件匹配是处理复杂嵌套结构和动态模式的利器。它们突破了传统正则表达式的线性匹配局限&#xff0c;能够应对嵌套括号、HTML标签、上下文依赖等复杂场景。本文将详细介绍递归模式&#xff08;(?>...)、 (?R) 等&#xff0…...

芯片分享之AD5542性能介绍

产品特征&#xff1a; AD5541/AD5542均为单通道、16位、串行输入、电压输出数模转换器(DAC)&#xff0c;采用2.7 V至5.5 V单电源供电。DAC输出范围为0 V至VREF DAC输出范围为0 V至VREF&#xff0c;保证单调性&#xff0c;提供1 LSB INL精度&#xff08;16位&#xff09;&…...

从零开始:Python 从0到1轻松入门

你是否曾好奇&#xff0c;那些能自动处理数据、搭建网站、甚至预测未来趋势的神奇程序是如何诞生的&#xff1f;答案或许就藏在 Python 这门简洁而强大的编程语言中&#xff01;Python以其“代码即可读性”的设计哲学&#xff0c;成为全球开发者的心头好——无论是初学者入门&a…...

Linux线程互斥与同步(上)(29)

文章目录 前言一、资源共享问题多线程并发访问临界区与临界资源“锁”概念引入 二、多线程抢票并发抢票引发问题 三、线程互斥互斥锁相关操作解决抢票问题互斥锁的原理多线程封装互斥锁的封装 总结 前言 马上要结束了&#xff01;&#xff01;&#xff01;   我们在学习 多线…...

深入解析 hping3网络探测与测试利器

一、什么是 hping3&#xff1f; 体量轻巧&#xff1a;安装包仅约 255 KB。协议多样&#xff1a;支持 TCP、UDP、ICMP、RAW IP 四种模式。灵活定制&#xff1a;可设置任意报文头、分片、Payload 长度&#xff1b;还支持伪造源地址、随机目标等高级操作。脚本化&#xff1a;集成…...

SPA模式下的es6如何加快宿主页的显示速度

SPA的模式下&#xff0c;宿主页是首先加载的页面&#xff0c;会需要一些主要的组件&#xff0c;如element-plus&#xff0c;easyui&#xff0c;devextreme&#xff0c;ant-design等&#xff0c;这些组件及其依赖组件&#xff0c;文件多&#xff0c;代码量大&#xff0c;可能导致…...

环境配置!

1.下载openEuler虚拟机和rocky虚拟机 下载好后&#xff0c;ping一下看一下手动配置的网络ok不&#xff0c;再把复杂密码改成自己能记住的简单密码 2.安装软件 下载yum源 也可以用阿里云的yum源 把里面的&#xff1a;%d全删了&#xff0c;然后把 #generic-repos is licensed …...

【VS Code】Qt程序的调试与性能分析

要对 Qt 程序进行性能分析和调试&#xff0c;尤其是使用像 Valgrind、Perf 或 GDB 这类工具时&#xff0c;通常需要结合开发环境&#xff08;如 VS Code&#xff09;与相关插件或命令行工具。 以下是一些常用的方法和步骤&#xff1a; 1. VS Code 调试 Qt 程序 所需配置&…...

记录学习的第三十六天

很久没写过博客了&#xff0c;今天又开始了。 今天很不错&#xff0c;了解了查分数组的实质。 还是做了一道滑动窗口的题&#xff0c;我什么时候才能刷完滑动窗口啊。...

ANSI V 级对夹球阀控制阀:高性价比零泄漏流体控制新选择-耀圣

ANSI V 级对夹球阀控制阀&#xff1a;高性价比零泄漏流体控制新选择 在化工、食品、给排水等工业领域&#xff0c;流体控制的精准性与密封性直接关乎生产安全与效率。ANSI V 级对夹球阀控制阀凭借零泄漏密封性能&#xff08;ANSI VI 级标准&#xff09;、紧凑的对夹式结构、亲…...

pcdn核心要素

开展PCDN业务最核心的是明确业务定位、保障网络与硬件基础、确保合规运营&#xff0c;并选择合适的盈利模式。以下是具体要点&#xff1a; 1. 明确业务定位与目标 内容类型适配&#xff1a;PCDN适合高并发、大流量的内容分发场景&#xff0c;如视频直播、点播、大文件下载等。…...

数据分析_主播考核指标体系搭建

作为一名合格的数据分析师&#xff0c;要同时具备逻辑框架搭建能力以及解决实际问题的经验。通过指标量化问题、监控业务健康度并驱动决策。以下是我搭建抖音电商主播考核指标体系时的一些经验&#xff0c;希望对大家有些帮助。 搭建主播能力考核指标体系需要结合直播业务的核心…...

联合索引失效情况分析

一.模拟表结构&#xff1a; 背景&#xff1a; MySQL版本——8.0.37 表结构DDL&#xff1a; CREATE TABLE unite_index_table (id bigint NOT NULL AUTO_INCREMENT COMMENT 主键,clomn_first varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMEN…...

ZYNQ Cache一致性问题解析与实战:从原理到创新优化

一、Cache一致性:多核系统的"记忆迷宫" 1.1 为什么需要关注Cache一致性? 在Zynq-7000系列SoC的双核ARM Cortex-A9架构中,每个CPU核心拥有32KB L1数据Cache和512KB共享L2 Cache。当两个核心同时操作共享内存时,可能会出现: #mermaid-svg-RD2USaYdR7mMPPIA {fon…...

vtkPiecewiseFunction

1. 定义分段函数映射。 2.允许添加控制点&#xff0c;并允许用户控制控制点之间的功能。 3.基于锐度和中点参数&#xff0c;在控制点之间使用分段hermite曲线。 4.锐度为0产生分段线性函数&#xff0c;锐度为1产生分段常数函数。 5.中点是曲线达到Y中值的控制点之间的归一化距离…...