STM32CubeMX定时器配置
STM32CubeMX定时器配置
- 一,Mode界面
- 1,Slave Mode (从模式)
- 2,Trigger Source (触发源)
- 三,Channelx(通道模式)
- 1,Input Capture
- 2,Output Compare
- 3,PWM Generation
- 4,Forced Output
- 5,DEPRECATED → Input Capture Indirect mode 的那条灰字?
- 6,初学者落地套路
- 二,Configuration
- Parameter Settings
- 1,Counter Settings:
- 2,Trigger Output(TRGO)Parameters
一,Mode界面
在下面这张图中,你看到的是STM32CubeMX中的TIM3定时器的Mode配置界面。让我逐个解释各个配置选项:

1,Slave Mode (从模式)
有以下选项:

何为定时器的从模式?
就是定时器依赖于外部的触发信号来启动计数或者响应事件
如果将从模式设置为Disable:即关闭从模式,定时器依据系统时钟(默认的内部时钟)独立运行,不依赖外部触发信号
应用场景:10 kHz PWM、1 ms 定时中断
如果设置为External Clock Mode 1 (外部时钟模式 1):定时器将外部时钟作为计数源
电路连接:外部待测方波 → ETR 或 TIx
应用场景:① 频率计数 ② 霍尔测速(电机转速)
怎么频率计数?
我们把待测信号(方波)接到 TIM3 的 ETR(或 CH1/CH2),把 TIM3 当成“脉冲计数器”,另一颗定时器(比如 SysTick 或 TIM2)给 1 s 门控,在 1 s 里读 TIM3->CNT 寄存器的计数值,就得到“这 1 秒来了多少个脉冲”。
怎么实现霍尔测速?
无刷电机霍尔传感器每转产生若干脉冲 → 接 TIM3 ETR引脚,把 TIM3 设成 External Clock Mode 1,PSC=0,每来 1 个霍尔沿,CNT 就 +1,然后我们固定一段时间读取CNT,或利用另一定时器 100 ms 中断读取,就能算出转速 (pulses/100 ms)。
如果设置为Reset Mode (复位模式):外部脉冲一到,CNT 立即清零 定时器检测到外部触发信号时,重新从0计数(使用默认的内部时钟计数)
硬件连接:外部脉冲 → 连接到ETR/TIx
应用场景:① 周期测量(Period)② 相位差测量(Phase)
如何测量周期?
将信号(每周期一个脉冲,例如霍尔 Index、编码器 Z 相)→连接到 ETR,定时器使用默认的内部时钟 1 MHz,每收一次 Z 相脉冲,CNT 清零,到下一个脉冲时: CNT 的值 = 周期的微秒数。
如何测量相位差?
假设测量两路方波 A、B的、相位差:A连接→主定时器产生 TRGO,B连接→从定时器 ETR。当 B 脉冲来时复位计数器,再用主定时器给的时间基准读取 CNT,就得到 A→B 的相位差。
如果设置为Gated Mode (门控模式):高电平才计数,低电平就暂停 外部触发信号控制定时器计算的开始与停止(定时器还是使用内部时钟进行计数)
硬件连接:待测信号→ 连接 TIM3 ETR。
应用场景:① 脉宽测量(High-level Width),② 占空比测量
如何测量脉宽?
把待测 PWM 的高电平当“门”,连接到ETR。当ETR检测到高电平时,CNT开始计数(在另外一个输入捕获通道记录这个上升沿对应的 CNT1),当电平跳变到低电平时CNT停止计数,等到下一次上升沿到来时CNT再开始计数(在另外一个输入捕获通道记录这个上升沿对应的 CNT2),一个周期内高电平持续的微秒数 = CNT2 - CNT1(假设内部时钟频率是1MHz)
如果设置为Trigger Mode (触发模式):定时器检测到外部触发信号时,重新启动(计数器不清0)
硬件连接:主定时器的 TRGO → 连接从定时器的 ITRx
应用场景:① 多定时器同步起跑,② One-Shot 采样窗口
如何实现两个定时器同时计数?
把 TIM1 设置成主定时器 Master,更新事件 (UEV) 输出到 TRGO,把 TIM3 设置为触发模式:SMCR.SMS=Trigger Mode,TS=ITR0(ITR0=来自 TIM1 的 TRGO),这样的效果是:上电后 TIM3 直到收到 TIM1 的第一次更新事件才开始计数,于是两路 PWM 同步
如何实现一次( One-Shot )采样?
比如我们需要:ADC 需要在某个外部事件后 5 µs 打开采样窗口,ADC只采样一次
我们把 TIM2 作主定时器,事件来时产生 TRGO,TIM3 设置为从定时器: Trigger Mode,ARR=5 µs,对应“5 µs 后产生更新中断”,在中断里触发 ADC,完成一次采样
相信大家都有疑问:上面Reset Mode (复位模式)和Trigger Mode (触发模式)的应用举例中都提到了主定时器和从定时器,以及主定时器会产生TRGO(触发输出信号)传递给从定时器的ITRx引脚(片内引脚,不占IO),明明我们只设置了Reset Mode (复位模式)和Trigger Mode (触发模式),哪来的TRGO?哪来的主定时器和从定时器呢?
其实主定时器这这里的作用只是相当于产生一个触发信号TRGO,通过ITRx(如ITR0)传递给从定时器,在CubeMX中的Slave Mode可以设置从定时器接收到TRGO的反应:
Reset Mode : CNT 立即清零,再继续计数
Trigger Mode :第一沿到来:启动 CNT;后续到来:再次“重启”一个周期
Gated Mode :只要 ITR0 为高,CNT 计数;低则暂停
External Clock 1 Mode :直接把 ITR0 的边沿当时钟脉冲,CNT 每沿+1
TRGO的本质是主定时器用自己的“更新事件 (UEV)”或“比较事件 (OCxREF)”等,做成一次脉冲,通过寄存器 CR2.
MMS送出,同时芯片手册会给出一张表:将定时器与TRx线对应,比如TIM1 TRGO→ ITR0,TIM2 TRGO→ ITR1,这样从定时器就可以选择 ITR0/1/2/3 当触发源Trigger Source (TS)了,然后从定时器就可以根据Slave Mode(SMS)做不同动作。
那怎么在CubeMX中设置主定时器和从定时器呢?
在Mode配置区下的Configurtion选项可以配置

下面以TIM1为主定时器,TIM3为从定时器举例:
主定时器TIM1 (Master):
Master/Slave Mode: Enable
Trigger Output (MMS): 选 Update Event(或者 OC1REF 等)
从定时器TIM3 (Slave):
Clock Source: Internal Clock(CNT 还是内部时钟)
Trigger Source (TS): ITR0 (因手册注明 TIM1→ITR0)
Slave Mode (SMS):
测周期 ➜ Reset Mode
多路 PWM 同步 ➜ Trigger Mode
TIM_SlaveConfigTypeDef sSlaveConfig = {0};
sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET; // 或 TIM_SLAVEMODE_TRIGGER
sSlaveConfig.InputTrigger = TIM_TS_ITR0;
HAL_TIM_SlaveConfigSynchro(&htim3, &sSlaveConfig);
┌──────── TIM1 ────────┐│ Update Event (UEV) ││ OC1REF pulse … │──► TRGO (TIM1)└─────────────────-────┘│片内触发矩阵│(ITR0)▼┌──────── TIM3 (Slave) ───────┐│ TS=ITR0 SMS=Reset ││ ││ 触发来 → CNT=0 │└─────────────────────────────┘
| 专有名词 | 含义 | 物理 / 逻辑通道 | 你在 CubeMX 里看到的字段 |
|---|---|---|---|
| TRGO | Timer Request Generate Output,定时器的“触发输出信号” | 由 主 定时器内部产生,经内部总线送到别的定时器 | Trigger Output (Master Mode) |
| ITR0‥ITR3 | “内部触发输入线”,把上面某个定时器的 TRGO 接进来 | 片内线,不占 IO | Trigger Source (TS) 里选 ITR0/1/2/3 |
| ETR | External Trigger pin,真正的芯片脚 | 需要占用一个 GPIO/AF | 也在 Trigger Source 下拉框里 |
| Slave-Mode Controller | 定时器内部的小状态机 | 决定收到触发后干什么(Reset / Gated / Trigger …) | Slave Mode (SMS) |
2,Trigger Source (触发源)
前面Slave Mode (从模式)讲的是定时器依赖外部触发信号产生的行为:
Reset Mode : CNT 立即清零,再继续计数
Trigger Mode :第一沿到来:启动 CNT;后续到来:再次“重启”一个周期
Gated Mode :只要 ITR0 为高,CNT 计数;低则暂停
External Clock 1 Mode :直接把 ITR0 的边沿当时钟脉冲,CNT 每沿+1
而产生这些行为是需要触发源的,这就是接下来我们要讲的Trigger Source (触发源):

我们暂且将这些触发源分为两大类:
1,内部触发源:触发信号来自定时器内部引脚(不是IO),如ITR0 / ITR1 / ITR2 / ITR3
这一类上面讲过,再举例一下:
| ITRx | 对应哪路 TRGO (以常见 STM32F4 为例^1) | 举例 |
|---|---|---|
| ITR0 | TIM1_TRGO | TIM1 主控 PWM,对齐 TIM3/TIM4 |
| ITR1 | TIM2_TRGO | 用 TIM2 周期触发 TIM5 复位 |
| ITR2 | TIM3_TRGO | 用 TIM3 事件门控 TIM1 |
| ITR3 | TIM4_TRGO | 多定时器级联计数 |
2,外部触发源:触发信号来自外部引脚(定时器的IO引脚),如ETRx、TI1_ED、TI1FP1、TI2FP2
我们先来讲讲ETRx怎么使用?
-
配合 External Clock Mode 1 :实现外部时钟的输入
如下图,Clock Source选项可以选择内部时钟和外部时钟(ETR2引脚输入外部时钟)

-
配合 门控 / 复位 / 触发 , SMS 选 Gated/Reset/Trigger:前面Slave Mode (从模式)提到过一些应用场景,比如测量外部信号频率,周期,测霍尔转速
那TI1_ED、TI1FP1、TI2FP2 怎么使用呢?
首先我们发现这三个触发源都含有TI1,这是什么意思呢?我们应该知道定时器的引脚叫CHx,比如CH1,而CH1 是“通道 1”——它既能当 输出(PWM、比较脉冲),也能当 输入(捕获外部信号):
当它被用作输入时,这条连线在手册里就叫 TI1(Timer Input 1)
当它配置成 输出 → 我们习惯说 CH1、CC1、OC1
那哪里来的TI1_ED、TI1FP1、TI2FP2 呢?
其实就是TI1的输入分支:
TI1 pin ──┬─► TI1_ED (Edge 脉冲)
├─► TI1FP1 (Filtered Level)
└─► CAPTURE/COMPARE 正常用的 CH1
-
TI1_ED 就是 TI1 Edge Detector 翻译过来就是边沿检测器,专门用来捕捉输入边沿(上升沿/下降沿),让 Reset/Trigger Mode 在那一刻生效
应用举例:把 1 MHz 方波接 TI1,Slave Mode 选 External Clock Mode 1 → CNT 就是一台 1 MHz 计数器。 -
TI1FP1 就是 TI1 Filtered Pulse 1:此通道会将高电平进行滤波,适合测量静态(不变的)电平持续时间
应用举例:
门控计时:想测 PWM 的高电平宽度 → 把 PWM 接 TI1,Trigger Source 选 TI1FP1,Slave Mode 选 Gated。计数器只在 PWM 高电平那段时间累加,读取 CNT 就是“高电平持续多少微秒”。
有噪声的外部复位:长线过来的 5 V 脉冲可能抖动,滤波后再当 Reset Mode 触发,就不会被毛刺误复位 -
TI1FP1和TI2FP2搭配起来的用法:测量A相和B相相位差
B 相 ─► CH2 (TI2) ─► TI2FP2 ─►〔Slave-Mode: Reset〕–──┐
A 相 ─► CH1 (TI1) ─► Input-Capture ─► CCR1 ◄── CNT ──┘
_______________________ ▲
Internal clock (1 MHz 等)
上面将B相连接到TI2FP2作为触发源,模式为Reset,当B波到来时,CNT被清0,
而A相连接到TI1FP1作为触发源,并且启用 Input Capture (输入捕获):检测上升沿时,硬件会在那个上升沿瞬间 把CNT的值抄一份存进CCRx—— 这动作叫“捕获”
我们打开 CC1 Capture interrupt中断,当捕获到上升沿会进入回调,在回调里读CCR1,使用函数HAL_TIM_ReadCapturedValue(&htim, TIM_CHANNEL_1)读取,流程图如下:
__ CNT: …152 153 154 155 …
_________________ ↑
外部上升沿──────┘ │ ← 这时硬件把 154 放进CCR1
__________________ └─CCR1= 154
此时使用函数读取的CCR1的值就是154,再结合预分频就能得到真实时间
上面提到了CCR1,它是干什么的呢?
其全称是Capture / Compare Register 1即捕获/比较寄存器1,它里面存的是什么呢?
输出模式下:存储要比较或生成 PWM 的阈值
输入捕获模式下:存储硬件抄的 CNT 值
上面还提到将CH1设置为 Input Capture,将CH2设置为Slave-Mode: Reset,这两个模式有什么联系呢?
首先我们要明确:Input Capture ➜ 属于“通道功能”;Slave Mode ➜ 控制“计数器行为”。示意图如下:

如上所示
Channel 里(CH1, CH2…):
你可以选 PWM、Output Compare、或 Input Capture,可以设置通道作用(选 Input Capture 时,和 CCMRx、CCR1/2 等寄存器打交道)
Slave Mode 区块:
完全独立的一个小状态机,只关心 “触发源来了我要不要清 CNT / 门控 CNT / 把外部沿当时钟”,(配置在 SMCR 寄存器)
其实将CH2选择为TI2FP2,设置为Slave-Mode: Reset是不够的,同时也要将CH2设置为Input-Capture模式,为什么?
因为只有当 CH2 处于 输入模式 时,硬件才能把这根脚送进滤波器(TI2FP2通道之前要滤波),再生成 TI2FP2 这条支路供 Slave-Mode 控制器使用,也就是说TI2FP2 并不是“独立存在”的,但在CubeMX配置时:如下图,我们只设置Slave Mode和TI1FP1,之后,CH1就自动配置为 Input Capture 了,下图发现,Channel1只能 Input Capture 或者Disable

如果我们将Trigger Sourcs配置为TI2FP2,此时就轮到CH2只能 Input Capture 或者Disable了

把触发源与从模式搭配起来举例:
| 需求(小白版说法) | 该选哪条 Trigger Source | 该选哪个 Slave Mode |
|---|---|---|
| “有几个沿,就加几个数”(计脉冲、做频率计) | TI1_ED 或 TI2FP2 | External Clock Mode 1 |
| “沿一来就把表清零”(测周期/相位) | TI1_ED / TI2FP2 / ITRx / ETR | Reset |
| “门打开期间才计数”(测高电平时间、占空比) | TI1FP1 / TI2FP2 | Gated |
| “外部枪响大家一起跑”(多定时器对齐) | TI1_ED / ITRx | Trigger |
动手步骤示例:测 PWM 高电平宽度
硬件:把待测 PWM 信号插到定时器 CH1 引脚。
CubeMX:
Trigger Source → TI1FP1
Slave Mode → Gated Mode
Clock Source → Internal Clock(给 CNT 一个已知计数频率)
运行:读一次 CNT 就是“这次 PWM 高电平持续多少计数”;除以时钟频率得到时间(µs)
三,Channelx(通道模式)
下图展示了通道功能选项:


1,Input Capture
首先看到Input Capture又分为三个模式:
1,Direct mode (直连模式)
2,Indirect mode (间接模式)
3,Triggered by TRC
Direct mode这种输入模式就是前面选择触发源(外部)时使用的模式
Triggered by TRC这种输入模式就是前面选择触发源(内部)时使用的模式
上图中Triggered by TRC是灰色的,相信如果前面看懂的话就知道:这个通道输入模式是主定时器产生的TRGO信号到从定时器的ITR引脚,我们没有打开ITR:

所以这种输入模式不能选择
在这里为了加深理解,我继续深入讲解前面测量AB相相位差的例子:
前面我们知道,B相接通道CH2,触发源为TI2FP2,从模式设置为Reset,而A相连接通道CH1,触发源为TI1FP1,并且Channel1设置为Input Capture Direct mode (CubeMX 会在初始化后调用HAL_TIM_IC_Start()或 HAL_TIM_IC_Start_IT(),把捕获使能位 CCER.CC1E = 1,此位会把 CNT 锁存进 CCR1),重点是CH2的Channel2设置为失能(把捕获使能位 CCER.CC1E = 0,不会把 CNT 锁存进 CCR1)
CC1E 只是“是否把 CNT 写进 CCR1” 的闸门。
带不带它 都不影响 TI2FP2 这根线被当作触发源去控制计数器CNT。
| 选项 | 硬件连线 | 细节 | 常见用途 |
|---|---|---|---|
| Direct mode | 输入到GPIO的信号→TI1 | 沿直接触发捕获 | 测方波周期、测 PWM 占空比(配另一通道) |
| Indirect mode (灰掉说明芯片不支持) | TI2 捕获 CCR1 或反之 | 让 CH1 捕获来自 CH2 的信号 | 双线编码器特殊玩法,较少用 |
| Triggered by TRC | 片内 TRC (触发控制器) | 用别的 TIM 的 TRGO 触发捕获 | 多定时器同步测量 |
2,Output Compare
| 选项 | 会不会往外翻电平 | 你能做什么 | 典型用法 |
|---|---|---|---|
| No Output | ❌ 不占 GPIO | 仅在 CNT == CCR1 时产生 OC1 中断 或 DMA 事件 | 软件定时 (精确 µs 级延时)、发逻辑脉冲给别的外设 |
| CH1 | ✅ | OC 模式可设 Toggle / Active / Inactive / PWM-Mode1/2 | 在 IO 上翻转一次、产生方波 |
| CH1N | ✅(互补脚) | 需高级 TIM | 半桥驱动下,由硬件自动生成反相信号 |
| CH1 CH1N | 两脚同开 | 同时输出主/互补 | 三相电机 FOC 中常见 |
3,PWM Generation
| 选项 | 输出在哪 | 说明 |
|---|---|---|
| PWM Generation No Output | ❌ | 只有计数+更新中断,不占脚——适合纯软件读取“斜坡”或作触发用 |
| PWM Generation CH1 | CH1 | 最常用:CCR1=占空比、ARR=周期 |
| PWM Generation CH1N | CH1N | 高级 TIM 才有;互补输出带死区 |
| PWM Generation CH1 CH1N | CH1+CH1N | 同步互补对 |
在 中心对齐 (Center-Aligned) 或 边沿对齐 (Edge-Aligned) 由 计数模式 决定。
死区、刹车、互补极性在 BDTR/CCER 寄存器设置,CubeMX 也有图形化选项。
4,Forced Output
用途
上电让 MOSFET 全关、让继电器保持常开;
发生故障时,软件/硬件一口气把 PWM 脱离计数器立即输出固定电平。
区别于 GPIO 输出
仍然走定时器通道,可与死区、刹车逻辑兼容,不用重新改 GPIO 复用状态。
在 CubeMX
选 Forced Output CH1 → 还需在 “配置” 页面里选 Force High 或 Force Low。
5,DEPRECATED → Input Capture Indirect mode 的那条灰字?
一些老款 MCU 支持 “Indirect” 捕获,但新架构已不推荐;CubeMX 直接灰掉提示 Deprecated。
如果你确实需要此功能,只能手写寄存器(CCMRx.CC1S = 10 等)。
6,初学者落地套路
| 目标 | Channel 下拉要选 | 其他关键点 |
|---|---|---|
| 测某信号频率 | Input Capture direct | 捕获上升沿,读 CCR;或当触发源计脉冲 |
| 输出固定 1 kHz 50% PWM | PWM Generation CHx | PSC+ARR 定周期,CCR = ARR/2 |
| 产生一次 10 µs 脉冲 | Output Compare CHx | OC 模式选 Toggle;中断里快速改 CCER 关闭 |
| 上电先拉低、启动后变 PWM | 上电先 Forced Output Low → 软件再改成 PWM Generation |
二,Configuration
Parameter Settings

我们可以看到在Parameter Settings下面又有Counter Settings和Trigger Output(TRGO)Parameters两个大类:
1,Counter Settings:
1,Prescaler (PSC):定时器的预分频系数
在讲预分频系数之前,我觉得有必要补充一些定时器的基础知识:
我们知道时间是抽象的,我们人类具象化时间的方式就是利用周期性的事件,比如地球自转一圈为1天,秒针布进一格为1秒,单片机时钟源的一个脉冲(可以理解为方波)就是一个时间单位。
而定时器的本质就是脉冲计数器,它对时钟源发出的脉冲进行计数,而这个脉冲的频率除了时钟源的影响,我们还可以使用分频器Prescaler 改变
在CubeMX中打开时钟树可以看到,我们设置系统时钟是180MHz,经过APB1总线分频器(除以4)后,得到45MHz的频率,这个频率给APB1总线的外设,也会经过2倍频为90MHz输送到定时器,而定时器自己也有预分频器就是Prescaler

上面我们知道进入定时器的频率为90MHz,我一般会将Prescaler 与 APB1 Timer clocks保持一致(这里是90分频),因为这样实际到达定时器的频率就是1MHz,(频率M是106倒数对应周期u即10-6),1MHz刚好是1us产生一个脉冲,CNT加1
那为什么下面设置的不是90 ,而是90-1呢?

因为分频机制是:分频后的频率 = 分频前的频率 / (Prescaler + 1),这里已经加1了,为了凑出90,我们要提前减1
2,Counter Period (ARR)自动重装载值:
在讲Counter Period (ARR)之前,我们继续补充定时器的知识:当计数器(CNT)数到自动重装载值(ARR)发生“溢出(Update)”动作而清0,并触发更新中断(Update Interrupt,简称 “UIF”)
注意:溢出和更新是有区别的,溢出(Overflow)是CNT到达它的极限值(ARR)然后翻转到初始值的动作本身,而更新(Update Event,简称 Update)是指CNT清0的那一刻会产生一个事件,这个事件(+中断使能位 DIER.UIE=1)会触发定时器更新中断
所以ARR就是决定CNT上限的一个值,可以控制定时器产生更新事件(如果中断使能位 DIER.UIE=1,ARR就可以控制更新中断的周期)
接下来请思考:我想让定时器每过100ms就产生一个更新事件(进入定时器的时钟频率按上面的90MHz,预分频系数按上面的90-1),怎么时钟ARR的值?
根据上面所学,CNT+1表示1us,我让CNT最大为100 000(即ARR = 100 000),就是100ms产生一个更新事件了
其实这里ARR应该为99 999,因为ARR = 0时也算一个CNT)
3,Count Mode计数模式:
Up 模式(向上计数):从 0 一直加到 ARR,然后再从头(重新)从 0 开始。
Down 模式(向下计数):直接从 ARR 开始往下数到 0,然后从 0 下一步再跳回 ARR 继续往下数。
Center-aligned 模式(对称中心对齐,也叫三角波模式):“先从 0 往上数到 ARR,再从 ARR 往下数回 0,然后再向上……不断重复”。
4,auto-reload preload (ARPE):
打开“双缓冲”,防止你改 ARR 时立刻跳变
5,Internal Clock Division (CKD):
再次细分时钟,主要给数字滤波用
2,Trigger Output(TRGO)Parameters
我前面提到过就是设置主定时器的
1, Trigger Event Selection (MMS):
我们先来回顾:什么是 TRGO(触发输出)
TRGO(Trigger Output)可以理解成:
当定时器“做完某件事”时,它会在芯片内部发出一个“触发脉冲”,这个脉冲可以供其他定时器或**外设(如 ADC、DMA)**去接着用。
在 CubeMX 里,这个“做完某件事”由 Trigger Event Selection (MMS) 决定,例如:
Update Event(每次溢出/更新) → 只要 CNT 数到 ARR,就发一个脉冲出去;
OC1REF(通道 1 比较/PWM 的比较输出到达)→ 只要 PWM 达到某个阈值,就发脉冲。
一旦选好了 “哪件事送到 TRGO”,其它从定时器在它的 Trigger Source(ITRx)里就可以选对应的那条内部线(ITR0/ITR1/…),实现级联、联动。
2,Master/Slave Mode (MSM):
在三个定时器连极时,第二给定时器既做主定时器又作从定时器时,为中间的定时器打开,保证时序同步
相关文章:
STM32CubeMX定时器配置
STM32CubeMX定时器配置 一,Mode界面1,Slave Mode (从模式)2,Trigger Source (触发源) 三,Channelx(通道模式)1,Input Capture2,Output Compare3,PWM Generation4…...
QNAP MEMOS 域名访问 SSL(Lucky)
注意:下述是通过ssh、docker-compose方式安装docker的,不是直接在container station中安装的哈!!! 一、编辑docker-compose.yml文件 用“#”号标识的,在保存文件的时候建议去掉,不然有时候会出…...
跟单业务并发量分析
虚拟货币交易所中的跟单交易(copy trading)业务在高峰期的确可能产生较高的并发量,但具体并发量取决于多个因素,包括交易所的规模、用户数量、热门交易员的活跃度、行情波动频率等。 📌 1. 跟单交易的并发特点 触发集…...
如何将多张图组合到一张图里同时保留高的分辨率(用PPT+AdobeAcrobat)
文章目录 一、用PPT排版得到一页排布了很多图片的PPT二、用AdobeAcrobat打开pdf文件三、最后得到的图片 一、用PPT排版得到一页排布了很多图片的PPT 步骤如下 ①将幻灯片大小的长设置为17.2,宽根据图像多少进行调整,我这里是10 幻灯片大小的长设置步骤&…...
pycharm找不到高版本conda问题
pycharm找不到高版本conda问题 高版本的condaPycharm不能自动识别,需要手动添加。 首先打开你要添加的conda环境win的话在conda终端输入 where conda查找conda的可执行文件位置 进入Pycharm设置,点击添加解释器,点击加载环境,…...
支持selenium的chrome driver更新到137.0.7151.55
最近chrome释放新版本:137.0.7151.55 如果运行selenium自动化测试出现以下问题,是需要升级chromedriver才可以解决的。 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only su…...
2025年上半年软考系统架构设计师--案例分析试题与答案
必选题一:大模型训练系统 某公司开发一个在线大模型训练平台,支持 Python 代码编写、模型训练和部署,用户通过 python 编写模型代码,将代码交给系统进行模型代码的解析,最终由系统匹配相应的计算机资源进行输出,用户不需要关心底层硬件平台。 a.系统发生…...
Eclipse 插件开发 5.2 编辑器 获取当前编辑器
Eclipse 插件开发 5.2 编辑器 获取当前编辑器 1 获取活跃编辑器2 获取全部编辑器 Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Click1 Bundle-SymbolicName: com.xu.click1;singleton:true Bundle-Version: 1.0.0 Bundle-Activator: com.xu.click1.Activato…...
讲述我的plc自学之路 第十二章
“老k,你没想过自己以后怎么过吗?”lora听我夸他漂亮,开始鼓起勇气追问我的过往。 “我还能怎样呢,说实话,家里介绍过几次相亲了,上来就问车问房的,大多数不了了之。”我解释道。 “老k这你就…...
Visual Studio 的下载安装
下载 官网:https://visualstudio.microsoft.com/zh-hans/ 点击免费 Visual Studio。 点击 Visual Studio Community 下的免费下载。 保留并下载。 安装 双击下载的 exe 安装文件,点击继续。 等他下载安装完。 选择你要下载的组件(我只勾了一个 .NET 桌…...
C# 如何获取当前成员函数的函数名
C# 如何获取当前成员函数的函数名 在 C# 中获取当前成员函数的名称,有以下几种常用方法: 1. 使用 MethodBase.GetCurrentMethod()(反射) using System.Reflection;public void MyMethod() {string methodName MethodBase.GetCu…...
苍茫命令行:linux模拟实现,书写微型bash
文章目录 🌇前言2、需求分析3、基本框架4、核心内容4.2、指令分割4.3、程序替换 5、特殊情况处理5.2、内建命令5.3、cd5.4、export5.5、echo5.6、重定向 6、源码 🌇前言 Linux 系统主要分为内核(kernel)和 外壳(shell),普通用户是无法接触到…...
虚拟DOM和DOM是什么?有什么区别?虚拟DOM的优点是什么?
虚拟DOM与真实DOM的概念 虚拟DOM(Virtual DOM)是一种对真实DOM的抽象表示,其结构通常为一个JavaScript对象,保存了DOM节点的标签、属性、子节点等信息。真实DOM则是浏览器中的实际文档对象模型,由HTML代码解析生成&am…...
累加法求数列通项公式
文章目录 前言如何判断注意事项适用类型方法介绍典例剖析对应练习 前言 累加法,顾名思义,就是多次相加的意思。求通项公式题型中,如果给定条件最终可以转化为 a n 1 − a n f ( n ) a_{n1}-a_nf(n) an1−anf(n)的形式,或者…...
鸿蒙NEXT应用加固工具哪家更好?国内主流的6款对比
随着鸿蒙NEXT系统的推进,越来越多企业将目光投向鸿蒙生态下的应用部署与数据安全。尤其是在核心业务App逐步上架鸿蒙原生平台的当下,如何实现高效、可靠的鸿蒙NEXT应用安全加固,已成为企业技术选型的关键环节。本文将对市面上6款主流的鸿蒙NE…...
高效多线程图像处理实战
引言 在现代计算机视觉和图像处理应用中,处理大量图像数据是常见需求。传统的单线程处理方式在面对成千上万的图像时,往往显得力不从心,导致处理时间过长。本文将介绍如何将一个典型的单线程图像处理任务转换为高效的多线程实现,并讨论其中的关键技术点、线程安全考量以及…...
[特殊字符]《计算机组成原理》第 8 章 - CPU 的结构和功能
🔵8.1 CPU 的结构 🔵8.1.1 CPU 的功能 CPU(中央处理器)是计算机的核心部件,主要负责以下任务: 指令执行:解析并执行指令集架构(ISA)定义的指令数据处理:完…...
第八篇:MySQL 备份恢复与数据安全管理实战
在企业数据库运维中,数据安全是第一要务。系统崩溃、误删数据、磁盘损坏等场景都可能造成数据丢失,因此建立可靠的备份与恢复机制是保障业务连续性的关键。 一、为什么需要备份? 防止数据丢失:误操作、故障、黑客攻击等ÿ…...
系统是win11+两个ubuntu,ubuntu20.04和ubuntu22.04,想删除ubuntu20.04且不用保留数据
在 Ubuntu 22.04 的终端里运行这些命令: 重启电脑,选择启动 Ubuntu 22.04;打开终端;从 lsblk 开始操作。 如果你不确定当前启动的是哪个系统,可以在终端输入: lsb_release -a它会输出: Distributor ID: …...
OramaCore 是您 AI 项目、答案引擎、副驾驶和搜索所需的 AI 运行时。它包括一个成熟的全文搜索引擎、矢量数据库、LLM界面和更多实用程序
一、软件介绍 文末提供程序和源码下载 OramaCore 是您的项目、答案引擎、副驾驶和搜索所需的 AI 运行时。 它包括一个成熟的全文搜索引擎、矢量数据库、LLM具有行动计划和推理功能的接口、用于根据数据编写和运行您自己的自定义代理的 JavaScript 运行时,以及更多…...
GitHub 趋势日报 (2025年05月28日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 2379 agenticSeek 1521 computer-science 841 n8n 577 langflow 351 qlib 282 skt…...
OpenCV CUDA模块图像处理------颜色空间处理之GPU 上交换图像的通道顺序函数swapChannels()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数用于在 GPU 上交换图像的通道顺序(例如将 BGR 图像转为 RGB)。 它适用于多通道图像(如 3 通道或 4 通道…...
回归任务损失函数对比曲线
回归任务损失函数曲线可视化对比 本节将可视化对比均方误差(MSE)、平均绝对误差(MAE)、Huber损失函数三种常见回归任务损失函数的曲线,帮助理解它们在不同误差区间的表现差异。 1. 导入所需库 我们需要用到 numpy 进…...
Magentic-UI:人机协作的网页自动化革命
Magentic-UI是微软开源的一款创新浏览器自动化工具,基于多智能体系统和AutoGen框架设计,强调人机协作、透明性和安全控制,通过协作规划、实时执行和计划学习机制,高效处理复杂网页任务如数据抓取和表单填写,显著提升任…...
计算机专业大学生常用的刷题,资源网站(持续更新)
一、刷题网站 1.牛客网 牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网 (nowcoder.com)https://www.nowcoder.com/ 牛客网(Nowcoder)是中国一个主要面向编程和技术学习者的在线教育和职业发展平台。它提供了…...
Redisson学习专栏(二):核心功能深入学习(分布式锁,分布式集合,原子操作与计数器,事件与监听)
本文是“Redisson学习专栏”第二篇,聚焦其核心分布式功能实现原理与最佳实践 文章目录 前言:分布式系统核心能力实践一、分布式锁:高并发下的守卫者1.1 可重入锁 (Reentrant Lock)1.2 公平锁 (Fair Lock)1.3 联锁 (MultiLock)1.4 红锁 (RedLo…...
医疗多模态共情推理与学习一体化网络构成初探
1 引言:多模态共情推理的概念内涵与技术背景 在当今医疗人工智能领域,多模态共情推理正逐步成为突破临床决策支持系统瓶颈的关键范式。这一技术通过融合认知共情与情感共情的双重机制,模拟人类医生的综合诊断思维过程,实现对患者全方位健康状态的深度理解。医疗环境中的共…...
MySQL : MySQL的安装【CentOS 7】
MySQL : MySQL的安装【CentOS 7】 (一) MySQL的卸载和安装1.卸载查看是否存在MySQL删掉原有的MySQL 2.安装 (二)登录和环境配置登录方法一: 存在临时密码登录方法二:通过修改配置文件环境配置 (一) MySQL的卸载和安装 安装与卸载中,用户全部…...
EasyRTC嵌入式音视频实时通话SDK助力AI与IoT智能硬件打造音视频交互多场景应用
一、引言 在数字化浪潮下,AI与IoT深度融合重塑智能硬件产业。实时音视频通信是智能硬件交互的核心,其性能关乎用户体验与场景拓展。EasyRTC嵌入式音视频实时通话SDK基于WebRTC技术,以轻量、易扩展的特性,为AI与IoT智能硬件融合…...
pod创建和控制
一、引言 主题:pod以及控制器模式中的Deployment作用。控制器模式:使用一种API对象(如Deployment)管理另一种API对象(如Pod)的方式。 二、容器镜像与配置文件 容器镜像:应用开发者…...
