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

STM32 定时器主从模式配置解析

STM32 定时器主从模式配置解析

下面这两行代码是配置STM32定时器主从模式的关键设置

代码功能解析

TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);  // 选择从模式输出的触发源
TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);  // 选择从模式

1. TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2)

作用:设置定时器TIM3的触发输入源

参数说明

  • TIM3:目标定时器
  • TIM_TS_TI2FP2:选择定时器输入2的滤波后信号(TI2FP2)作为触发源

可选触发源

  • TIM_TS_ITR0~TIM_TS_ITR3:内部触发(其他定时器)
  • TIM_TS_TI1F_ED:TI1的边沿检测器
  • TIM_TS_TI1FP1:滤波后的TI1输入
  • TIM_TS_TI2FP2:滤波后的TI2输入
  • TIM_TS_ETRF:外部触发输入

2. TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset)

作用:设置定时器TIM3的从模式

参数说明

  • TIM3:目标定时器
  • TIM_SlaveMode_Reset:选择复位模式

可选从模式

  • TIM_SlaveMode_Reset:触发信号上升沿时重新初始化计数器
  • TIM_SlaveMode_Gated:触发信号高电平时计数
  • TIM_SlaveMode_Trigger:触发信号作为时钟
  • TIM_SlaveMode_External1:外部时钟模式1

典型应用场景

这种配置通常用于:

  1. 频率测量:主定时器测量信号,从定时器(TIM3)被配置为在输入信号边沿复位
  2. 脉冲计数:精确测量脉冲间隔
  3. 同步多个定时器

完整配置示例

以下是使用TIM3作为从定时器的完整配置示例:

void TIM3_Slave_Configuration(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_ICInitTypeDef TIM_ICInitStructure;// 使能TIM3时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);// 时基配置TIM_TimeBaseStructure.TIM_Period = 0xFFFF;TIM_TimeBaseStructure.TIM_Prescaler = 72-1; // 1MHz计数频率TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);// 输入捕获配置(使用通道2)TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;TIM_ICInitStructure.TIM_ICFilter = 0x0;TIM_ICInit(TIM3, &TIM_ICInitStructure);// 关键配置部分TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);  // 选择TI2作为触发源TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);  // 复位模式// 使能定时器TIM_Cmd(TIM3, ENABLE);
}

工作原理

在这种配置下:

  1. 当TIM3的通道2(TI2)检测到上升沿时
  2. 定时器计数器会被自动复位(归零)
  3. 同时可以产生更新事件中断
  4. 主程序可以通过读取计数器值来计算两个上升沿之间的时间间隔

注意事项

  1. 引脚映射:确保TIM3_CH2正确映射到目标GPIO引脚
  2. 时钟配置:正确配置定时器时钟频率
  3. 模式限制:不是所有定时器都支持全部从模式,需参考参考手册
  4. 中断使用:如需更精确测量,可以配合更新中断使用

这种配置方式特别适合需要精确测量外部信号周期或频率的应用场景。
是的,当使用 TIM_SlaveMode_Reset 从模式时,定时器会在每次触发信号(如上升沿)到来时自动复位计数器,因此不需要手动计算两次捕获值之差(即不需要 capture_value = current_capture - last_capture)。

为什么不需要相减?

TIM_SlaveMode_Reset 模式下:

  1. 每次触发信号(如上升沿)到来时,计数器会自动归零(CNT = 0)
  2. 计数器会重新开始递增,直到下一个触发信号到来。
  3. 读取的 TIM_GetCaptureX(TIMx) 值就是两次触发之间的计数值(即一个完整的周期)。

因此,直接读取捕获寄存器的值 TIM_GetCapture1(TIM3) 就是信号的周期(单位:定时器计数周期),无需像普通输入捕获模式那样计算差值。


示例代码(适用于 TIM_SlaveMode_Reset 模式)

#include "stm32f10x.h"float Calculate_Period(void)
{uint32_t capture_value = TIM_GetCapture1(TIM3);  // 直接读取当前计数值if (capture_value > 0){// 计算周期(单位:秒)float period = (float)capture_value / 1000000.0f;  // 假设定时器时钟=1MHz(72MHz/72)return period;}return 0;
}int main(void)
{// 初始化TIM3为从模式(复位模式)TIM3_Slave_Configuration();  // 参考前面的配置while (1){float period = Calculate_Period();if (period > 0){// 计算频率(Hz)float frequency = 1.0f / period;// 可以通过串口打印或处理频率值// printf("Period: %.6f s, Frequency: %.2f Hz\n", period, frequency);}}
}

对比普通输入捕获 vs. 从模式复位

方式是否需要计算差值适用场景优点缺点
普通输入捕获需要 (capture_value = current - last)通用频率测量灵活,适用于各种信号需要处理计数器溢出
从模式复位 (TIM_SlaveMode_Reset)不需要(自动归零)精确周期测量无需手动计算,避免溢出问题仅适用于周期性信号

总结

  1. TIM_SlaveMode_Reset 模式下,定时器会在每次触发时自动复位,因此 TIM_GetCaptureX() 直接返回周期值,无需计算差值。
  2. 适用于精确测量周期或频率,尤其适合 PWM、方波等周期性信号。
  3. 计算频率时,只需 frequency = 1 / period,其中 period = capture_value / timer_clock

这种模式比普通输入捕获更简单,特别适合需要高精度测量的应用(如编码器、PWM输入等)。

注意:

由于从模式只能选择一个触发源,多通道同时测量需要采用其他方法,如:

分时复用

使用多个定时器

采用普通输入捕获模式

STM32定时器从模式(Slave Mode)详解

定时器从模式是STM32定时器系统中一个强大的功能,它允许一个定时器(从定时器)受另一个定时器(主定时器)或外部信号控制。理解从模式对于实现精确的定时、同步和测量非常重要。

从模式基本概念

1. 主从定时器关系

  • 主定时器(Master):产生触发信号的定时器
  • 从定时器(Slave):接收触发信号并作出响应的定时器

2. 从模式核心思想

从定时器可以配置为在特定事件(如另一个定时器的更新事件、外部信号边沿等)发生时自动执行预定义的操作,如复位计数器、启动/停止计数等。

从模式的6种工作方式

STM32提供了多种从模式,以下是主要模式:

从模式功能描述典型应用
复位模式(SlaveMode_Reset)触发信号使计数器复位频率测量、脉冲计数
门控模式(SlaveMode_Gated)触发信号高电平期间计数脉冲宽度测量
触发模式(SlaveMode_Trigger)触发信号作为计数器时钟外部时钟同步
外部时钟模式1(SlaveMode_External1)外部引脚上升沿计数编码器接口
组合复位+触发复位后使用触发信号计数复杂定时序列
编码器模式专用编码器接口模式旋转编码器

从模式配置关键步骤

1. 选择触发源(Trigger Source)

TIM_SelectInputTrigger(TIMx, TIM_TS_XXX);

常见触发源:

  • TIM_TS_ITRx:内部触发(其他定时器)
  • TIM_TS_TI1F_ED:TI1边沿检测
  • TIM_TS_TI1FP1:滤波后的TI1输入
  • TIM_TS_TI2FP2:滤波后的TI2输入
  • TIM_TS_ETRF:外部触发输入

2. 设置从模式

TIM_SelectSlaveMode(TIMx, TIM_SlaveMode_XXX);

3. 配置滤波器(可选)

TIM_ICInitStructure.TIM_ICFilter = 0x0F; // 最大滤波

典型应用实例

实例1:精确频率测量(复位模式)

// 配置TIM3为从模式,使用TI2作为触发源
void Config_FreqMeasurement(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;// 时基配置TIM_TimeBaseStructure.TIM_Period = 0xFFFF;TIM_TimeBaseStructure.TIM_Prescaler = 72-1; // 1MHzTIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);// 选择TI2作为触发源TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);// 设置为复位模式TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);TIM_Cmd(TIM3, ENABLE);
}

工作原理:每次TI2出现上升沿时,计数器复位,读取的计数值即为信号周期。

实例2:主从定时器同步

// TIM2作为主,TIM3作为从
void Config_MasterSlaveSync(void)
{// 主定时器TIM2配置TIM_TimeBaseInit(TIM2, ...);// 配置TIM2的更新事件作为触发输出TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);// 从定时器TIM3配置TIM_TimeBaseInit(TIM3, ...);// 选择ITR1作为触发源(TIM2→TIM3)TIM_SelectInputTrigger(TIM3, TIM_TS_ITR1);// 设置为触发模式TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Trigger);
}

效果:TIM3的计数与TIM2同步。

从模式高级应用技巧

  1. 级联定时器

    • 多个定时器级联实现更长定时
    • 示例:TIM1触发TIM2,TIM2触发TIM3
  2. PWM输入模式

    • 实际上是两个从模式的组合(复位+触发)
    • 可同时测量PWM周期和占空比
  3. 编码器接口

    • 专用从模式配置
    • 可自动处理正交编码信号
  4. 定时器事件同步

    • 多个定时器的启动/停止同步
    • 确保多个定时器完全同步运行

常见问题解答

Q1: 一个定时器可以同时使用多个从模式吗?
A: 不可以,一个定时器一次只能选择一种从模式,但可以通过巧妙配置实现复合功能。

Q2: 从模式会影响PWM输出吗?
A: 会,某些从模式(如复位模式)会影响计数器运行,从而影响PWM生成。

Q3: 如何选择最适合的从模式?
A: 根据需求:

  • 频率测量 → 复位模式
  • 脉冲宽度测量 → 门控模式
  • 外部时钟计数 → 外部时钟模式
  • 定时器同步 → 触发模式

Q4: 从模式需要中断吗?
A: 不一定,可以轮询状态寄存器,但中断能提高实时性。

理解定时器从模式需要结合实践,建议通过实际项目加深理解。您是否有特定的应用场景需要实现?我可以提供更具体的配置建议。

STM32定时器从模式(Slave Mode)详解

定时器从模式是STM32定时器系统中一个强大而灵活的功能,它允许定时器之间或定时器与外部信号之间建立主从关系,从而实现精确的定时控制和信号测量。下面我将全面解析定时器从模式的工作原理和应用。

从模式基本概念

定时器从模式是指一个定时器(从定时器)可以受另一个定时器(主定时器)或外部信号控制的工作模式。在这种模式下,从定时器会根据配置的触发源和从模式类型,在特定事件发生时自动执行预定义的操作。

关键特点:

  1. 触发源多样性:可以选择内部定时器触发、外部引脚信号或特定定时器事件作为触发源
  2. 自动响应:从定时器在触发事件发生时自动执行操作,无需软件干预
  3. 精确同步:可以实现多个定时器之间的精确同步
  4. 减少中断:通过硬件自动处理,减少软件中断负担

从模式的主要类型

STM32提供了多种从模式工作方式,每种方式适用于不同的应用场景:

1. 复位模式(SlaveMode_Reset)

  • 功能:触发信号的上升沿重新初始化计数器(CNT清零)并产生更新事件
  • 典型应用:频率测量、脉冲周期测量
  • 特点:每次触发边沿自动复位计数器,可直接读取CNT值得到周期

2. 门控模式(SlaveMode_Gated)

  • 功能:触发信号高电平期间使能计数器
  • 典型应用:脉冲宽度测量
  • 特点:可测量输入信号的高电平持续时间

3. 触发模式(SlaveMode_Trigger)

  • 功能:触发信号作为计数器时钟
  • 典型应用:外部时钟同步
  • 特点:允许外部信号控制计数节奏

4. 外部时钟模式1(SlaveMode_External1)

  • 功能:选中的触发信号(TRGI)的上升沿时钟计数器
  • 典型应用:编码器接口、外部事件计数
  • 特点:将外部信号作为计数时钟源

从模式配置关键步骤

配置定时器从模式通常需要以下步骤:

  1. 选择触发源

    TIM_SelectInputTrigger(TIMx, TIM_TS_XXX);
    

    常见触发源包括:

    • TIM_TS_ITRx:内部触发(其他定时器)
    • TIM_TS_TI1F_ED:TI1边沿检测
    • TIM_TS_TI1FP1:滤波后的TI1输入
    • TIM_TS_TI2FP2:滤波后的TI2输入
    • TIM_TS_ETRF:外部触发输入
  2. 设置从模式

    TIM_SelectSlaveMode(TIMx, TIM_SlaveMode_XXX);
    
  3. 使能主从模式(如果需要定时器作为主设备):

    TIM_SelectMasterSlaveMode(TIMx, TIM_MasterSlaveMode_Enable);
    

从模式典型应用实例

实例1:精确频率测量(复位模式)

void Config_FreqMeasurement(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;// 时基配置TIM_TimeBaseStructure.TIM_Period = 0xFFFF;TIM_TimeBaseStructure.TIM_Prescaler = 72-1; // 1MHz计数频率TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);// 选择TI2作为触发源TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);// 设置为复位模式TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);TIM_Cmd(TIM3, ENABLE);
}

工作原理:每次TI2出现上升沿时,计数器自动复位,读取的CNT值即为信号周期。

实例2:定时器级联(扩展计数器位数)

// TIM2作为主,TIM4作为从,组成32位计数器
void Config_TimerCascade(void)
{// 主定时器TIM2配置TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);// 从定时器TIM4配置TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_External1);TIM_SelectInputTrigger(TIM4, TIM_TS_ITR2);
}

效果:TIM2每溢出一次,TIM4计数加1,实现32位计数能力。

从模式高级应用技巧

  1. PWM输入模式

    • 使用两个从模式通道(复位+触发)同时测量PWM周期和占空比
    • 一个通道测量周期,另一个通道测量高电平时间
  2. 编码器接口模式

    • 专用从模式配置
    • 可自动处理正交编码信号的正反向计数
  3. 定时器事件同步

    • 多个定时器的启动/停止同步
    • 确保多个定时器完全同步运行
  4. 复杂定时序列生成

    • 主定时器控制从定时器的启动、停止和复位
    • 实现精确的定时事件序列

从模式使用注意事项

  1. 触发源选择

    • 确保选择的触发源与实际信号来源一致
    • 注意不同定时器之间的内部触发连接关系
  2. GPIO配置

    • 外部触发信号对应的GPIO需配置为复用功能
    • 注意引脚重映射情况
  3. 中断使用

    • 从模式通常不需要中断,但可以配合中断实现更复杂功能
    • 中断优先级需合理设置
  4. 定时器资源限制

    • 不是所有定时器都支持全部从模式
    • 高级定时器(TIM1/TIM8)功能更丰富
  5. 性能考虑

    • 高频信号测量时,优先使用从模式而非中断
    • 考虑使用DMA减少CPU干预

常见问题解答

Q1: 一个定时器可以同时使用多种从模式吗?
A: 不可以,一个定时器一次只能配置一种从模式,但可以通过通道组合实现复合功能(如PWM输入模式)。

Q2: 从模式测量频率的范围是多少?
A: 取决于定时器时钟频率,理论上最高可测频率为定时器时钟频率的1/2。例如1MHz时钟最高可测500kHz。

Q3: 从模式会影响PWM输出吗?
A: 会,某些从模式(如复位模式)会影响计数器运行,从而影响PWM生成。

Q4: 如何选择最适合的从模式?
A: 根据需求选择:

  • 频率测量 → 复位模式
  • 脉冲宽度测量 → 门控模式
  • 外部时钟计数 → 外部时钟模式
  • 定时器同步 → 触发模式

定时器从模式是STM32定时器系统中的高级功能,通过合理配置可以实现精确的信号测量和定时控制。理解其工作原理和配置方法对于开发复杂的定时应用至关重要。实际应用中,建议结合具体需求选择合适的从模式,并通过实验验证配置效果。

相关文章:

STM32 定时器主从模式配置解析

STM32 定时器主从模式配置解析 下面这两行代码是配置STM32定时器主从模式的关键设置 代码功能解析 TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2); // 选择从模式输出的触发源 TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); // 选择从模式1. TIM_SelectInputTrigger(T…...

Leetcode76覆盖最小子串

覆盖最小子串 代码来自b站左程云 class Solution {public String minWindow(String str, String tar) {char[] s str.toCharArray();char[] t tar.toCharArray();int[] cnt new int[256];for (char cha : t) { cnt[cha]--;}int len Integer.MAX_VALUE;int debt t.length…...

Perl语言深度考查:从文本处理到正则表达式的全面掌握

阅读原文 前言:为什么Perl依然值得学习? "这个脚本用Perl写只需要5分钟!"——在当今Python大行其道的时代,你依然能在不少企业的运维部门听到这样的对话。Perl作为一门有着30多年历史的语言,凭借其强大的文…...

idea中Lombok失效的解决方案

Lombok 是一个 Java 库,旨在通过注解简化 Java 代码的编写,减少样板代码,提高开发效率。它通过自动生成常见的代码(如 getter、setter、构造函数等)来减少开发者的手动编码工作。 一般Lombok失效有四步排查方案&#…...

【LeetCode 热题 100】动态规划 系列

📁 70. 爬楼梯 状态标识:爬到第i层楼梯时,有多少种方法。 状态转移方程:dp[i] dp[i-1] dp[i-2],表示从走一步和走两步的方式。 初始化:dp[1] 1 , dp[2] 2。 返回值:dp[n],即走到…...

刷leetcodehot100返航版--双指针5/16

for (int i 0, j 0; i < n; i ) { while (j < i && check(i, j)) j ; // 具体问题的逻辑 } 常见问题分类&#xff1a; (1) 对于一个序列&#xff0c;用两个指针维护一段区间 (2) 对于两个序列&#xff0c;维护某种次序&#xff0c;比如归并排序中…...

DAY24元组和OS模块

元组 元组的特点&#xff1a; 有序&#xff0c;可以重复&#xff0c;这一点和列表一样元组中的元素不能修改&#xff0c;这一点非常重要&#xff0c;深度学习场景中很多参数、形状定义好了确保后续不能被修改。 很多流行的 ML/DL 库&#xff08;如 TensorFlow, PyTorch, Num…...

CSS:三大特性

文章目录 一、层叠性二、继承性三、优先级 一、层叠性 二、继承性 可以在MDN网站上查看属性是否可以被继承 例如color 三、优先级...

Cross-Site Scripting(XSS)

1. XSS介绍 跨站脚本攻击&#xff08;Cross-Site Scripting&#xff09;简称XSS&#xff0c;人们经常将跨站脚本攻击&#xff08;Cross Site Scripting&#xff09;缩写为CSS&#xff0c;但这会与层叠样式表&#xff08;Cascading Style Sheets&#xff0c;CSS&#xff09;的缩…...

掌握HTML文件上传:从基础到高级技巧

HTML中input标签的上传文件功能详解 一、基础概念 1. 文件上传的基本原理 在Web开发中&#xff0c;文件上传是指将本地计算机中的文件&#xff08;如图片、文档、视频等&#xff09;传输到服务器的过程。HTML中的<input type"file">标签是实现这一功能的基础…...

WebRTC中的几个Channel

一、我指的是谁&#xff1f; 以视频为例&#xff0c;常见的有&#xff1a;MediaChannel、VideoMediaChannel、WebRtcVideoChannel、BaseChannel、VideoChannel&#xff0c;那么&#xff0c;为什么要这么多Channel&#xff0c;只写一个叫做SuperChannel行不行&#xff08;很多程…...

【设计模式】- 行为型模式1

模板方法模式 定义了一个操作中的算法骨架&#xff0c;将算法的一些步骤推迟到子类&#xff0c;使得子类可以不改变该算法结构的情况下重定义该算法的某些步骤 【主要角色】&#xff1a; 抽象类&#xff1a;给出一个算法的轮廓和骨架&#xff08;包括一个模板方法 和 若干基…...

容器化-k8s-使用和部署

一、K8s 使用 1、基本概念 集群: 由 master 节点和多个 slaver 节点组成,是 K8s 的运行基础。节点: 可以是物理机或虚拟机,是 K8s 集群的工作单元,运行容器化应用。Pod: K8s 中最小的部署单元,一个 Pod 可以包含一个或多个紧密相关的容器,这些容器共享网络和存储资源。…...

黑马k8s(九)

1.Pod-生命周期概述 2.Pod生命周期-创建和终止 3.Pod生命周期-初始化容器...

Android trace中CPU的RenderThread与GPU

Android trace中CPU的RenderThread与GPU RenderThread是系统的GPU绘制线程&#xff0c;GPU渲染就是通常所谓的硬件加速&#xff0c;如果应用关闭硬件加速&#xff0c;就没有了RenderThread&#xff0c;只有UI Thread&#xff0c;即Android主线程。 Android GPU渲染SurfaceFlin…...

测试工程师如何学会Kubernetes(k8s)容器知识

Kubernetes(K8s)作为云原生时代的关键技术之一&#xff0c;对于运维工程师、开发工程师以及测试工程师来说&#xff0c;都是一门需要掌握的重要技术。作为一名软件测试工程师&#xff0c;学习Kubernetes是一个有助于提升自动化测试、容器化测试以及云原生应用测试能力的重要过程…...

接触感知 钳位电路分析

以下是NG板接触感知电路的原理图。两极分别为P3和P4S&#xff0c;电压值P4S < P3。 电路结构分两部分&#xff0c;第一部分对输入电压进行分压钳位。后级电路使用LM113比较器芯片进行电压比较&#xff0c;输出ST接触感知信号。 钳位电路输出特性分析 输出电压变化趋势&a…...

码蹄集——圆包含

MT1181 圆包含 输入2个圆的圆心的坐标值&#xff08;x&#xff0c;y&#xff09;和半径&#xff0c;判断断一个圆是否完全包含另一个圆&#xff0c;输出YES或者NO。另&#xff1a;内切不算做完全包含。 格式 输入格式&#xff1a;输入整型&#xff0c;空格分隔。 每行输入一组…...

ConcurrentSkipListMap的深入学习

目录 1、介绍 1.1、线程安全 1.2、有序性 1.3、跳表数据结构 1.4、API 提供的功能 1.5、高效性 1.6、应用场景 2、数据结构 2.1、跳表&#xff08;Skip List&#xff09; 2.2、节点类型&#xff1a; 1.Node 2.Index 3.HeadIndex 2.3、特点 3、选择层级 3.1、随…...

ProfibusDP主站转modbusTCP网关接DP从站网关通讯案例

ProfibusDP主站转modbusTCP网关接DP从站网关通讯案例 在工业自动化领域&#xff0c;Profibus DP和Modbus TCP是两种常见的通信协议。Profibus DP广泛应用于过程自动化、工厂自动化等场景&#xff0c;而Modbus TCP则常见于楼宇自动化、能源管理等领域。由于设备和系统之间往往存…...

第一次做逆向

题目来源&#xff1a;ctf.show 1、下载附件&#xff0c;发现一个exe和一个txt文件 看看病毒加没加壳&#xff0c;发现没加那就直接放IDA 放到IDA找到main主函数&#xff0c;按F5反编译工具就把他还原成类似C语言的代码 然后我们看逻辑&#xff0c;将flag.txt文件的内容进行加…...

【项目】自主实现HTTP服务器:从Socket到CGI全流程解析

00 引言 ​ 在构建高效、可扩展的网络应用时&#xff0c;理解HTTP服务器的底层原理是一项必不可少的技能。现代浏览器与移动应用大量依赖HTTP协议完成前后端通信&#xff0c;而这一过程的背后&#xff0c;是由网络套接字驱动的请求解析、响应构建、数据传输等一系列机制所支撑…...

AI最新资讯,GPT4.1加入网页端、Claude 3.7 Sonnet携“极限推理”发布在即

目录 一、GPT4.1加入网页端二、Claude 3.7 Sonnet携“极限推理”发布在即三、这项功能的关键特点1、双模式操作2、可视化思考过程3、可控的思考预算4、性能提升 四、Claude制作SVG图像1、Prompt提示词模板2、demo&#xff1a;技术路线图**Prompt提示词&#xff1a;**3、甘特图4…...

Android 中使用通知(Kotlin 版)

1. 前置条件 Android Studio&#xff1a;确保使用最新版本&#xff08;2023.3.1&#xff09;目标 API&#xff1a;最低 API 21&#xff0c;兼容 Android 8.0&#xff08;渠道&#xff09;和 13&#xff08;权限&#xff09;依赖库&#xff1a;使用 WorkManager 和 Notificatio…...

在 Kotlin 中,什么是解构,如何使用?

在 Kotlin 中&#xff0c;解构是一种语法糖&#xff0c;允许将一个对象分解为多个独立的变量。 这种特性可以让代码更简洁、易读&#xff0c;尤其适用于处理数据类、集合&#xff08;如 Pair、Map&#xff09;或其他结构化数据。 1 解构的核心概念 解构通过定义 componentN()…...

apisix透传客户端真实IP(real-ip插件)

文章目录 apisix透传客户端真实IP需求和背景apisix real-ip插件为什么需要 trusted_addresses&#xff1f;安全架构的最佳实践 示例场景apisix界面配置 apisix透传客户端真实IP 需求和背景 当 APISIX 前端有其他反向代理&#xff08;如 Nginx、HAProxy、云厂商的 LB&#xff…...

初学者如何用 Python 写第一个爬虫?

初学者如何用 Python 写第一个爬虫&#xff1f; 一、爬虫的基本概念 &#xff08;一&#xff09;爬虫的定义 爬虫&#xff0c;英文名为 Web Crawler&#xff0c;也被叫做网络蜘蛛、网络机器人。想象一下&#xff0c;有一个勤劳的小蜘蛛&#xff0c;在互联网这个巨大的蜘蛛网中…...

基于MNIST数据集的手写数字识别(CNN)

目录 一&#xff0c;模型训练 1.1 数据集介绍 1.2 CNN模型层结构 1.3 定义CNN模型 1.4 神经网络的前向传播过程 1.5 数据预处理 1.6 加载数据 1.7 初始化 1.8 模型训练过程 1.9 保存模型 二&#xff0c;模型测试 2.1 定义与训练时相同的CNN模型架构 2.2 图像的预处…...

QT6 源(103)篇三:阅读与注释 QPlainTextEdit,给出源代码

&#xff08;10&#xff09;关于文本处理的内容很多&#xff0c;来不及全面阅读、思考与整理。先给出类的继承图&#xff1a; &#xff08;11&#xff09;本源代码来自于头文件 qplaintextedit . h &#xff1a; #ifndef QPLAINTEXTEDIT_H #define QPLAINTEXTEDIT_H#include &…...

yocto5.2开发任务手册-7 升级配方

此文为机器辅助翻译&#xff0c;仅供个人学习使用&#xff0c;如有翻译不当之处欢迎指正 7 升级配方 随着时间的推移&#xff0c;上游开发者会为图层配方构建的软件发布新版本。建议使配方保持与上游版本发布同步更新。 虽然有多种升级配方的方法&#xff0c;但您可能需要先…...

LangPDF: Empowering Your PDFs with Intelligent Language Processing

LangPDF: Empowering Your PDFs with Intelligent Language Processing Unlock Global Communication: AI-Powered PDF Translation and Beyond In an interconnected world, seamless multilingual document management is not just an advantage—it’s a necessity. LangP…...

DDS(数据分发服务) 和 P2P(点对点网络) 的详细对比

1. 核心特性对比 维度 DDS P2P 实时性 微秒级延迟&#xff0c;支持硬实时&#xff08;如自动驾驶&#xff09; 毫秒至秒级&#xff0c;依赖网络环境&#xff08;如文件传输&#xff09; 架构 去中心化发布/订阅模型&#xff0c;节点自主发现 完全去中心化&#xff0c;节…...

TC8:SOMEIP_ETS_029-030

SOMEIP_ETS_029: echoUINT8Array16Bitlength 目的 检查当method echoUINT8Array16BitLength的参数中长度字段为16bit时,SOME/IP协议层是否能对参数进行序列化和反序列化。 对于可变长度的数组而言,必须用长度字段表示数组长度。否则接收方无法判断有效数据。 SOMEIP_ETS_02…...

Elasticsearch索引全生命周期管理指南之一

#作者&#xff1a;猎人 文章目录 一、索引常规操作二、索引mapping和别名管理 一、索引常规操作 索引数据特点&#xff1a; 索引中的数据随着时间&#xff0c;持续不断增长 按照时间序列划分索引的好处&挑战&#xff1a; 按照时间进行划分索引&#xff0c;会使得管理更加…...

本土DevOps革命:Gitee如何撬动中国企业的数字化转型新动能

在数字化浪潮席卷全球的背景下&#xff0c;中国企业正面临前所未有的转型压力与机遇。随着《数据安全法》和《个人信息保护法》的全面实施&#xff0c;以及信创产业政策的深入推进&#xff0c;研发工具链的自主可控已成为关乎企业核心竞争力的战略命题。在这一关键赛道上&#…...

ARM服务器解决方案

ARM服务器解决方案已成为异构计算领域的重要技术路径&#xff0c;其核心优势与多元化场景适配性正加速产业渗透。以下为关键要点分析&#xff1a; 一、核心优势与架构设计 能效比优化‌ ARM架构基于RISC指令集&#xff0c;单节点功耗可控制在15W以下&#xff0c;较x86架构能效…...

【暗光图像增强】【基于CNN的方法】2020-AAAI-EEMEFN

EEMEFN&#xff1a;Low-Light Image Enhancement via Edge-Enhanced Multi-Exposure Fusion Network EEMEFN&#xff1a;基于边缘增强多重曝光融合网络的低光照图像增强 AAAI 2020 论文链接 0.论文摘要 本研究专注于极低光照条件下的图像增强技术&#xff0c;旨在提升图像亮度…...

嵌入式EasyRTC音视频实时通话SDK在工业制造领域的智能巡检/AR协作等应用

一、背景 在数字化浪潮席卷全球的当下&#xff0c;远程监控与驾驶技术已深度渗透至工业巡检、智能交通等核心领域。然而&#xff0c;传统方案普遍面临实时性瓶颈、高延迟传输及交互体验匮乏等痛点&#xff0c;严重制约行业智能化转型。EasyRTC作为前沿的实时音视频通信技术&am…...

uniapp-商城-58-后台 新增商品(属性子级的添加和更新)

前面对父级属性的添加进行了分析&#xff0c;这里再来继续做属性子级的数据添加&#xff0c;包含页面逻辑以及后台处理的逻辑。当然这里还是在前面的云对象的方式进行的。 本文介绍了在云对象green-mall-sku中添加子级属性的实现过程。首先&#xff0c;通过updateChild接口处理…...

基于springboot+vue的机场乘客服务系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat12开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.3.9 系统展示 用户管理 航班信…...

npm和nvm和nrm有什么区别

npm 全称&#xff1a;Node Package Manager。 作用&#xff1a; 包管理&#xff1a;用于安装、共享、分发代码&#xff0c;管理项目依赖关系。项目管理&#xff1a;创建和管理 package.json 文件&#xff0c;记录项目依赖和配置信息。脚本执行&#xff1a;运行项目中的脚本&…...

几种排序方式的C语言实现(冒泡、选择、插入、希尔等)

## 分类 存储器类型&#xff1a; - 内排序&#xff08;数据规模小 内存&#xff09; - 外排序&#xff08;数据库 磁盘&#xff09; 是否基于元素之间的比较 - 基数排序 - 其他排序&#xff1a;冒泡、选择、插入、快速、归并、希尔、堆…… 时间复杂度 - O&#…...

【MATLAB例程】线性卡尔曼滤波的程序,三维状态量和观测量,较为简单,可用于理解多维KF,附代码下载链接

本文所述代码实现了一个 三维状态的扩展卡尔曼滤波 (Extended Kalman Filter, EKF) 算法。通过生成过程噪声和观测噪声&#xff0c;对真实状态进行滤波估计&#xff0c;同时对比了滤波前后状态量的误差和误差累积分布曲线。 文章目录 简介运行结果MATLAB源代码 简介 代码分为以…...

芯片测试之X-ray测试

原理&#xff1a; X-ray是利用阴极射线管产生高能量电子与金属靶撞击&#xff0c;在撞击过程中&#xff0c;因电子突然减速&#xff0c;其损失的动能会以X-Ray形式放出。而对于样品无法以外观方式观测的位置&#xff0c;利用X-Ray穿透不同密度物质后其光强度的变化&#xff0c;…...

机器学习中的特征工程:解锁模型性能的关键

在机器学习领域&#xff0c;模型的性能往往取决于数据的质量和特征的有效性。尽管深度学习模型在某些任务中能够自动提取特征&#xff0c;但在大多数传统机器学习任务中&#xff0c;特征工程仍然是提升模型性能的关键环节。本文将深入探讨特征工程的重要性、常用方法以及在实际…...

【学习笔记】机器学习(Machine Learning) | 第七章|神经网络(1)

机器学习&#xff08;Machine Learning&#xff09; 简要声明 基于吴恩达教授(Andrew Ng)课程视频 BiliBili课程资源 文章目录 机器学习&#xff08;Machine Learning&#xff09;简要声明 机器学习之深度学习神经网络入门一、神经网络的起源与发展二、神经元模型&#xff08;…...

反向传播算法:神经网络的核心优化方法,一文打通任督二脉

搞神经网络训练,**反向传播(Backpropagation)**是最核心的算法。 没有它,模型就只能瞎猜参数,训练基本白搭。 这篇文章不整公式推导,不搞花架子,咱就把最关键的几个问题讲明白: 反向传播到底是干啥的? 它是怎么一步步更新参数的? 哪些坑你必须避免? 一、反向传播是…...

neo4j框架:java安装教程

安装使用neo4j需要事先安装好java&#xff0c;java版本的选择是一个犯难的问题。本文总结了在安装java和使用Java过程中遇到的问题以及相应的解决方法。 Java的安装包可以在java官方网站Java Downloads | Oracle 中国进行下载 以java 8为例&#xff0c;选择最后一行的x64 compr…...

基于React的高德地图api教程007:椭圆的绘制、编辑和删除

文章目录 7、椭圆绘制7.1 绘制椭圆7.1.1 设置圆心7.1.2 确定短半轴7.1.3 确定长半轴7.1.4 实时显示椭圆形状7.2 修改椭圆7.2.1 修改椭圆属性信息7.2.2 修改椭圆形状7.3 删除椭圆7.4 定位椭圆7.5 代码下载7.07、椭圆绘制 7.1 绘制椭圆 7.1.1 设置圆心 第一次点击地图设置圆心…...

Python多线程实战:提升并发效率的秘诀

一、前言&#xff1a;为什么需要多任务处理&#xff1f; 在实际开发中&#xff0c;我们经常需要让程序同时执行多个任务&#xff0c;例如&#xff1a; 同时下载多个文件&#xff1b;在后台运行耗时计算的同时保持界面响应&#xff1b;并发处理网络请求等。 Python 提供了多种…...