STM32学习(十)
I2C模块内部结构
I2C(Inter-Integrated Circuit)模块是一种由Philips公司开发的二线式串行总线协议,用于短距离通信,允许多个设备共享相同的总线。
- 硬件连接简单:I2C通信仅需要两条总线,即SCL(时钟线)和SDA(数据线),大大简化了系统的硬件设计12。
- 支持多设备共享:在I2C总线中,可以挂载多个从设备,每个设备都有一个唯一的地址,主设备通过广播地址的方式与从设备进行通信25。
- 传输速率灵活:I2C总线传输模式具有向下兼容性,传输速率在标准模式下可达100kbps,快速模式下可达400kbps,高速模式下更是可达3.4Mbps34。
引脚初始化
引脚映射表
引脚实现代码
void My_I2C_Init(){
//对I2C进行重映射RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_PinRemapConfig(GPIO_Remap_I2C1,ENABLE);
//对PB8和PB9进行初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(GPIOB,&GPIO_InitStruct)
}
连接电路
波特率
I2C的波特率指的是I2C总线上的数据传输速率,它可以根据不同的模式达到不同的速率。具体来说:
- 在标准模式下,I2C的波特率为100kHz12。
- 在快速模式下,I2C的波特率可以达到400kHz12。
- 还有一些更高速的模式,如快速模式+,波特率可以达到1MHz1。
I2C总线中的波特率由主机控制,主机通过产生SCL(时钟线)信号来分配给所有从机,因此主机可以通过控制时钟信号频率来调节波特率,即控制通信速度。这种灵活性使得I2C总线能够适应不同的通信需求和应用场景。
占空比
在I2C总线通信中,占空比是指数据线(SDA)上的高电平持续时间与整个时钟周期(由时钟线SCL控制)的比例。这个比例决定了数据传输的稳定性和可靠性12。
在没有明确的情况下我们选择2/1的占空比
初始化I2C模块代码
void My_I2C_Init(){
//对I2C进行重映射RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_PinRemapConfig(GPIO_Remap_I2C1,ENABLE);
//对PB8和PB9进行初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(GPIOB,&GPIO_InitStruct);RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE);//开启I2C的时钟RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1,ENABLE);//施加复位信号RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1,DISABLE);//释放复位信号I2C_InitTypeDef I2C_InitStruct;I2C_InitStruct.I2C_ClockSpeed = 400000;//波特率400kI2C_InitStruct.I2C_Mode = I2C_Mode_I2C;//标准的I2CI2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;//占空比2:1I2C_Init(I2C1,&I2C_InitStruct);I2C_Cmd(I2C1,ENABLE);//闭合I2C1的总开关
}
写数据
数据发送的流程
主设备向从设备发送数据
- 发送起始信号:主设备在SCL(时钟线)为高电平时,将SDA(数据线)从高拉低,产生起始信号,通知所有从设备准备接收数据。
- 发送设备地址:主设备紧接着发送从设备的7位地址,以及一个写信号(通常是低电平),指示这是一个写操作。
- 等待从设备响应:从设备监测到自己的地址后,通过在下一个时钟周期拉低SDA线(发送ACK)来响应,确认它准备好了接收数据。
- 发送数据:主设备开始发送数据,每个字节数据后会跟着等待接收来自从设备的响应(ACK)。从设备在接收到每个字节后,都会发送一个ACK信号来确认。
- 发送停止信号:数据发送完毕后,主设备发送停止信号(SCL高时SDA从低变高),终止传输。
从设备向主设备发送数据
- 主设备初始化读取操作:主设备发送起始信号,然后发送从设备的地址以及一个读取位(通常是高电平),指示这是一个读取操作。
- 从设备响应:从设备监测到自己的地址后,通过发送ACK信号来响应。
- 主设备发送重复开始信号或停止信号:如果主设备计划在同一事务中连续读取多个从设备或进行连续读取,它可以发送重复开始信号来保持总线控制权。如果仅从当前从设备读取且读取操作即将结束,主设备在收到从设备的ACK后可直接发送停止信号。
- 从设备发送数据:在收到读取命令后,从设备开始发送数据。主设备在接收到每个字节后,都会发送一个ACK信号来确认。当接收到最后一个数据字节后,主设备可能会发送一个无效响应(NACK),然后发送停止信号来终止传输。
等待总线空闲
发送数据前要监控总线是否繁忙,从BUSY标志位来判断总线是否空闲,I2C_GetFlagStatus函数用来获取BUSY标志。I2C_GetFlagStatus
函数是一个在 STM32 微控制器的 I2C(Inter-Integrated Circuit)库函数中常用的函数,用于检查 I2C 接口的状态标志。这个函数通常用于轮询(polling)方式,以确定 I2C 总线上的特定事件或状态是否已经发生,例如数据传输完成、接收到起始信号、检测到错误等。
FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG);
I2Cx
:指向要检查的 I2C 接口的指针。例如,对于 STM32F103 系列,可能是I2C1
或I2C2
。I2C_FLAG
:要检查的特定 I2C 状态标志。这些标志在 STM32 的 I2C 库头文件中定义,通常是以I2C_FLAG_
开头的宏。- 返回值是
FlagStatus
枚举类型,它通常有两个可能的值:SET
(标志已设置)和RESET
(标志未设置)。
发送起始位
发送起始位是向START寄存器内写数值1,使用函数I2C_GenerateStart完成。
I2C_GenerateStart
函数是用于生成 I2C 通信起始条件(START condition)的函数。在 I2C 通信中,起始条件是一个重要的信号,用于通知所有连接到总线的设备即将开始数据传输。当 NewState
参数为 ENABLE
时,I2C_GenerateStart
函数会设置相应的寄存器位,从而在 I2C 总线上生成一个起始条件。起始条件是一个在 SCL(时钟线)为高电平时,SDA(数据线)由高电平变为低电平的边沿。这个边沿会被所有连接到总线的 I2C 设备检测到,并通知它们即将开始数据传输。
void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState);
I2Cx
:指向要操作的 I2C 接口的指针。在 STM32 微控制器中,这通常是I2C1
、I2C2
等。NewState
:这是一个FunctionalState
枚举类型的值,用于指定是否生成起始条件。它可以是ENABLE
(生成起始条件)或DISABLE
(不生成起始条件)。
在发送起止位后我们需要确定起止位是否发送完毕,我们通过SB标志来判断。
while(I2C_GetFlagStatus(I2Cx,I2C_FLAG_SB) == RESET);
发送地址
AF标志位是ACK应答标志位,当AF为1时ACK答应失败未收到答应,ADDR寻址成功标志位,当寻址成功值为1,失败值为0。在发送地址前我们需要清理AF标志位的值然后发送地址。
I2C_ClearFlag(I2Cx,I2C_FLAG_AF);//清除AF
I2C_SendData(I2Cx,Addr & 0xfe);//发送地址和RW
在发送的过程中需要持续判断AF和ADDR标识符的状态
while(1){if(I2C_GetFlagStatus(I2Cx,I2C_FLAG_ADDR) == SET){break;}if(I2C_GetFlagStatus(I2Cx,I2C_FLAG_AF) == SET){I2C_GenerateSTOP(I2Cx,ENABLE);return -1;}
}
后续我们继续清除ADDR状态标示符
I2C_ReadRegister(I2Cx,I2C_Register_SR1);
I2C_ReadRegister(I2Cx,I2C_Register_SR2);
发送数据
发送数据过程中我们要持续监控ACK和发送数据寄存器的状态,AF为1标示为响应ACK,停止发送数据,BTF负责监控发送数据寄存器内是否有数据,保证在其空的情况下推送数据进入。
发送停止位
代码
int main(){My_I2C_Init();uint8_t commands[] = {0x00,0x8d,0x14,0xaf,0xa5};My_I2C_SendBytes(I2C1,0x78,commands,5);
}void My_I2C_Init(){
//对I2C进行重映射RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_PinRemapConfig(GPIO_Remap_I2C1,ENABLE);
//对PB8和PB9进行初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(GPIOB,&GPIO_InitStruct);RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);//开启I2C的时钟RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1,ENABLE);//施加复位信号RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1,DISABLE);//释放复位信号I2C_InitTypeDef I2C_InitStruct;I2C_InitStruct.I2C_ClockSpeed = 400000;//波特率400kI2C_InitStruct.I2C_Mode = I2C_Mode_I2C;//标准的I2CI2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;//占空比2:1I2C_Init(I2C1,&I2C_InitStruct);I2C_Cmd(I2C1,ENABLE);//闭合I2C1的总开关
}int My_I2C_SendBytes(I2C_TypeDef *I2Cx,uint8_t Addr,uint8_t *pData,uint16_t Size){//等待总线空闲while(I2C_GetFlagStatus(I2Cx,I2C_FLAG_BUSY) == SET){}//发送起止位I2C_GenerateSTART(I2C1,ENABLE);//确定起止位是否发送完毕 while(I2C_GetFlagStatus(I2Cx,I2C_FLAG_SB) == RESET){}//发送地址//清除AFI2C_ClearFlag(I2Cx,I2C_FLAG_AF);I2C_SendData(I2Cx,Addr & 0xfe);while(1){if(I2C_GetFlagStatus(I2Cx,I2C_FLAG_ADDR) == SET){break;}if(I2C_GetFlagStatus(I2Cx,I2C_FLAG_AF) == SET){I2C_GenerateSTOP(I2Cx,ENABLE);return -1;//寻址失败}}//清除ADDRI2C_ReadRegister(I2Cx,I2C_Register_SR1);I2C_ReadRegister(I2Cx,I2C_Register_SR2);//发送数据 for(uint8_t i = 0;i<Size;i++){while(1){if(I2C_GetFlagStatus(I2Cx,I2C_FLAG_AF) == SET){I2C_GenerateSTOP(I2Cx,ENABLE);return -2;}if(I2C_GetFlagStatus(I2Cx,I2C_FLAG_TXE) == SET){break;}}I2C_SendData(I2Cx,pData[i]);}while(1){if(I2C_GetFlagStatus(I2Cx,I2C_FLAG_AF) == SET){I2C_GenerateSTOP(I2Cx,ENABLE);return -2;}if(I2C_GetFlagStatus(I2Cx,I2C_FLAG_BTF) == SET){break;}}//发送停止位I2C_GenerateSTOP(I2Cx,ENABLE);return 0;
}
相关文章:
STM32学习(十)
I2C模块内部结构 I2C(Inter-Integrated Circuit)模块是一种由Philips公司开发的二线式串行总线协议,用于短距离通信,允许多个设备共享相同的总线。 硬件连接简单:I2C通信仅需要两条总线,即SCL&…...
何为“正则表达式”!
详细解释: ^:在JSON的正则表达式中,^表示匹配输入字符串的开始位置。这意味着正则表达式将从字符串的开头开始进行匹配,确保整个字符串符合后续的模式要求。例如,对于字符串"3.14",正则表达式会…...
创建Java项目,并添加MyBatis包和驱动包
一 : Mybatis和jsp使用上,只有Dao层有区别 Mybatis 使用方法: 测试类的7步骤 1.读取核心配置文件 2.构建sql会话工厂 3.开启sql会话 4.获取mapper接口 5.调用相对应的增删改查方法 6.打印 7.关闭回话 /*** 用户列表* throws IOException*/Testpublic void roleList() throws IO…...
目标检测文献阅读-DETR:使用Transformer进行端到端目标检测
目录 摘要 Abstract 1 引言 2 DETR结构 2.1 Backbone 2.2 Encoder 2.3 Decoder 2.4 FFN 3 目标检测集合预测损失 3.1 二分图匹配损失 3.2 损失函数 总结 摘要 本周阅读的论文题目是《End-to-End Object Detection with Transformers》(使用Transformer进行端到端目…...
C#里对已经存在的文件进行压缩生成ZIP文件
先要对目录下所有文件获取到: private List<string> GetXDFiles(string dirPath){//获取目录中的所有文件string suffix = "*.txt"; // 要查找的文件后缀var files = Directory.GetFiles(dirPath, suffix, SearchOption.TopDirectoryOnly).ToList();return fi…...
单片机软件定时器V4.0
单片机软件定时器V4.0 用于单片机定时执行任务等,比如LED GPIO等定时控制,内置前后台工作模式 头文件有使用例子 #ifndef __SORFTIME_APP_H #define __SORFTIME_APP_H#ifdef __cplusplus extern "C" { #endif#include <stdint.h>// #…...
【嵌入式硬件】嵌入式显示屏接口
数字显示串行接口(Digital Display Serial Interface) SPI 不过多赘述。 I2C-bus interface 不过多赘述 MIPI DSI MIPI (Mobile Industry Processor Interface) Alliance, DSI (Display Serial Interface) 一般用于移动设备,下面是接口…...
vuedraggable 选项介绍
vuedraggable 是基于 SortableJS 的 Vue 组件,提供了丰富的选项来定制拖拽行为。以下是 vuedraggable 常用的选项和它们的详细说明: 常用选项介绍 group 配置拖拽分组。多个列表可以共享同一个分组,允许它们之间的项目互相拖拽。 group: { na…...
OpenAI CEO 奥特曼发长文《反思》
OpenAI CEO 奥特曼发长文《反思》 --- 引言:从 ChatGPT 到 AGI 的探索 ChatGPT 诞生仅一个多月,如今我们已经过渡到可以进行复杂推理的下一代模型。新年让人们陷入反思,我想分享一些个人想法,谈谈它迄今为止的发展,…...
Appium(一)--- 环境搭建
一、Android自动化环境搭建 1、JDK 必须1.8及以上(1) 安装:默认安装(2) 环境变量配置新建JAVA_HOME:安装路径新建CLASSPath%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar在path中增加:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(3) 验证…...
如何查看服务器上的MySQL/Redis等系统服务状态和列表
如果呢你知道系统服务名称,要看状态很简单: systemctl status server-name 比如 systemctl status nginxsystemctl status redis # 等 这是一个nginx的示例: 那问题是 当你不知道服务名称时该怎么办。举个例子,比如mysql在启动…...
多模态论文笔记——U-ViT
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍U-ViT的模型架构和实验细节,虽然没有后续的DiT在AIGC领域火爆,但为后来的研究奠定了基础,但其开创性的探索值得学习…...
08-1_队列的理论讲解
08-1_队列的理论讲解 队列概念理解 队列就是一个传送带,就是一个流水线 工人放入的数据, 放在传送带上,送给消费者, 消费者第一次拿到的数据,就是工人第一次放上的数据(类比队列,先进先出) freertos队列应用思考 队列对于消费者(取数据): (1)当队列没有数据, 消费者需要进入…...
HTML基础入门——简单网页页面
目录 一,网上转账电子账单 编辑 1,所利用到的标签 2,代码编写 3,运行结果 二,李白诗词 1,所用到的标签 2,照片的编辑 3,代码编写 4,运行结果 一,网…...
Proteus-8086调试汇编格式的一点心得
这阵子开始做汇编的微机实验(微机原理与接口技术题解及实验指导,吴宁版本13章),中间出了挺多问题,解决后记录下。 先上电路图 用子电路来仿真发现仿真的时候子电路这块根本没有高低电平输出,只好把子电路拿…...
Python入门教程 —— 多任务
1.线程 1.1.线程安全问题 线程访问全局变量 import threading g_num = 0 def test(n):global g_numfor x in range(n):g_num += xg_num -= xprint(g_num)if __name__ == __main__:t1 = threading.Thread(target=test, args=(10,))t2 = threading.Thread(target=test, args=(…...
【笔记】算法记录
1、求一个数的素因子(试除法) // 获取一个数的所有素因子 set<int> getPrimeFactors(int num) {set<int> primeFactors;for (int i 2; i * i < num; i) {while (num % i 0) {primeFactors.insert(i);num / i;}}if (num > 1) {prime…...
2024年1月4日蜻蜓hr人才招聘系统v1.1.7更新-正式版发布-客户端源代码开源发布供学习-本产品完成上线正式版-修复多个bug-优雅草果果|小无
2024年1月4日蜻蜓hr人才招聘系统v1.1.7更新-正式版发布-客户端源代码开源发布供学习-本产品完成上线正式版-修复多个bug-优雅草果果|小无 前端代码开源库 关于开源说明:企业服务-招聘信息管理系统-前端uniapp-系统前端开放源代码仅供学习-优雅草科技-目前优雅草科…...
【网络】计算机网络的分类 局域网 (LAN) 广域网 (WAN) 城域网 (MAN)个域网(PAN)
局域网是通过路由器接入广域网的 分布范围 局域网Local Area Network:小范围覆盖,速度高,延迟低(办公室,家庭,校园,网络) 广域网Wide Area Network 大范围覆盖,速度相对低,延迟高…...
DeepSeek:性能强劲的开源模型
deepseek 全新系列模型 DeepSeek-V3 首个版本上线并同步开源。登录官网 chat.deepseek.com 即可与最新版 V3 模型对话。 性能对齐海外领军闭源模型 DeepSeek-V3 为自研 MoE 模型,671B 参数,激活 37B,在 14.8T token 上进行了预训练。 论…...
MySql 通过 LOAD DATA INFILE 导入大量数据
背景:要在本地Mysql导入几十万-百万条数据非常耗时,从网上找到通过load data infile 方式可以快速导入大量数据,就动手尝试了。结果就是不太适合复杂的格式数据导入,比如字段多,数据格式多等,但对于简单的表…...
Linux系统中解决端口占用问题
在日常的 Linux 系统管理和开发过程中,端口占用是一个常见且令人头疼的问题。无论是部署新服务、调试应用程序,还是进行系统维护,遇到端口被占用都可能导致服务无法正常启动或运行。本文将详细介绍在 Linux 系统中如何识别和解决端口占用问题…...
两种方式实现Kepware与PLC之间的心跳检测
两种方式实现Kepware与PLC之间的心跳检测 实现Kepware与PLC之间的心跳检测1.OPCUA 外挂程序2.Kepware Advanced Tag 实现Kepware与PLC之间的心跳检测 1.OPCUA 外挂程序 这是通过上位程序来触发心跳的一种机制,在C#中,可以利用OPC UAOPCAutodll的方式…...
使用DockerCompose部署服务
由于格式或图片解析问题,为了更好的阅读体验,可前往 阅读原文 以前我们总是用命令管理每个容器的启动、停止等等,若有多个容器时可能还存在启动优先级的问题,那就要等到指定的容器启动后再去启动另一个容器,对于整体的…...
第P5周-Pytorch实现运动鞋品牌识别
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 具体实现 (一)环境 语言环境:Python 3.10 编 译 器: PyCharm 框 架: Pytorch (二)具体步骤 时间…...
react-quill 富文本组件编写和应用
index.tsx文件 import React, { useRef, useState } from react; import { Modal, Button } from antd; import RichEditor from ./RichEditor;const AnchorTouchHistory: React.FC () > {const editorRef useRef<any>(null);const [isModalVisible, setIsModalVis…...
因泰立科技激光车检器,高速公路的精准流量统计专家
高速公路自由流门架激光车检器,专为解决高速公路交通管理中的各种挑战而设计。该产品采用先进的激光测量技术,能够对动态通过的车辆进行高速动态扫描,通过测量物体表面点的反射距离,迅速换算成三维空间坐标,实现对车辆…...
windows中,git bash 使用conda命令
1、首先在Anaconda的安装路径如/Anaconda3/Scripts下,打开git bash窗口,然后输入下面的命令。 ./conda init bash 运行之后,会在用户目录下面生成.bash_profile文件,文件内容如下: # >>> conda initialize…...
《繁星路》V1.8.3(Build16632266)官方中文学习版
《繁星路》官方中文版https://pan.xunlei.com/s/VODae2_2Z3QyMF02I5y321uHA1?pwdqgsh# 作为一款星际模拟游戏,完美融合了硬科幻元素与基地建设玩法,体验改造行星的恢弘与壮阔。化身人工意识AMI,遵照基本指示推进火星改造的各项工作…...
vscode 无法使用npm, cmd命令行窗口可以正常执行
解决方法: 执行命令获得命令的位置 get-command npm 得到如下 然后删除或者修改 npm.ps1文件 让其不能使用就行。然后重启vscode即可。 pnpm 同理即可 另外加速源 国内镜像源(淘宝): npm config set registry https://regist…...
html + css 顶部滚动通知栏示例
前言 在现代网页设计中,一个吸引人的顶部滚动通知栏不仅能够有效传达重要信息,还能提升用户体验。通过使用HTML和CSS,我们可以创建既美观又功能强大的组件,这些组件可以在不影响网站整体性能的情况下提供实时更新或紧急通知。 本…...
阿里mod_asr3.0集成webrtc静音算法
alibabacloud-nls-cpp-sdk-master 先到阿里官网下载nls库的源代码,编译生成对应的库文件和头文件。 我编译的放到了以下目录。 /home/jp/2025/alibabacloud-nls-cpp-sdk-master/build/install/NlsSdk3.X_LINUX/include/ /home/jp/2025/alibabacloud-nls-cpp-sdk-…...
【MySQL】表的基本查询
文章目录 1. 插入 insert1.1 单行插入2.2 多行插入2.3 插入 否则更新2.4 替换 2. 查找 select2.1 select 列2.2 where 条件2.3 order by 排序2.4 筛选分页结果 3. 更新 update4. 删除 delete5. 截断 truncate6. 插入查询结果7. 聚合函数8. group by子句 我们经常说数据库就是CR…...
2025-01-07日SSH钓鱼日志
今天发现了挖矿程序部署脚本,可针对性排查。 时间来源类型详情20:16:08146.190.50.206:36694CHANNEL_REQUEST通道:1,类型:exec(command:uname -a)20:16:08146.190.50.206:36694OPEN_CHANNEL通道:1,类型&am…...
C++语言的计算机基础
C语言的计算机基础 引言 C是一种通用的编程语言,由Bjarne Stroustrup于1979年开发。它在C语言的基础上增加了面向对象的特性,使得程序设计变得更加灵活和高效。C广泛应用于系统软件、游戏开发、实时仿真等领域。本文将深入探讨C语言的基础知识…...
怎么把word试题转成excel?
在教育行业、学校管理以及在线学习平台中,试题库的高效管理是一项核心任务。许多教育工作者和系统开发人员常常面临将 Word 中的试题批量导入 Excel 的需求。本文将详细介绍如何快速将试题从 Word 转换为 Excel,帮助您轻松解决繁琐的数据整理问题&#x…...
在线商城系统设计与开发-代码(源码+数据库+文档)
亲测完美运行带论文:文末获取源码 文章目录 项目简介(论文摘要)运行视频包含的文件列表(含论文)前端运行截图后端运行截图 项目简介(论文摘要) 现代经济快节奏发展以及不断完善升级的信息化技术…...
HCIE-day10-ISIS
ISIS ISIS(Intermediate System-to-Intermediate System)中间系统到中间系统,属于IGP(内部网关协议);是一种链路状态协议,使用最短路径优先SPF算法进行路由计算,与ospf协议有很多相…...
解决SSH连接时遇到的“远程主机身份验证已更改 (WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!)”警告
文章目录 引言警告信息解读造成原因解决方案 引言 在使用SSH协议进行远程服务器管理的过程中,可能会遇到这样的情况:当尝试通过SSH连接到某个远程主机时,终端突然弹出一条警告信息,提示“远程主机身份验证已更改”。 警告信息解…...
C语言的循环实现
C语言的循环实现 C语言是一种功能强大且广泛使用的编程语言,其语法简单易懂,适用于系统软件、嵌入式系统和高性能应用程序等多个领域。在C语言中,控制程序执行流程的基本结构之一就是循环。循环允许程序在满足某个条件的情况下重复执行一段代…...
如何使用vue引入three.js
在 Vue.js 项目中引入和使用 Three.js 是一个常见的需求,Three.js 是一个用于在浏览器中创建和显示动画 3D 计算机图形的 JavaScript 库。以下是一个基本的示例,展示如何在 Vue 项目中引入和使用 Three.js。 1. 创建 Vue 项目 如果你还没有一个 Vue 项…...
【C++】深入理解迭代器(Iterator)
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯什么是迭代器?迭代器与指针的比较 💯std::string 中的迭代器示例代码与图示分析运行结果:图示说明: 小提示 💯正…...
微信小程序实现长按录音,点击播放等功能,CSS实现语音录制动画效果
有一个需求需要在微信小程序上实现一个长按时进行语音录制,录制时间最大为60秒,录制完成后,可点击播放,播放时再次点击停止播放,可以反复录制,新录制的语音把之前的语音覆盖掉,也可以主动长按删…...
QPS和TPS 的区别是什么?QPS 大了会有什么问题,怎么解决?
QPS 和 TPS 的区别是什么?QPS 大了会有什么问题,怎么解决? QPS(Queries Per Second)和 TPS(Transactions Per Second)都是衡量系统性能的重要指标,尤其是在 Web 服务、数据库和分布…...
小程序开发-页面事件之上拉触底实战案例
🎥 作者简介: CSDN\阿里云\腾讯云\华为云开发社区优质创作者,专注分享大数据、Python、数据库、人工智能等领域的优质内容 🌸个人主页: 长风清留杨的博客 🍃形式准则: 无论成就大小,…...
[读书日志]从零开始学习Chisel 第六篇:Scala面向对象编程——特质(敏捷硬件开发语言Chisel与数字系统设计)
3.4特质 3.4.1什么是特质 特质使用trait开头,它与单例对象很像,两者都不能有输入参数,但单例对象是具体的,特质是抽象的。两者都不能用new实例化,类,单例对象,特质三者内部都可以包含字段和方…...
导航技术的分类
导航技术可以根据不同的分类标准进行划分,以下是从不同角度对导航技术的分类: 一、按导航信息获取原理分类 无线电导航:利用无线电波的传播特性来测定运动体的位置、速度等导航参数。常见的无线电导航系统包括罗兰-C、奥米加、台卡等。卫星…...
学习标准库atomic_base.h中typedef enum memory_order
1、背景 在多线程编程中,特别是在使用原子操作时,内存顺序(Memory Order)是一个关键的概念。在C11及其之后的标准中,memory_order 枚举类型(typedef enum memory_order)用于控制原子操作的内存…...
git push -f 指定分支
要将本地代码推送到指定的远程分支,你可以使用以下步骤和命令: 确认远程仓库: 确保你的本地仓库已经与远程仓库关联。你可以使用以下命令查看当前的远程仓库状态: git remote -v查看本地分支: 使用命令查看当前存在的本…...
ADO.NET知识总结3---SqlCommand命令对象
目录 4.1 SqlCommand对象介绍 4.2 SqlCommand创建 4.3 Command执行方法 4.1 SqlCommand对象介绍 SqlCommand:Ado.Net中执行数据库命令的对象。 它对SQLServer数据库执行一个T-SQL语句或存储过程。 重要属性: Connection: SqlCommand对象使用的SqlConnection对…...