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

IIC通信协议详解与STM32实战指南


IIC通信协议详解与STM32实战指南

引言

IIC(Inter-Integrated Circuit)是Philips公司开发的串行通信协议,广泛应用于传感器、EEPROM、RTC等低速外设的连接。本文深入解析IIC协议原理,并提供基于STM32的GPIO模拟实现方案,包含完整的代码解析和实战应用示例。


一、IIC协议核心原理

1. 物理层特性

特性参数说明
总线构成SCL(时钟线)+ SDA(数据线)
传输模式半双工
最大设备数112(7位地址)
传输速率标准模式100kbps,快速模式400kbps
电平特性开漏输出+上拉电阻(通常4.7KΩ)

核心优势

  • 仅需两根线即可实现多设备通信
  • 内置冲突检测和仲裁机制
  • 支持热插拔(需设备具备总线释放功能)

2. 协议层详解

数据帧结构
[Start] + [Device Address + R/W] + [ACK] + [Data] + [ACK] + ... + [Stop]└─7位地址─┘ └─0:写 1:读─┘
关键时序节点
  1. 起始条件:SCL高电平时,SDA从高→低跳变
  2. 停止条件:SCL高电平时,SDA从低→高跳变
  3. 数据有效性:SCL高电平期间必须保持SDA稳定
  4. 应答机制:每字节传输后接收方必须拉低SDA

二、IIC通信代码实现(详细注释版)

1. GPIO模拟IIC初始化

// IIC引脚定义(以STM32F103 PA6-SCL, PA7-SDA为例)
#define IIC_SCL_PIN    GPIO_Pin_6
#define IIC_SDA_PIN    GPIO_Pin_7
#define IIC_PORT       GPIOAvoid IIC_Init(void) {GPIO_InitTypeDef GPIO_InitStruct;/* 开启GPIO时钟 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);/* SCL和SDA配置为开漏输出模式 */GPIO_InitStruct.GPIO_Pin = IIC_SCL_PIN | IIC_SDA_PIN;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD;  // 开漏输出/* 为什么用开漏模式?允许总线"线与"特性,配合上拉电阻实现电平控制 */GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(IIC_PORT, &GPIO_InitStruct);/* 拉高总线(空闲状态) */IIC_SCL_H();IIC_SDA_H();
}

2. 基础信号函数解析

/* 产生IIC起始信号 */
void IIC_Start(void) {SDA_OUT();     // 设置SDA为输出模式IIC_SDA_H();IIC_SCL_H();delay_us(5);   // 保持时间>4.7usIIC_SDA_L();   // 下降沿触发起始条件delay_us(5);IIC_SCL_L();   // 钳住总线,准备发送数据
}/* 产生IIC停止信号 */
void IIC_Stop(void) {SDA_OUT();IIC_SDA_L();IIC_SCL_H();   // 停止条件:SCL高时SDA上升delay_us(5);IIC_SDA_H();delay_us(5);
}/* 发送一个字节(MSB First)*/
uint8_t IIC_SendByte(uint8_t byte) {uint8_t ack;SDA_OUT();for(int i=0; i<8; i++) {IIC_SCL_L();delay_us(2);(byte & 0x80) ? IIC_SDA_H() : IIC_SDA_L();byte <<= 1;delay_us(3);IIC_SCL_H();      // 上升沿锁存数据delay_us(5);}/* 等待从机应答 */IIC_SCL_L();SDA_IN();       // 切换SDA为输入模式delay_us(2);IIC_SCL_H();ack = IIC_READ_SDA(); // 读取ACK信号(0-应答,1-无应答)delay_us(5);IIC_SCL_L();return ack;
}/* 接收一个字节(带应答控制) */
uint8_t IIC_RecvByte(uint8_t ack) {uint8_t data = 0;SDA_IN(); for(int i=0; i<8; i++) {IIC_SCL_L();delay_us(5);IIC_SCL_H();      // 从机在SCL低电平时更新数据data <<= 1;data |= IIC_READ_SDA();delay_us(5);}/* 发送应答信号 */SDA_OUT();ack ? IIC_SDA_L() : IIC_SDA_H(); // 0-应答,1-非应答delay_us(2);IIC_SCL_H();delay_us(5);IIC_SCL_L();return data;
}

3. EEPROM读写示例(AT24C02)

/* 写单字节到EEPROM */
void EEPROM_Write(uint8_t addr, uint8_t data) {IIC_Start();IIC_SendByte(0xA0);     // 设备地址 + 写操作(0)IIC_SendByte(addr);     // 内存地址IIC_SendByte(data);     // 写入数据IIC_Stop();delay_ms(10);           // 等待EEPROM内部写入完成
}/* 从EEPROM读取单字节 */
uint8_t EEPROM_Read(uint8_t addr) {uint8_t data;IIC_Start();IIC_SendByte(0xA0);     // 设备地址 + 写操作IIC_SendByte(addr);     // 设置读地址IIC_Start();            // 重复起始条件IIC_SendByte(0xA1);     // 设备地址 + 读操作(1)data = IIC_RecvByte(0); // 读取数据(发送非应答)IIC_Stop();return data;
}

关键代码原理说明

1. IIC总线特性

  • 开漏输出:必须外接上拉电阻(通常4.7KΩ),避免总线电平冲突
  • 地址格式:7位设备地址 + 1位读写方向位(0-写,1-读)

2. 时序控制要点

  • 起始条件:SCL高电平时,SDA从高→低跳变
  • 停止条件:SCL高电平时,SDA从低→高跳变
  • 数据有效性:SCL高电平期间,SDA必须保持稳定
  • 应答机制:每字节传输后接收方必须拉低SDA

3. EEPROM操作流程

  1. 写操作:

    • 发送设备地址(写模式)
    • 发送内存地址
    • 发送数据
    • 等待内部编程完成(典型5ms)
  2. 读操作:

    • 发送设备地址(写模式)→设置内存地址
    • 重复起始条件
    • 发送设备地址(读模式)→读取数据

常见疑问解答

Q1: 为什么设备地址是0xA0?
A1: AT24C02的7位地址为1010000(A0-A2接地),左移后加写操作位(0)得到0xA0。

Q2: 如何调整通信速率?
A2: 修改延时函数参数,标准模式(100kbps)要求SCL高低电平各≥4.7us,快速模式(400kbps)≥0.6us。

Q3: 何时需要加上拉电阻?
A3: 当总线电容较大或设备较多时,建议在SCL和SDA线上加4.7KΩ上拉电阻至3.3V/5V。

Q4: 如何处理多设备冲突?
A4: 每个IIC设备有唯一地址,总线仲裁机制会自动解决冲突,软件需检测ACK信号判断是否成功。


三、进阶开发技巧

1. 错误处理机制

#define IIC_TIMEOUT   1000  // 超时阈值(单位:us)uint8_t IIC_WaitAck(void) {uint32_t time = 0;SDA_IN();IIC_SCL_H();while(GPIO_ReadInputDataBit(IIC_PORT, IIC_SDA_PIN)) {if(++time > IIC_TIMEOUT) {IIC_Stop();return 1; // 超时错误}delay_us(1);}IIC_SCL_L();return 0;
}

2. 总线扫描工具

void IIC_Scanner(void) {printf("Scanning IIC devices...\n");for(uint8_t addr=0x08; addr<0x78; addr++) {IIC_Start();uint8_t ack = IIC_SendByte(addr << 1);IIC_Stop();if(!ack) {printf("Device found at 0x%02X\n", addr);}delay_ms(10);}
}

四、常见问题排查指南

1. 典型故障现象

  • 总线锁死:检查SCL/SDA是否被意外拉低,尝试发送虚假时钟
  • 地址无响应:确认设备地址是否正确(含地址引脚电平)
  • 数据错位:检查时序延时是否符合设备要求

2. 调试建议

  1. 用示波器捕获总线波形,验证时序参数
  2. 在起始信号后添加LED指示,确认通信触发
  3. 逐步提升速率测试(从10kHz开始)
  4. 检查上拉电阻值(计算公式:Rp < (Vdd - Vol)/Iol)

结语

IIC协议凭借其简洁的硬件设计和灵活的多设备管理能力,在嵌入式领域占据重要地位。通过GPIO模拟实现,开发者可以深入理解协议细节,但在量产项目中建议使用硬件IIC外设以获得更好的稳定性。实际开发中需特别注意总线负载能力和时序参数的匹配。

延伸学习建议

  • 研究IIC总线仲裁机制
  • 探索DMA在高速模式下的应用
  • 了解SMBus协议扩展特性

相关文章:

IIC通信协议详解与STM32实战指南

IIC通信协议详解与STM32实战指南 引言 IIC&#xff08;Inter-Integrated Circuit&#xff09;是Philips公司开发的串行通信协议&#xff0c;广泛应用于传感器、EEPROM、RTC等低速外设的连接。本文深入解析IIC协议原理&#xff0c;并提供基于STM32的GPIO模拟实现方案&#xff…...

【算法】数组、链表、栈、队列、树

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 持续更新中...数组、链表点击消除环形链表环形链表 II 栈、队列树 持续更新中… 数组、链表 点击消除 AB5 点击消除 这个题很容…...

vscode 配置golang开发环境

vscode 配置golang开发环境 在go1.20环境中需要指定工具的安装版本 go install golang.org/x/tools/goplsv0.15.3 go install github.com/go-delve/delve/cmd/dlvv1.21.0使用go Install/Update tool安装工具会报错 go版本太低, 而很多时候为了项目稳定或风险太高, 我们不太希…...

uniapp APP使用web-view内嵌 h5 解决打包发版浏览器有缓存需要清除的问题

1.在当前项目根节点下的public目录下的index.html里面写入禁止缓存的 meta <!-- 解决前端发版缓存问题 start --><meta http-equiv"pragma" content"no-cache"><meta http-equiv"cache-control" content"no-cache, no-stor…...

机器学习与深度学习中模型训练时常用的四种正则化技术L1,L2,L21,ElasticNet

L1正则化和L2正则化是机器学习中常用的两种正则化方法&#xff0c;用于防止模型过拟合。它们的区别主要体现在数学形式、作用机制和应用效果上。以下是详细对比&#xff1a; 1. 数学定义 L1正则化&#xff08;也叫Lasso正则化&#xff09;&#xff1a; 在损失函数中加入权重参…...

LLM自动化评测

使用的数据集&#xff1a;ceval-exam import requests from datasets import load_dataset, concatenate_datasets import re from tqdm import tqdm import re, time, tiktoken, ollama from ollama import ChatResponse from ollama import Optionsdef llm(model, query, te…...

Android 英文文章选词

点击文章中的一个单词&#xff0c;获取它。 通过点击的坐标y来获取行数&#xff0c;通过x坐标获取字符偏移量&#xff0c;向前遍历匹配&#xff0c;向后遍历匹配&#xff0c;匹配不成功则跳出循环。截取开始位置和最后位置的字符串。 主要代码 public String getSelectText…...

56.HarmonyOS NEXT 登录模块开发教程(十):总结与展望

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT 登录模块开发教程&#xff08;十&#xff09;&#xff1a;总结与展望 文章目录 HarmonyOS NEXT 登录模块开发教程&#xff08;十&a…...

【Go每日一练】猜数字游戏

&#x1f47b;创作者&#xff1a;丶重明 &#x1f47b;创作时间&#xff1a;2025年3月16日 &#x1f47b;擅长领域&#xff1a;运维 目录 1.&#x1f636;‍&#x1f32b;️题目&#xff1a;猜数字游戏2.&#x1f636;‍&#x1f32b;️代码开发3.&#x1f636;‍&#x1f32b;…...

论文分享:PL-ALF框架实现无人机低纹理环境自主飞行

在室内仓库、地下隧道等低纹理复杂场景中&#xff0c;无人机依赖视觉传感器进行自主飞行时&#xff0c;往往会遇到定位精度低、路径规划不稳定等难题。针对这一问题&#xff0c;重庆邮电大学计算机学院雷大江教授团队在IEEE Trans期刊上提出了一种新型自主飞行框架&#xff1a;…...

element-plus中Autocomplete自动补全输入框组件的使用

目录 1.基本使用 ①从官网复制如下代码 ②查看运行效果 ③代码解读 2.调用后端接口&#xff0c;动态获取建议数据 结语 1.基本使用 ①从官网复制如下代码 <template> <div><!-- 自动补全输入框 --><el-autocompletev-model"state":fetc…...

【医学影像 AI】大型语言模型生成 ROP 患者信息材料的能力

【医学影像 AI】大型语言模型生成 ROP 患者信息材料的能力 0. 论文简介0.1 基本信息0.2 摘要 1. 引言2. 材料与方法2.1 大语言模型的使用2.2 可读性标准2.3 统计分析 3. 结果3.1 Bezirci-Yılmaz可读性评分3.2 Ateşman可读性评分3.3 全面性评分3.4 准确性评分 4. 讨论4.1 可读…...

(性能测试)性能测试工具 2.jmeter的环境搭建 3jmeter元件和4使用实例 5jmeter元件和参数化

目录 性能测试工具 性能测试工具 jemeter环境搭建 jmeter的常用目录介绍 jmeter修改语言和主题--jmeter界面的汉化 jmeter元件 jmeter元件和组件的介绍 jmeter的作用域原则 jmeter的执行顺序 案例&#xff1a;执行顺序 jmeter使用案例 jmeter线程组的介绍 jmeter…...

Matlab 四分之一车体车辆半主动悬架鲁棒控制

1、内容简介 略 Matlab 173-四分之一车体车辆半主动悬架鲁棒控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...

Kafka可视化工具KafkaTool工具的使用

Kafka Tool工具 介绍 使用Kafka的小伙伴&#xff0c;有没有为无法直观地查看 Kafka 的 Topic 里的内容而发过愁呢&#xff1f;下面推荐给大家一款带有可视化页面的Kafka工具&#xff1a;Kafka Tool &#xff08;目前最新版本是 3.0.2&#xff09; 注意&#xff1a;以前叫Kafk…...

【Unity】在项目中使用VisualScripting

1. 在packagemanager添加插件 2. 在设置中进行初始化。 Edit > Project Settings > Visual Scripting Initialize Visual Scripting You must select Initialize Visual Scripting the first time you use Visual Scripting in a project. Initialize Visual Scripting …...

【Maven教程与实战案例】

文章目录 前言一、Maven是什么&#xff1f;二、Maven的安装与配置1. 安装前置条件2. 下载与配置 Maven3. 验证安装 三、Maven的核心概念1. POM.xml 文件2. 构建生命周期与插件机制 四、实战项目示例1. 项目目录结构2. 编写代码App.javaAppTest.java 3. 构建项目4. 运行项目 前言…...

Flask中使用with语句手动加载应用上下文

在 Flask 中&#xff0c;with app.app_context(): 手动加载应用上下文&#xff0c;使代码块可以访问 Flask 全局对象&#xff08;如 current_app、g&#xff09;&#xff0c;即使代码不在请求中运行。 1. 为什么需要手动加载应用上下文&#xff1f; 在 Flask 中&#xff0c;某…...

ROS实践(五)机器人自动导航(robot_navigation)

目录 一、知识点 1. 定位 2. 路径规划 (1)全局路径规划 (2)局部路径规划 3. 避障 二、常用工具和传感器 三、相关功能包 1. move_base(决策规划) 2. amcl(定位) 3. costmap_2d(代价地图) 4. global_planner(全局规划器) 5. local_planner(局部规划器…...

【数学建模】层次分析法(AHP)详解及其应用

层次分析法(AHP)详解及其应用 引言 在现实生活和工作中&#xff0c;我们经常面临复杂的决策问题&#xff0c;这些问题通常涉及多个评价准则&#xff0c;且各准则之间可能存在相互影响。如何在这些复杂因素中做出合理的决策&#xff1f;层次分析法(Analytic Hierarchy Process…...

【大模型】Transformer、GPT1、GPT2、GPT3、BERT 的论文解析

前言 在自然语言处理&#xff08;NLP&#xff09;和深度学习的快速发展中&#xff0c;Transformer模型和 GPT系列模型扮演了至关重要的角色。本篇博客旨在对这些开创性的论文进行介绍&#xff0c;涵盖它们的提出时间、网络结构等关键信息&#xff0c;能够快速的理解这些模型的设…...

Android 手机启动过程

梳理 为了梳理思路&#xff0c;笔者画了一幅关于 Android 手机启动的过程图片内容纯属个人见解&#xff0c;如有错误&#xff0c;欢迎各位指正...

【redis】hash基本命令和内部编码

文章目录 表示形式命令HSET 和 HGET HEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSETNXHINCRBYHINCRBYFLOAT命令小结内部编码 表示形式 Redis 自身已经是键值对结构了 Redis 自身的键值对就是通过哈希的方式来组织的 把 key 这一层组织完成之后&#xff0c;到了 value 这一层&…...

统计数字字符个数(信息学奥赛一本通-1129)

【题目描述】 输入一行字符&#xff0c;统计出其中数字字符的个数。 【输入】 一行字符串&#xff0c;总长度不超过255。 【输出】 输出为1行&#xff0c;输出字符串里面数字字符的个数。 【输入样例】 Peking University is set up at 1898. 【输出样例】 4 【输出样例】 #in…...

基于javaweb的SSM+Maven网上选课管理系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

算法及数据结构系列 - BFS算法

文章目录 框架思路经典题型111. 二叉树的最小深度752. 打开转盘锁 框架思路 BFS 的核心思想应该不难理解的&#xff0c;就是把一些问题抽象成图&#xff0c;从一个点开始&#xff0c;向四周开始扩散。一般来说&#xff0c;我们写 BFS 算法都是用队列这种数据结构&#xff0c;每…...

深入剖析 MetaSpace OOM 问题:根因分析与高效解决策略

目录 一、MetaSpace 区 OOM&#xff1a;概述 &#xff08;一&#xff09; MetaSpace的变革与挑战 &#xff08;二&#xff09;MetaSpace OOM的影响 &#xff08;三&#xff09; 为什么要关注MetaSpace OOM 二、MetaSpace 区 OOM的根本原因 &#xff08;一&#xff09;Met…...

java自带日志系统介绍(JUL)以及和Log4j 2、Logback、SLF4J不同日志工具的对比

Java 日志系统是开发中用于记录应用程序运行时信息的重要工具。以下是 Java 日志系统的核心组件及其使用场景、配置参数的详细介绍&#xff0c;以及不同日志系统的对比分析。 Java 日志系统核心组件 1. 日志记录器&#xff08;Logger&#xff09; 作用&#xff1a;负责生成日…...

Kubernetes 中metrics-server的采集周期,采集链路是什么样的?

0. 运维干货分享 软考高级系统架构设计师备考学习资料软考高级网络规划设计师备考学习资料Kubernetes CKA认证学习资料分享信息安全管理体系&#xff08;ISMS&#xff09;制度模板分享免费文档翻译工具(支持word、pdf、ppt、excel)PuTTY中文版安装包MobaXterm中文版安装包ping…...

一分钟了解深度学习

一分钟了解深度学习 A Minute to Know About Deep Learning By JacksonML 1. 什么是深度学习&#xff1f; 深度学习(Deep Learning) 是机器学习的一个子集&#xff0c;都属于人工智能的范畴&#xff1b;它使用多层神经网络&#xff08;称为深度神经网络&#xff09;来模拟人…...

Git LFS (Large File Storage) 简介

目录 Git LFS (Large File Storage) 简介 1. 什么是 Git LFS&#xff1f; 2. 为什么需要 Git LFS&#xff1f; 3. Git LFS 的工作原理 4. 如何使用 Git LFS&#xff1f; 4.1 安装 Git LFS 4.2 配置 Git LFS 5. Git LFS 的优缺点 优点 缺点 6. 适用场景 7. 结论 1. …...

前端权限系统

前端权限系统是为了确保用户只能访问他们有权限查看的资源而设计的。在现代前端开发中&#xff0c;权限控制不仅仅是简单的显示或隐藏元素&#xff0c;还涉及到对路由、组件、数据和操作权限的细致控制。下面是前端权限系统的常见设计方案和实现步骤。 前端权限系统的组成部分 …...

【蓝桥杯速成】| 4.递归

递归 题目一&#xff1a;最大公约数 问题描述 1979. 找出数组的最大公约数 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums &#xff0c;返回数组中最大数和最小数的 最大公约数 。 两个数的 最大公约数 是能够被两个数整除的最大正整数。 解题步骤 需要…...

QEMU源码全解析 —— 块设备虚拟化(4)

接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(3) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 类模板是创建类的模式_创建类是的模版-CSDN博客<...

92.HarmonyOS NEXT开发学习路径与最佳实践总结:构建高质量应用

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT开发学习路径与最佳实践总结&#xff1a;构建高质量应用 文章目录 HarmonyOS NEXT开发学习路径与最佳实践总结&#xff1a;构建高质…...

【004】deepseek本地化部署后,python的调用方式_#py

python调用本地deepseek 1 本地化部署deepseek2 python调用方式 1 本地化部署deepseek 已经有很多大佬们说了不少部署本地化部署deepseek的工作了&#xff0c;我就不过多重复了。 先安装Ollama软件&#xff0c;再通过Ollama获取deepseek的模型文件&#xff0c;大家根据电脑的配…...

基于Python+Flask+MySQL+HTML的爬取豆瓣电影top-250数据并进行可视化的数据可视化平台

FlaskMySQLHTML 项目采用前后端分离技术&#xff0c;包含完整的前端&#xff0c;以flask作为后端 Pyecharts、jieba进行前端图表展示 通过MySQL收集格列数据 通过Pyecharts制作数据图表 这是博主b站发布的详细讲解&#xff0c;感兴趣的可以去观看&#xff1a;【Python爬虫可…...

【Prometheus01】可观测性系统之Prometheus简介、优缺点对比、组件介绍、数据采集流程、TSDB简介

监控工具对比、黑盒监控与盒白盒监控、Kubernetes监控简介 监控简介&#xff1a; 监控的价值&#xff1a; 长期趋势分析&#xff1a;通过对监控样本数据的持续收集和统计&#xff0c;对监控指标进行长期趋势分析。例如&#xff0c;通过对磁盘空间增长率的判断&#xff0c;我们…...

Postman下载安装及简单入门

一&#xff0e;Postman简介 Postman是一款API测试工具&#xff0c;可以帮助开发、测试人员发送HTTP请求&#xff0c;与各种API进行交互&#xff0c;并分析响应 二&#xff0e;下载与安装 访问Postman官网&#xff08;https://www.postman.com/&#xff09;&#xff0c;下载适…...

记第一次跟踪seatunnel的任务运行过程三——解析配置的具体方法getLogicalDag

前绪 记第一次跟踪seatunnel的任务运行过程二——ClientJobExecutionEnvironment的execture方法 从这里开始&#xff0c;就是使用seatunnel-2.3.9的源码了。前面部分没有变化&#xff0c;2.3.X版本都是通用的。 建议打开源码&#xff0c;边读文章&#xff0c;边阅读源码 正文…...

Maven 的核心包

由于前端项目不是核心&#xff0c;阅读 nexus-public 源代码似乎绕远路了。nexus-oss 社区版主要就是集成 maven 的上传包、认证、包解析、包存储这几个核心功能&#xff0c;前端实现重新可以使用新的现代前端工具来提高生产力。故重新疏理一下 maven 的核心机制&#xff0c;即…...

上位机数据可视化:使用QtCharts绘制波形图

工程配置 CMake文件 find_package(Qt5 COMPONENTS Charts REQUIRED)target_link_libraries(zhd-desktop PRIVATE Qt5::Charts)包含头文件以及名称空间&#xff08;这个很重要&#xff0c;没有包含名称空间编译器会提示找不到相关的类型&#xff09; #include <QtCharts&g…...

制造业数字化转型,汽车装备制造企业数字化转型案例,智能制造数字化传统制造业数字化制造业数字化转型案例

《某制造业企业信息化整体解决方案》PPT展示了一个汽车装备企业的整体信息化解决方案&#xff0c;阐述了该企业的业务特点和现状&#xff0c;主要包括按订单生产、多级计划和产品跟踪等&#xff0c;分析了信息化建设的主要困难&#xff0c;如信息管理手工化、过程数据追溯困难、…...

网络安全常识科普(百问百答)

汪乙己一到店&#xff0c;所有喝酒的人便都看着他笑&#xff0c;有的叫道&#xff0c;“汪乙己&#xff0c;你又监控员工隐私了&#xff01;”他不回答&#xff0c;对柜里说&#xff0c;“来两个fofa。”便排出三个比特币。他们又故意的高声嚷道&#xff0c;“你一定又在电报群…...

P2512糖果传递 P4447分组 P1080国王游戏 P4053建筑抢修

P2512 [HAOI2008] 糖果传递 题目描述 有 n n n 个小朋友坐成一圈&#xff0c;每人有 a i a_i ai​ 个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为 1 1 1。 输入格式 小朋友个数 n n n&#xff0c;下面 n n n 行 a i a_i ai​。 输出格式 求使所…...

SpringMVC(七)数据校验+VO++脱敏

目录 一 基础原理 1 先将数据校验的依赖导入 2 在JavaBean中编写校验注解 3 使用Valid告诉SpringMVC进行校验&#xff08;校验不通过&#xff0c;方法通知执行&#xff09; 4 在Valid参数后面加上一个BindingResult参数&#xff0c;获取校验结果。 二 改进方案 1 没写全…...

使用OpenResty(基于Nginx和Lua)优化Web服务性能

引言 1.1 OpenResty简介 OpenResty 是一个基于 Nginx 和 Lua 的高性能 Web 应用平台。它通过将 Lua 脚本嵌入到 Nginx 中,提供了强大的动态处理能力,适用于构建高性能的 Web 服务、API 网关、动态内容生成等场景。 1.2 Nginx与Lua结合的优势 高性能:Nginx 本身就是一个高…...

32、构造函数

1、用构造函数反复创建多个相同结果的对象 问题 如果想反复创建多个相同结构&#xff0c;但是内容不同的对象时&#xff0c;用{}创建会代码重复&#xff0c;及其不便于维护&#xff01; 解决 今后只要想反复创建同一类型的多个相同结构不同内容的对象时&#xff0c;都用构造函…...

蓝桥与力扣刷题(蓝桥 星期计算)

题目&#xff1a;已知今天是星期六&#xff0c;请问 20^22 天后是星期几? 注意用数字 1 到 7 表示星期一到星期日。 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 解题思路&#xff0b;代码&#xff1a; 代码&#xff1…...

【leetcode hot 100 230】二叉搜索树中第K小的元素

解法一&#xff1a;从小到大输出到list中&#xff0c;取list[k-1]就是第k小的元素 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val;…...