STM32输入捕获实战:7行代码实现高精度频率测量
1. 为什么你需要一个“傻瓜式”的STM32频率计做嵌入式开发的朋友估计都遇到过这样的场景手头有个传感器输出一串脉冲信号你想知道它的频率到底是多少或者调试一个电机驱动器需要精确测量PWM的频率来验证控制逻辑。这时候你可能会想到示波器或者专业的频率计但这些东西要么太贵要么不方便随身携带。其实你手边的STM32开发板本身就是一个潜力巨大的高精度频率计。很多人一听到“输入捕获”、“定时器”、“中断”这些词就头大觉得配置起来肯定很复杂代码肯定要写一大堆。我刚开始接触的时候也是这么想的总觉得这玩意儿是高手玩的。但今天我要分享的这个方法可能会彻底改变你的看法。它的核心思想就是把复杂的硬件配置交给STM32CubeMX这个图形化工具我们只需要写最关键的7行代码就能实现一个从几赫兹到上百千赫兹都能测的高精度频率计。没错就是7行。你甚至不需要完全理解定时器底层那些繁琐的寄存器CubeMX帮你把“地基”都打好了我们只需要在上面“盖个简单的小房子”。这个方法特别适合那些想快速验证想法、进行原型开发或者项目中对频率测量有需求但又不想引入额外硬件的朋友。我把它用在过测量旋转编码器的转速、检查无源蜂鸣器的发声频率、甚至粗略评估无线模块的发射信号都非常方便。接下来我就带你一步步拆解看看这7行代码到底是怎么玩的以及背后有哪些门道可以让你测得更准、更稳。2. 核心原理把时间测量变成“数格子”游戏要理解频率测量我们得先回到最基础的定义频率f是单位时间内周期性事件重复的次数它等于周期T的倒数即 f 1/T。所以测频率本质上就是测周期。STM32的输入捕获功能就是干这个的“专业工具”。你可以把它想象成一个超级精密的秒表专门用来记录某个特定“事件”比如信号从低电平跳到高电平的瞬间发生的时间点。具体是怎么工作的呢我们以STM32最常用的通用定时器比如TIM2, TIM3, TIM4为例定时器本身是个“计数器”它在一个固定频率的时钟驱动下不停地从0开始向上计数计到某个最大值比如16位定时器是65535就溢出归零重新开始。这个计数的“嘀嗒”声非常快比如如果你的定时器时钟是108MHz那每秒钟就能数1.08亿次每一次计数代表的时间间隔就是 1/108,000,000 ≈ 9.26纳秒。这就相当于我们有一把刻度极其精细的尺子。输入捕获是“拍照留念”我们把待测的频率信号接到STM32的某个GPIO引脚上并将这个引脚配置为某个定时器的“输入捕获通道”。然后我们告诉定时器每当这个引脚上的信号出现上升沿从0变1的瞬间时你就立刻把当前计数器的值“咔嚓”一下保存到一个专门的寄存器叫做CCRx寄存器里。计算时间间隔第一次上升沿到来计数器值是V1下一次上升沿到来计数器值是V2。那么这两个上升沿之间的时间间隔T就等于(V2 - V1) * 每个计数的时间。如果计数器在V1和V2之间没有溢出归零过那直接相减就行。如果溢出过我们就需要把溢出的次数也考虑进去。换算成频率得到了周期T频率f自然就是 1/T 了。这里就引出了两种经典的测频方法测频法在一段固定的时间内比如1秒数一数信号出现了多少个上升沿。这个方法适合测高频信号因为对于高频信号在固定时间内能数到很多个脉冲结果更准确。但对于低频信号可能1秒内只看到几个脉冲误差就会很大。测周法也就是我们上面说的测量两个相邻上升沿之间的时间。这个方法特别适合测中低频信号。因为低频信号的周期长我们有足够多的时间去精确测量这个时间间隔。我们的“7行代码”方案采用的就是测周法。因为它逻辑直接实现起来代码量极少而且在中低频段比如几Hz到几百KHz精度非常高。我实测下来在100kHz以内误差可以轻松做到0.1%以下对于大部分嵌入式应用场景已经完全够用了。3. 手把手配置让CubeMX帮你完成90%的工作理论说再多不如动手做一遍。我们以最常见的STM32F103C8T6蓝色药丸板和TIM4定时器为例使用STM32CubeIDE来配置。即使你是第一次用CubeMX跟着我的步骤走5分钟也能搞定。第一步创建工程与基本配置打开STM32CubeIDE新建一个工程选择你的芯片型号STM32F103C8。在图形化界面的“Pinout Configuration”标签页我们先配置时钟。在“RCC”里将高速外部时钟HSE选择为“Crystal/Ceramic Resonator”。然后转到“Clock Configuration”标签页把系统时钟源切换到HSE并适当配置PLL让系统主频跑到72MHz这是F103的常见速度。你会发现APB1总线的时钟会自动设置为36MHz而挂载在APB1上的TIM2、TIM3、TIM4等定时器如果APB1的预分频系数不是1它的时钟会是APB1时钟的2倍也就是72MHz。这个细节很重要后面计算频率要用到。第二步配置定时器TIM4为输入捕获模式在左侧“Timers”中找到TIM4。在“Clock Source”选择“Internal Clock”这表示定时器使用内部时钟计数。关键步骤来了在下方的“Channel1”到“Channel4”中选择一个你想用来接输入信号的通道比如“Channel2”。点击它从下拉菜单中选择“Input Capture direct mode”。模式选择为“Input Capture on TI2”。这个“TI2”指的是定时器的输入通道2。这时右侧会自动切换到参数配置。我们需要关注几个核心参数Prescaler (PSC - 预分频器)这是定时器时钟的分频系数。定时器实际的工作频率 定时器时钟源 / (PSC 1)。为了获得更高的时间分辨率尺子的刻度更密我们通常希望定时器计数频率尽可能高。这里我们先设为71。这样定时器计数频率 72MHz / (711) 1MHz。这意味着计数器每1微秒us会计数一次。这个1MHz就是我们的“尺子”精度。Counter Period (ARR - 自动重装载值)这是计数器的最大值16位定时器最大是65535。我们把它设为最大值65535。这样定时器会从0计数到65535然后溢出产生一个更新中断。IC Selection选择“Direct”表示信号直接连接到这个捕获通道。ICPolarity选择“Rising Edge”表示在上升沿触发捕获。IC Prescaler选择“DIV1”表示每个有效边沿都捕获。IC Filter可以设为0或者根据信号噪声情况设置一个小的滤波值比如4用来滤除毛刺。别忘了开启中断点击上方“NVIC Settings”标签勾选“TIM4 global interrupt”。第三步生成代码点击“Project Manager”标签给工程起个名字选择好路径和工具链默认MDK-ARM或STM32CubeIDE都可以然后点击右上角的“GENERATE CODE”。CubeIDE会自动为你生成所有初始化代码包括GPIO、时钟和TIM4的配置。至此硬件层面的配置就全部完成了我们一行底层代码都没写。4. 灵魂7行代码实现与逐行精讲生成了代码框架后我们打开主工程找到main.c文件。我们需要添加代码的地方主要是定义几个全局变量然后在main函数初始化后开启捕获最后在定时器中断回调函数里写我们的核心逻辑。首先在main.c文件开头的/* USER CODE BEGIN PV */区域定义我们需要的变量/* USER CODE BEGIN PV */ volatile uint32_t capture_count 0; // 捕获次数计数器 volatile uint32_t last_capture 0; // 上一次捕获值 volatile uint32_t period_ticks 0; // 周期计数值 float frequency_hz 0.0; // 计算得到的频率 /* USER CODE END PV */volatile关键字很重要它告诉编译器这些变量可能在中断中被修改不要做激进的优化。然后在main函数中找到/* USER CODE BEGIN 2 */在系统初始化之后开启定时器和输入捕获中断/* USER CODE BEGIN 2 */ HAL_TIM_IC_Start_IT(htim4, TIM_CHANNEL_2); // 开启TIM4通道2的输入捕获中断 /* USER CODE END 2 */接下来就是最核心的部分了。我们需要找到并改写定时器的输入捕获中断回调函数。在STM32Cube HAL库中这个函数叫HAL_TIM_IC_CaptureCallback。你可以在stm32f1xx_it.c文件中找到它但更常见的做法是在main.c文件的/* USER CODE BEGIN 4 */区域自己重写它因为HAL库的这个函数是__weak弱定义的我们自己写的会覆盖它。下面是决定性的7行代码/* USER CODE BEGIN 4 */ void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { if (htim-Instance TIM4) // 判断是否是TIM4产生的中断 { uint32_t current_capture HAL_TIM_ReadCapturedValue(htim4, TIM_CHANNEL_2); // 1. 读取当前捕获值 if (capture_count 0) // 2. 第一次捕获只记录值 { last_capture current_capture; capture_count 1; } else // 3. 第二次及以后的捕获计算周期 { // 核心计算考虑计数器溢出的周期计算 if (current_capture last_capture) { period_ticks current_capture - last_capture; // 无溢出 } else { // 发生溢出当前值 (最大值1) - 上一次值 period_ticks current_capture 65536 - last_capture; // 有溢出 } // 4. 为下一次计算做准备 last_capture current_capture; // 5. 这里可以计算频率了但我们通常在主循环里算 // frequency_hz 1000000.0f / period_ticks; // 因为定时器计数频率是1MHz } } } /* USER CODE END 4 */我们来逐行拆解这7行核心逻辑注释不算uint32_t current_capture ... 当TIM4的通道2检测到上升沿时会触发这个函数。第一件事就是立刻读取捕获/比较寄存器CCR2里的值这个值就是上升沿发生时TIM4计数器CNT的瞬间值。if (capture_count 0) 我们用capture_count来标记状态。如果是第一次进入中断即第一个上升沿我们不做计算只把这个值存到last_capture里然后把状态标记为1然后等待下一个上升沿。else 当第二个上升沿到来时就进入这个分支。这里包含了处理计数器溢出的关键逻辑。if (current_capture last_capture) 如果当前值比上一次大说明在这两个上升沿之间计数器没有发生溢出从65535回到0。那么时间间隔period_ticks就是简单的差值。else 如果当前值比上一次小那肯定是因为计数器溢出了。想象一下上一次捕获时计数器值是65000然后计数器继续走到65535溢出归零再走到1000时第二个上升沿来了。那么实际的时间间隔应该是(65535 - 65000 1) 1000 65536 - 65000 1000。简化公式就是当前值 65536 - 上一次值。last_capture current_capture; 计算完本次周期后把当前值赋给last_capture为测量下一个周期做好准备。注释掉的那行就是频率计算公式。1000000.0f是因为我们之前把定时器配置成了1MHz的计数频率每 tick 1us。所以周期微秒T_us period_ticks频率f 1 / (T_us * 1e-6) 1e6 / period_ticks。最后我们可以在主循环while(1)里定期计算并输出频率/* USER CODE BEGIN WHILE */ while (1) { if (period_ticks ! 0) // 确保已经成功捕获到一个完整的周期 { frequency_hz 1000000.0f / period_ticks; // 计算频率 printf(Frequency: %.2f Hz\r\n, frequency_hz); // 通过串口打印 period_ticks 0; // 清零等待下一次计算 HAL_Delay(500); // 每500ms输出一次 } /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */把代码下载到板子里用信号发生器或者另一个单片机产生一个方波信号连接到TIM4_CH2对应的GPIO引脚比如PB7打开串口助手你就能看到实时测量的频率值了从几Hz到几十KHz测量都非常稳定。5. 精度提升与避坑指南从“能用”到“好用”上面的7行代码搭建了一个最基础的频率计框架但它还有些粗糙。在实际项目中我们得考虑更多细节让它变得更可靠、更精确。下面是我踩过坑后总结的几个关键优化点。5.1 应对高频与低频自动切换与溢出处理我们的基础版本在测量很低或很高的频率时会遇到问题。低频问题如果信号频率低于1Hz周期超过1秒。我们的定时器每65536个计数65.536ms就会溢出一次。在超过1秒的周期内定时器会溢出很多次。我们之前的代码只处理了一次溢出的情况current 65536 - last如果溢出多次计算就会出错。解决方案是引入一个溢出计数器。在定时器的更新中断溢出中断里对一个全局变量overflow_count进行加一。然后在捕获中断里计算周期时公式变为period_ticks current_capture (overflow_count * 65536) - last_capture。别忘了在每次完成一次周期计算后清零overflow_count。高频问题当频率很高时比如接近1MHz周期只有1us。我们的定时器计数频率也是1MHz这意味着周期period_ticks可能只有1或2。任何微小的计数误差比如±1都会导致巨大的频率计算误差误差可能高达50%。这就是所谓的±1误差是数字测频的固有误差。对于高频测周法不再适用应该切换到测频法。但我们的简易框架不太方便动态切换。一个折中的办法是多次测量取平均。连续捕获N个上升沿计算总时间再除以(N-1)得到平均周期。这能有效平滑±1误差。例如测量1000个周期的时间再求平均可以将误差降低到原来的1/1000。5.2 软件滤波与抗干扰让读数更稳定实际信号往往不是理想的方波可能有毛刺、抖动。这会导致捕获中断被误触发读出的周期值忽大忽小。硬件滤波第一步是利用STM32定时器自带的输入滤波器。在CubeMX配置里IC Filter那个参数就是干这个的。它通过连续采样来确认一个边沿是否有效。比如设置为4表示连续4个时钟周期采样到相同的电平变化才认为是一个有效的边沿。这对于滤除高频噪声非常有效。软件滤波在代码里我们可以加入简单的判断逻辑。比如连续测量5个周期值去掉一个最大值和一个最小值然后对剩下的3个取平均。或者判断当前测得的周期值是否在一个合理的范围内比如与前一个值相差不超过20%如果超出则认为可能是干扰丢弃这次测量。我在一个电机测速项目里就用了这种“限幅滤波”效果立竿见影读数再也不会乱跳了。5.3 测量范围与误差分析做到心中有数你需要清楚你的频率计能测多快、多慢误差大概有多少。最低频率受限于定时器的溢出时间。对于16位定时器1MHz计数频率下最大不溢出计数时间是65.536ms对应最低频率约为15.26Hz。要测更低的频率必须使用溢出计数理论上可以测到任意低但测量时间会很长。最高频率受限于定时器的计数频率和±1误差。假设我们要求误差小于1%对于1MHz的计数频率周期测量值至少需要100个tick对应的最高频率就是 1MHz / 100 10kHz。如果想测100kHz的信号且保持1%误差就需要将定时器计数频率提高到10MHz通过降低预分频PSC实现。误差公式测周法的相对误差主要由定时器时钟误差和±1误差构成。误差 ≈ (时钟误差) (1 / period_ticks)。所以period_ticks越大频率越低±1误差的影响越小。这也是测周法适合低频的原因。这里有个实用的配置参考表基于72MHz系统时钟TIM4挂在APB1上时钟72MHz预分频PSC定时器计数频率每个Tick时间最大无溢出周期对应最低频率±1误差1%的最高频率711 MHz1 us65.536 ms~15.26 Hz~10 kHz79 MHz~0.111 us~7.28 ms~137 Hz~90 kHz072 MHz~0.0139 us~0.91 ms~1.1 kHz~720 kHz你可以根据你要测量的信号频率范围在CubeMX里调整Prescaler参数在精度和量程之间取得平衡。6. 进阶玩法多通道、占空比与DMA掌握了单通道测频后你可以尝试更多有意思的扩展。多通道同时测量STM32的一个定时器往往有多个输入捕获通道如TIM4有4个。你完全可以复用上面的代码逻辑为每个通道定义独立的last_capture、period_ticks等变量。在中断回调函数里通过判断htim-Channel是哪个通道HAL_TIM_ACTIVE_CHANNEL_1等来执行对应的计算。这样只用1个定时器就能同时测量2路、3路甚至4路信号的频率效率非常高。测量PWM占空比占空比 高电平时间 / 周期。要测这个需要捕获一个周期内的上升沿和下降沿。配置方法有两种单通道双沿捕获将一个通道配置为Rising and Falling边沿触发。在中断里根据当前是上升沿还是下降沿通过检查htim-Channel和极性状态分别记录时间戳然后计算高电平脉宽和周期。PWM输入模式这是STM32定时器的一个高级功能。它使用两个通道如TI1和TI2一个固定捕获上升沿另一个固定捕获下降沿并自动将两次捕获的值关联起来硬件自动计算周期和脉宽你只需要读取两个寄存器即可。在CubeMX中选择“PWM Input Mode”即可一键配置。这是最省事、最准确的方法。使用DMA解放CPU如果你的信号频率很高比如几百kHzCPU频繁进入中断会消耗大量资源。这时可以使用DMA直接存储器访问来搬运捕获值。将定时器的捕获寄存器CCRx设置为DMA的源地址指定一个内存数组作为目标地址。配置DMA为循环模式每次捕获事件发生时DMA自动把CCRx的值搬到数组里完全不需要CPU干预。你只需要在主循环里定期去检查这个数组计算差值即可。这对于需要同时处理其他复杂任务如电机FOC控制、图形显示的系统来说是必不可少的优化。7. 实测与验证看看效果到底怎么样光说不练假把式。我按照上面的方法用一块STM32F103C8T6核心板在STM32CubeIDE里搭建了工程。信号源使用另一块STM32产生的PWM波通过跳线连接。我测量了几个典型频率点10Hz方波串口输出稳定在10.00 Hz到10.02 Hz之间跳动非常稳定。1kHz方波输出为1000.3 Hz左右误差主要来自信号源和我的系统时钟精度。50kHz方波输出在49980 Hz到50020 Hz之间波动。此时period_ticks的值在20左右±1误差的影响开始显现约5%通过连续测量100次取平均后读数稳定在50005 Hz附近误差大大减小。我也尝试了有毛刺的信号。用一个机械开关产生通断信号由于触点抖动原始读数乱跳。在CubeMX中将输入捕获滤波IC Filter设置为8并在代码中加入“连续3次测量值接近才更新显示”的简单软件滤波后显示值变得非常稳定能够准确反映开关的通断状态。整个过程从新建工程到看到稳定的频率读数如果你熟悉CubeIDE真的可以在15分钟内完成。最难的部分可能不是写代码而是理解原理和如何根据需求调整那几个关键的参数PSC ARR Filter。最后我想说嵌入式开发中有很多这种“四两拨千斤”的技巧。STM32的硬件功能非常强大很多时候我们不需要从零造轮子而是要学会巧妙地利用CubeMX这样的工具和HAL库的封装把复杂的硬件操作简化成我们熟悉的逻辑问题。这个“7行代码的频率计”就是一个很好的起点它帮你打开了输入捕获这扇门后面无论是测转速、解码红外遥控、还是测量超声波回波时间思路都是相通的。希望你能亲手试一试把它改造成适合你自己项目的利器。

相关新闻

深入解析管道(pipe)在进程通信中的核心机制与C++实战应用

深入解析管道(pipe)在进程通信中的核心机制与C++实战应用

1. 从水管到数据流:理解管道通信的本质 想象一下你家里的水管。水从水厂流出来,经过管道,最终从你家的水龙头里流出。在这个过程中,水管本身不生产水,它只负责运输。管道(pipe) 在计算机世界里扮…

2026/7/5 8:21:50 阅读更多 →
Dify + Celery + Redis 异步节点高可用部署(含K8s Operator配置模板与SLO监控看板)

Dify + Celery + Redis 异步节点高可用部署(含K8s Operator配置模板与SLO监控看板)

第一章:Dify自定义节点异步处理的演进逻辑与2026技术图谱Dify 自定义节点的异步处理机制并非一蹴而就,而是随 LLM 应用架构复杂度提升、可观测性需求增强及边缘推理场景普及而持续演进。早期 v0.5.x 版本依赖同步 HTTP 回调,存在超时阻塞与错…

2026/5/17 10:00:55 阅读更多 →
Windows 11 23H2 环境下 TranslucentTB 任务栏透明失效解决方案

Windows 11 23H2 环境下 TranslucentTB 任务栏透明失效解决方案

Windows 11 23H2 环境下 TranslucentTB 任务栏透明失效解决方案 【免费下载链接】TranslucentTB 项目地址: https://gitcode.com/gh_mirrors/tra/TranslucentTB TranslucentTB 作为一款流行的 Windows 任务栏美化工具,提供了丰富的自定义选项。然而在 Windo…

2026/7/5 10:43:43 阅读更多 →

最新新闻

华为云 ECS 上部署 Prometheus + Grafana 监控体系

华为云 ECS 上部署 Prometheus + Grafana 监控体系

ECS 规格: **ECS-Monitor** | 2vCPU / 4GiB(s6.medium.2) | Ubuntu 22.04 | 40GiB SSD | 1 | 跑 Prometheus Grafana Alertmanager | | **ECS-Target** | 2vCPU / 2GiB(s6.small.2) | Ubuntu 22.04 | 40GiB SSD | …

2026/7/6 6:10:48 阅读更多 →
如何用Zotero-Better-Notes实现笔记双向同步:告别手动复制粘贴的终极指南

如何用Zotero-Better-Notes实现笔记双向同步:告别手动复制粘贴的终极指南

如何用Zotero-Better-Notes实现笔记双向同步:告别手动复制粘贴的终极指南 【免费下载链接】zotero-better-notes Everything about note management. All in Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-better-notes 还在为Zotero和Obsidi…

2026/7/6 6:08:46 阅读更多 →
短剧出海中小企业主流广告素材监测工具(2026 最新,预算友好型)

短剧出海中小企业主流广告素材监测工具(2026 最新,预算友好型)

按中小团队适配度、短剧垂直能力、价格、国内访问稳定性分为 4 大类:短剧专精平价工具、通用高性价比工具、大厂专业工具(预算充足再选)、官方免费工具(基础备用)。一、短剧垂直专精(中小短剧团队首选&…

2026/7/6 6:06:46 阅读更多 →
Adobe软件激活新选择:5分钟掌握通用破解工具

Adobe软件激活新选择:5分钟掌握通用破解工具

Adobe软件激活新选择:5分钟掌握通用破解工具 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 还在为Adobe Creative Cloud的高昂订阅费而犹豫吗&#xff…

2026/7/6 6:06:46 阅读更多 →
智能网盘直链解析:重新定义文件下载体验

智能网盘直链解析:重新定义文件下载体验

智能网盘直链解析:重新定义文件下载体验 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷云…

2026/7/6 6:02:46 阅读更多 →
终极网盘下载加速方案:LinkSwift直链解析工具完整指南

终极网盘下载加速方案:LinkSwift直链解析工具完整指南

终极网盘下载加速方案:LinkSwift直链解析工具完整指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…

2026/7/6 6:02:46 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻