CAN 网络介绍
背景
在T-Box 产品开发过程中,我们离不开CAN总线,因为CAN总线为我们提供了车身的相关数据,比如,车速、油耗、温度等。用于上报TSP平台,进行国标认证;也帮助我们进行车身控制,比如车门解锁/闭锁,鸣笛;但是实际上对整车CAN网络并不了解,比如当一个小白对你提出以下问题:
- 车身CAN网络分为几类?为什么分类?
- 以及网关的存在作用是什么?
当你不能回答上述简单问题时,你怎么好意思说整天和CAN接触呢。因此本文的目的是进行基本的CAN知识介绍,对数据在整车ECU中流转能够加深理解。
CAN
传统的燃油车,CAN网络可以分为5条CAN总线。分别为动力总成CAN、地盘控制CAN、车身控制CAN、娱乐系统CAN、诊断控制CAN。
PT CAN (PowerTrain CAN ) 动力总成CAN总线
PT CAN负责车辆动力,是整车CAN网络信号优先级及信号传输速率最高的一条CAN总线。一般有以下ECU:
- ECM ( Engine Control Module ),发动机控制模块。
- SRS ( SupplementalRestraintSystem),电子安全气囊。
- BMS ( Battery Management System ),电池管理系统。
- EPB Electronic Park Brake,电子驻车系统。
该网络传输关于发动机、变速器、电动机、电池、充电系统等的实时数据。它确保车辆的动力系统能够协调工作,优化性能和燃油效率(对于燃油车)或电池效率(对于电动车)。
CH CAN (Chassis CAN) 底盘控制CAN总线
CH CAN负责汽车底盘及4个轮子的制动/稳定/转向,由于涉及整车制动/助力转向等, 所以其网络信号优先级也是较高的。一般有以下ECU:
- ABS ( Antilock Brake System ,防抱死制动系统。
- ESP(Electronic Stability Program),车身电子稳定系统。
- EPS(Electric Power Steering),电子转向助力。
它传输的内容包括车辆的动态控制信息,如制动系统的响应、车辆稳定性控制(如电子稳定程序ESP)、轮胎压力监控等。
Body CAN车身控制总线
Body CAN负责车身上的一些提高舒适性/安全性的智能硬件的管理与控制,其网络信号优先级较低, 因为以上设备都是辅助设备,一般有以下ECU:
- AC ( Air Condition ),空调。
- AVM(Around View Monitor),360环视。
- BCM(Body Control Module),天窗, 车窗, 雾灯, 转向灯, 雨刮等。
- IMMO(Immobilizer),发动机防盗系统。
- TPMS(Tire Pressure Monitoring System),胎压监控系统。
车身CAN网络负责控制与车身相关的所有电气系统,涵盖 车窗、门锁、座椅调节、灯光系统、空调系统等。该网络主要传输关于车身控制的信息,如车窗升降、车门状态、电动座椅调节、车灯开关等。
Info CAN ( Infomercial CAN ) 娱乐系统总线
Info CAN是辅助可选设备, 所以优先级也是较低的,主要负责车身上的一些提高娱乐性的智能硬件的管理与控制,一般有以下ECU:
- VAES( Video Audio Entertainment System),车载娱乐系统(中控)。
- IPK(Instrument Pack),组合仪表, 当今的数字仪表, 基本有音乐, 地图, 通话等娱乐功能.。
该网络用于控制车内的 信息娱乐系统(如多媒体系统、导航、通信系统)以及 仪表盘 等。
DiagCAN ( Diagnose CAN ) 诊断控制总线
DiagCAN总线主要提供远程诊断功能,只有一个ECU:
- Telematics BOX,简称车载T-BOX。
诊断CAN网络用于车辆的 故障诊断 和 故障码 读取。它提供了对所有控制单元的访问,帮助维修人员或车辆的诊断工具读取、清除故障码、检查系统状态等。
为什么需要划分不同的CAN网络
从结论出发,我们知道传统燃油车分为5个网络CAN。但是为什么会划分这五类呢?有以下几点原因:
- 不同功能需求: 汽车包含多个子系统(如发动机控制系统、车身控制系统、娱乐系统等),这些系统的工作环境和需求差异很大。通过分为不同的 CAN 网络,可以确保各系统之间的独立性和稳定性。
- 避免数据冲突: 如果所有控制单元都连接在同一个 CAN 网络上,数据量会非常大,可能导致数据冲突、丢失或者延迟。将系统分开,可以减少数据传输的竞争,提高效率。
- 提高系统可靠性:如果某一 CAN 网络出现故障,其他网络可以继续工作,避免全车系统瘫痪
- 功能隔离: 例如,安全相关系统和娱乐系统需要严格分开,以提高车内通信系统的安全性。
从CAN网络的波特率划分,也可以分为以下4类:
- 高速度 CAN(High-Speed CAN,通常为 500kbps 或 1Mbps)。主要用于关键系统,对时效性要求高的子系统。比如动力PT CAN、CH CAN。
- 中速 CAN(Medium-Speed CAN,通常为 125kbps 或 250kbps)。主要用于数据传输速率不需要太高,但还是要求一定的响应速度。比如body CAN。
- 低速 CAN(Low-Speed CAN,通常为 10kbps 或 20kbps)。主要用于传输相对较少的数据,且容忍一些延迟,比如info CAN。
- 诊断 CAN(Diagnostic CAN)。这个网络主要用于与车辆的 诊断工具 或 维修设备 进行通信。
CAN 网络的连接器 ——网关
如上所述,不同的CAN网络具备不同的波特率,它们之间是如何实现交互的呢?答案就是CAN网关。
CAN网关是整个CAN网络的核心, 它是不同CAN子网络或系统之间的桥梁。CAN网关用于在多个CAN网络之间传递信息,确保不同子系统或网络能够无缝地通信和协作。它的主要作用可以归纳为以下几个方面:
- 跨网络通信。比如动力系统和车身系统进行数据交换,使得系统能够协同工作。
- 数据过滤与映射。CAN网关可以对通过它传输的数据进行过滤,只允许特定的数据或信息通过。这有助于减少网络负担,避免无关数据占用带宽。也可以达到安全的目的。
- 协议转换。CAN网关有时不仅仅是传递CAN数据,还能够进行协议转换。例如,一些高端网关支持将CAN协议转换为其他协议,如LIN协议、FlexRay协议、Ethernet协议等。
- 故障隔离和保护。如果某个网络(如底盘CAN)发生故障,CAN网关可以通过隔离故障网络来保护其他子系统(如动力系统、车身系统)继续工作。
- 诊断和故障码传递。CAN网关还可以用于将来自各个子网络的故障码汇总,并传递到诊断设备或中央控制系统。这有助于集中诊断和故障检测,方便维修和维护。
CAN 网络拓扑,大致如下:
示例
仪表显示发动机转速
- 发动机的转速是从PT CAN中的ECM 模块发送信号,PT CAN 网络中所有的ECU都可以获取到该信息。
- 网关收到PT CAN 网络中的发动机转速信息后,会将其转换为其它CAN 网络对应波特率,分别在CAN 网络中广播。
- info CAN 网络中的 IPK模块收到 发动机转速信息后,就可以显示了。
数据流图大致如下:
仪表告警安全带未扣紧并报警
安全带未扣紧需求,一般有两个前置条件。
- 车速大于5Km/h。可通过 PT CAN 网络中的 VSS (车速传感器)获取。
- 安全带未扣紧。可通过SCM(Seat Control Module)座椅控制模块,能够检测乘客是否已经坐在座位上,以及安全带是否已经扣紧。
一般会进行仪表告警显示,以及蜂鸣器报警。数据流图大致如下:
总结
本文介绍了汽车中不同类型的CAN总线,包括动力总成CAN、底盘控制CAN、车身控制CAN、娱乐系统CAN和诊断控制CAN。每种CAN网络负责不同的车辆子系统,以满足功能需求、提高系统可靠性并避免数据冲突。文章还解释了CAN网关的作用,它作为不同CAN子网络之间的桥梁,支持跨网络通信、数据过滤、协议转换和故障隔离,确保车辆各系统的高效协作和稳定运行。
参考:https://blog.csdn.net/u010783226/article/details/121958086
相关文章:
CAN 网络介绍
背景 在T-Box 产品开发过程中,我们离不开CAN总线,因为CAN总线为我们提供了车身的相关数据,比如,车速、油耗、温度等。用于上报TSP平台,进行国标认证;也帮助我们进行车身控制,比如车门解锁/闭锁…...
pytorch 多机多卡训练方法
在深度学习训练中,使用多机多卡(多台机器和多块 GPU)可以显著加速模型训练过程。 PyTorch 提供了多种方法来实现多机多卡训练,以下是一些常用的方法和步骤: 1. 使用 torch.distributed 包 PyTorch 的 torch.distribut…...
【智能控制】年末总结,模糊控制,神经网络控制,专家控制,遗传算法
关注作者了解更多 我的其他CSDN专栏 毕业设计 求职面试 大学英语 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 …...
Linux系统 C/C++编程基础——使用make工具和Makefile实现自动编译
ℹ️大家好,我是练小杰,今天周二了,距离除夕只有6天了,新的一年就快到了😆 本文是有关Linux C/C编程的make和Makefile实现自动编译相关知识点,后续会不断添加相关内容 ~~ 回顾:【Emacs编辑器、G…...
kafka学习笔记7 性能测试 —— 筑梦之路
kafka 不同的参数配置对 kafka 性能都会造成影响,通常情况下集群性能受分区、磁盘和线程等影响因素,因此需要进行性能测试,找出集群性能瓶颈和最佳参数。 # 生产者和消费者的性能测试工具 kafka-producer-perf-test.sh kafka-consumer-perf-t…...
C#与AI的共同发展
C#与人工智能(AI)的共同发展反映了编程语言随着技术进步而演变,以适应新的挑战和需要。自2000年微软推出C#以来,这门语言经历了多次迭代,不仅成为了.NET平台的主要编程语言之一,还逐渐成为构建各种类型应用程序的强大工具。随着时…...
multus使用教程
操作步骤如下: 1.在vmware vsphere上配置所有主机使用的端口组安全项 Forged transmits 设置为: Accept Promiscuous Mode 设置为:Accept Promiscuous Mode(混杂模式)和Forged Transmits(伪传输)…...
用JAVA写算法之输入输出篇
本系列适合原来用C语言或其他语言写算法,但是因为找工作或比赛的原因改用JAVA语言写算法的同学。当然也同样适合初学算法,想用JAVA来写算法题的同学。 常规方法:使用Scanner类和System.out 这种方法适用于leetcode,以及一些面试手…...
场馆预定平台高并发时间段预定实现V2
🎯 本文档介绍了场馆预订系统接口V2的设计与实现,旨在解决V1版本中库存数据不一致及性能瓶颈的问题。通过引入令牌机制确保缓存和数据库库存的最终一致性,避免因服务器故障导致的库存错误占用问题。同时,采用消息队列异步处理库存…...
(1)STM32 USB设备开发-基础知识
开篇感谢: 【经验分享】STM32 USB相关知识扫盲 - STM32团队 ST意法半导体中文论坛 单片机学习记录_桃成蹊2.0的博客-CSDN博客 USB_不吃鱼的猫丿的博客-CSDN博客 1、USB鼠标_哔哩哔哩_bilibili usb_冰糖葫的博客-CSDN博客 USB_lqonlylove的博客-CSDN博客 USB …...
Spring Boot 整合 ShedLock 处理定时任务重复执行的问题
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…...
缓存之美:万文详解 Caffeine 实现原理(上)
由于社区最大字数限制,本文章将分为两篇,第二篇文章为缓存之美:万文详解 Caffeine 实现原理(下) 大家好,我是 方圆。文章将采用“总-分-总”的结构对配置固定大小元素驱逐策略的 Caffeine 缓存进行介绍&…...
PHP语言的网络编程
PHP语言的网络编程 网络编程是现代软件开发中不可或缺的一部分,尤其是在日益发展的互联网时代。PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,专门用于Web开发。它的灵活性、易用性以及强大的社区支持使得PHP在网络…...
【技巧】优雅的使用 pnpm+Monorepo 单体仓库构建一个高效、灵活的多项目架构
单体仓库(Monorepo)搭建指南:从零开始 单体仓库(Monorepo)是一种将多个相关项目集中管理在一个仓库中的开发模式。它可以帮助开发者共享代码、统一配置,并简化依赖管理。本文将通过实际代码示例࿰…...
算法项目实时推流
1、搭建流媒体服务器 下载mediamtx 2、视频流直推 ffmpeg -stream_loop -1 -i DJI_20250109112715_0002_W.MP4 -r 30 -c:v libx264 -preset ultrafast -f flv rtmp://192.168.100.20:1935/live/test_chengdu1 3、硬件加速 如果硬件支持,可以使用硬件加速编码器&am…...
软件测试—— 接口测试(HTTP和HTTPS)
软件测试—— 接口测试(HTTP和HTTPS) HTTP请求方法GET特点使用场景URL结构URL组成部分URL编码总结 POST特点使用场景请求结构示例 请求标头和响应标头请求标头(Request Headers)示例请求标头 响应标头(Response Header…...
PCL K4PCS算法实现点云粗配准【2025最新版】
目录 一、算法原理1、算法概述2、算法流程3、参考文献二、 代码实现1、原始版本2、2024新版三、 结果展示本文由CSDN点云侠原创,原文链接,首发于:2020年4月27日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 博客长期更新,本文最近一次更新时间为…...
Docker 学习总结(85)—— docker cp 使用总结
前言 在现代软件开发中,Docker 已成为一种流行的容器化技术。无论是在开发、测试还是生产环境中,管理容器内的文件都是一项常见且重要的任务。本文将详细介绍如何使用 docker cp 命令在 Docker 容器与宿主机之间拷贝文件和目录,并结合一些实际使用场景,帮助您更高效地管理…...
《FMambaIR:一种基于混合状态空间模型和频域的方法用于图像恢复》学习笔记
paper:(PDF) FMambaIR: A Hybrid State Space Model and Frequency Domain for Image Restoration 目录 摘要 一、引言 二、相关工作 1、图像恢复 2、频率学习 3、状态空间模型(SSM) 三、框架 1、基本知识 2、整体框架 3、F-Mamba…...
PyQt5 超详细入门级教程上篇
PyQt5 超详细入门级教程 上篇:1-3部分:PyQt5基础与常用控件 第1部分:初识 PyQt5 和安装 1.1 什么是 PyQt5? PyQt5 是 Python 的图形用户界面 (GUI) 框架,它基于强大的 Qt 库。Qt 是一个跨平台的 C 框架,用…...
通信协议—WebSocket
一、WebSocket编程概念 1.1 什么是WebSocket WebSocket 是一种全双工通信协议,允许在客户端(通常是浏览器)和服务器之间建立持久连接,以实现实时的双向通信。它是 HTML5 标准的一部分,相比传统的 HTTP 请求ÿ…...
FFmpeg音视频采集
文章目录 音视频采集音频采集获取设备信息录制麦克风录制声卡 视频采集摄像机画面采集 音视频采集 DirectShow(简称DShow)是一个Windows平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能,它支持多种多样的媒体文件格式&…...
【微机原理与接口技术】定时控制接口
文章目录 8253的引脚和工作方式内部结构和引脚工作方式方式0:计数结束中断方式1:可编程单稳脉冲方式2:周期性负脉冲输出方式3:方波发生器方式4:软件触发的单次负脉冲输出方式5:硬件触发的单次负脉冲输出各种…...
AG32 FPGA 的 Block RAM 资源:M9K 使用
1. 概述 AG32 FPGA 包含了 4 个 M9K 块,每个 M9K 块的容量为 8192 bits,总计为 4 个 M9K(4K bytes)。这使得 AG32 的内部存储非常适合嵌入式应用,能够有效地利用片上资源。 M9K 参数 参考自《AGRV2K_Rev2.0.pdf》。…...
第3天:阿里巴巴微服务解决方案概览
一、阿里巴巴微服务解决方案概述 阿里巴巴在微服务领域贡献了多个开源项目,形成了完整的微服务解决方案,广泛应用于分布式系统开发。其中,Spring Cloud Alibaba 是基于 Spring Cloud 构建的一站式微服务解决方案,集成了多个阿里巴…...
在Ubuntu上安装RabbitMQ教程
1、安装erlang 因为rabbitmq是基于erlang开发的,所以要安装rabbitmq,首先需要安装erlang运行环境 apt-get install erlang执行命令查是否安装成功:erl,疯狂 Ctrlc 就能退出命令行 2、安装rabbitmq 1、查看erlang与rabbitmq版本…...
WPF 引发类型为“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常 解决办法
本章讲述:引发类型为“System.Windows.Forms.AxHostInvalidActiveXStateException”的异常 解决办法。 这几天在做一个WPF功能时,因为引用了第三方的OCX控件,一般来说一个对象只要实例化就行了, 但是在引用这个控件时就报引发类型为“System.…...
Vue 3中导航守卫(Navigation Guard)结合Axios实现token认证机制
在Vue 3中,导航守卫(Navigation Guard)用于拦截路由的变化,可以在用户访问页面前进行检查。结合Axios进行token认证机制时,我们可以通过导航守卫在路由跳转时,检查用户的认证状态,确保用户有有效…...
代码随想录算法【Day28】
Day28 122.买卖股票的最佳时机 II 最终利润是可以分解的 假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0]。 相当于(prices[3] - prices[2]) (prices[2] - prices[1]) (prices[1] - prices[0])。 所以把利润分解为每天…...
【21】Word:德国旅游业务❗
目录 题目 NO1.2.3 NO4 NO5.6 NO7 NO8.9.10.11 题目 NO1.2.3 F12:另存为布局→页面设置→页边距:上下左右选中“德国主要城市”→开始→字体对话框→字体/字号→文本效果:段落对话框→对齐方式/字符间距/段落间距 NO4 布局→表对话框…...
基于 MDL 行情插件的中金所 L1 数据处理最佳实践
本文介绍了如何通过 DolphinDB 的 MDL 插件订阅并处理中金所 Level 1 实时数据。首先,文章简要介绍了 MDL 插件的功能和作用。它是基于 MDL 官方提供的行情数据服务 C SDK(即 TCP 版本 MDL )实现,提供了实时数据获取和处理的能力。…...
在 vscode + cmake + GNU 工具链的基础上配置 JLINK
安装 JLINK JLINK 官网链接 下载安装后找到安装路径下的可执行文件 将此路径添加到环境变量的 Path 中。 创建 JFlash 项目 打开 JFlash,选择新建项目 选择单片机型号 在弹出的窗口中搜索单片机 其他参数根据实际情况填写 新建完成: 接下来设置…...
靶机复现-pikachu靶机文件包含漏洞
本篇文章旨在为网络安全渗透测试靶机复现学习。通过阅读本文,读者将能够对渗透pikachu靶场文件包含漏洞复现有一定的了解 原文学习链接 CSDN博主:One_Blanks主页地址 靶机资源下载 PHPStudy pikachu 一、前言 文件包含漏洞是编程中的一种安全隐患&a…...
如何写出优秀的提示词?ChatGPT官方的六种方法
使用ChatGPT时,提示词(Prompt)的质量直接影响到生成结果的好坏。ChatGPT官方文档中提供了六种优化提示词的方法,这些方法能够帮助用户更好地利用ChatGPT,提升其生成内容的准确性和实用性。本文将结合中文习惯和新的示例…...
【数据结构】顺序表和链表
线性表 线性表是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线…...
StarRocks强大的实时数据分析
代码仓库:https://github.com/StarRocks/starrocks?tabreadme-ov-file StarRocks | A High-Performance Analytical Database 快速开始:StarRocks | StarRocks StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化…...
20250121在Ubuntu20.04.6下使用Linux_Upgrade_Tool工具给荣品的PRO-RK3566开发板刷机
sudo upgrade_tool uf update.img 20250121在Ubuntu20.04.6下使用Linux_Upgrade_Tool工具给荣品的PRO-RK3566开发板刷机 2025/1/21 11:54 百度:ubuntu RK3566 刷机 firefly rk3566 ubuntu upgrade_tool烧写详解 https://wiki.t-firefly.com/Core-3566JD4/03-upgrad…...
python学opencv|读取图像(四十一 )使用cv2.add()函数实现各个像素点BGR叠加
【1】引言 前序已经学习了直接在画布上使用掩模,会获得彩色图像的多种叠加效果,相关文章链接为: python学opencv|读取图像(四十)掩模:三通道图像的局部覆盖-CSDN博客 这时候如果更进一步,直接…...
150 Linux 网络编程6 ,从socket 到 epoll整理。listen函数参数再研究
一 . 只能被一个client 链接 socket例子 此例子用于socket 例子, 该例子只能用于一个客户端连接server。 不能用于多个client 连接 server socket_server_support_one_clientconnect.c /* 此例子用于socket 例子, 该例子只能用于一个客户端连接server。…...
学习ASP.NET Core的身份认证(基于JwtBearer的身份认证9)
测试数据库中只有之前记录温湿度及烟雾值的表中数据较多,在该数据库中增加AppUser表,用于登录用户身份查询,数据库表如下所示: 项目中安装SqlSugarCore包,然后修改控制器类的登录函数及分页查询数据函数ÿ…...
【数据分析(二)】初探 Pandas
目录 引言1. 基本数据结构1.1. Series 的初始化和简单操作1.2. DataFrame 的初始化和简单操作1.2.1. 初始化与持久化1.2.2. 读取查看1.2.3. 行操作1.2.4. 列操作1.2.5. 选中筛查 2. 数据预处理2.0. 生成样例表2.1. 缺失值处理2.2. 类型转换和排序2.3. 统计分析 3. 数据透视3.0.…...
大数据与AI驱动的商业查询平台:企业市场拓展的变革引擎
在竞争白热化的商业环境里,企业对准确市场信息的高效获取能力,直接关系到业务拓展的成败。商业查询平台借助大数据和人工智能技术,为企业提供精准客户筛选、市场拓展分析以及风险评估服务,正逐渐成为企业市场开拓的得力助手。本文…...
k8s namespace绑定节点
k8s namespace绑定节点 1. apiserver 启用准入控制 PodNodeSelector2. namespace 添加注解 scheduler.alpha.kubernetes.io/node-selector3. label node 1. apiserver 启用准入控制 PodNodeSelector vim /etc/kubernetes/manifests/kube-apiserver.yaml spec:containers:- co…...
ChatGPT被曝存在爬虫漏洞,OpenAI未公开承认
OpenAI的ChatGPT爬虫似乎能够对任意网站发起分布式拒绝服务(DDoS)攻击,而OpenAI尚未承认这一漏洞。 本月,德国安全研究员Benjamin Flesch通过微软的GitHub分享了一篇文章,解释了如何通过向ChatGPT API发送单个HTTP请求…...
2024微短剧行业生态洞察报告汇总PDF洞察(附原数据表)
原文链接: https://tecdat.cn/?p39072 本报告合集洞察从多个维度全面解读微短剧行业。在行业发展层面,市场规模与用户规模双增长,创造大量高收入就业岗位并带动产业链升级。内容创作上,精品化、品牌化趋势凸显,题材走…...
【JavaSE】(8) String 类
一、String 类常用方法 1、构造方法 常用的这4种构造方法:直接法,或者传参字符串字面量、字符数组、字节数组。 在 JDK1.8 中,String 类的字符串实际存储在 char 数组中: String 类也重写了 toString 方法,所以可以直…...
算法竞赛之差分进阶——等差数列差分 python
目录 前置知识进入正题实战演练 前置知识 给定区间 [ l, r ],让我们把数组中的[ l, r ] 区间中的每一个数加上c,即 a[ l ] c , a[ l 1 ] c , a[ l 2] c , a[ r ] c; 怎么做?很简单,差分一下即可 还不会的小伙伴点此进入学习 进入正题 …...
细说STM32F407单片机电源低功耗StopMode模式及应用示例
目录 一、停止模式基础知识 1、进入停止模式 2、停止模式的状态 3、退出停止模式 4、SysTick定时器的影响 二、停止模式应用示例 1、示例功能和CubeMX项目配置 (1)时钟 (2)RTC (3)ADC1 …...
LeetCode hot 力扣热题100 二叉树的中序遍历(非递归)
以下是代码中每行的详细注释以及整体思路: class Solution { public:vector<int> inorderTraversal(TreeNode* root) {// 定义存储结果的向量,用于存储中序遍历结果vector<int> result;// 定义一个栈,存储节点和访问状态。pair的…...
Flink底层架构与运行流程
这张图展示了Flink程序的架构和运行流程。 主要组件及功能: Flink Program(Flink程序): 包含Program code(程序代码),这是用户编写的业务逻辑代码。经过Optimizer / Graph Builder(…...