STM32-ADC-多通道电压采集实战指南
1. 从零开始为什么你需要多通道ADC采集大家好我是老李在嵌入式这行摸爬滚打十几年了用过不少单片机。今天想和大家聊聊STM32里一个既基础又特别实用的功能——ADC多通道电压采集。很多刚入门的朋友可能跟着教程点亮了LED调通了串口但一到要读取真实世界的模拟信号比如温度、光照强度、电池电压就有点犯怵。觉得ADC寄存器配置复杂多通道切换更是云里雾里。其实啊这事儿没你想的那么难一旦搞明白了你会发现它就像给你的单片机装上了“感官”能同时“听”到好几个地方的声音用处大着呢。想象一下这些场景你想做个智能花盆需要同时监测土壤的湿度和环境的光照或者搞个小车要实时读取多个红外传感器的距离信号再或者搭建一个简易的电源监控板需要采集好几路电池的电压。这些场景都有一个共同点需要同时处理多个连续变化的模拟信号。如果你只用单通道ADC那就得来回切换、等待效率低还容易错过关键数据。而STM32内置的ADC模块天生就支持多通道采集能帮你优雅地解决这个问题。它允许你几乎在同一时间通过扫描模式对多个引脚上的电压进行数字化转换把现实世界的连续量变成单片机里可以轻松处理的数字。接下来我就手把手带你从硬件连接到软件编程把多通道ADC采集这个技能稳稳拿下。2. 硬件连接给你的信号找个“家”动手写代码之前咱们得先把硬件线路接明白。这是所有工作的基础线接错了代码写得再漂亮也是白搭。多通道采集顾名思义就是要把多个模拟信号源连接到STM32不同的ADC通道引脚上。2.1 引脚定位与信号源选择首先你得知道你的信号要接到哪里。以最常见的STM32F103C8T6蓝色小药丸为例它内置了2个12位的ADCADC1和ADC2ADC1有最多18个通道其中10个是外部通道对应着具体的GPIO口。比如ADC1的通道0IN0对应PA0通道1IN1对应PA1以此类推。你需要查阅你所使用芯片的数据手册Datasheet中的“引脚定义”章节或者参考参考手册Reference Manual的ADC章节找到类似“ADC1_IN0”这样的标注它告诉你哪个物理引脚具备ADC功能。找到引脚后信号源怎么选呢我这里以最常用、最安全的两种为例电位器可变电阻这是学习ADC的“启蒙老师”。它的中间抽头输出电压在0V到VCC通常是3.3V之间连续可调。把它接到ADC引脚转动旋钮就能看到数值变化非常直观。模拟传感器比如热敏电阻配合分压电阻测量温度、光敏电阻测量光照、某些型号的模拟量输出型温湿度传感器等。它们的输出通常也是一个0-3.3V或更小范围的电压信号。注意STM32的ADC引脚输入电压范围绝对不能超过芯片的供电电压VDD通常是3.3V也绝不能低于0V地。接入超过3.3V的电压可能会永久损坏芯片如果你的信号源电压范围更大比如0-5V你必须使用电阻分压电路或者运算放大器进行电平转换把它缩放到0-3.3V以内。2.2 实战接线图与滤波技巧假设我们要采集3路信号一路电位器用于调压一路光敏电阻测量光照一路备用。我们选择ADC1的通道0PA0、通道1PA1和通道2PA2。接线非常简单电位器的中间抽头 → PA0另外两头分别接3.3V和GND。光敏电阻与一个固定电阻比如10K串联在3.3V和GND之间两者的连接点即分压点→ PA1。PA2可以先空着或者接一个你想测试的其它信号。光这样接就够了吗对于要求不高的场合可以但在实际项目尤其是环境有点干扰的情况下我强烈建议你在每个ADC输入引脚上加一个简单的RC低通滤波。具体做法是在引脚和地之间接一个0.1uF104的陶瓷电容。这个电容就像一个小水库能吸收掉电源和信号线上的高频毛刺噪声让ADC读到更稳定、更干净的值。别小看这个小小的电容它往往能解决你数值跳来跳去的“灵异事件”。如果你的信号线很长或者环境电磁干扰严重甚至可以考虑在信号进入引脚前串联一个100欧姆左右的小电阻和这个对地电容一起构成滤波电路。3. 软件配置核心CubeMX图形化初始化以前用标准库配置ADC多通道要填一堆寄存器顺序还不能错对新手不太友好。现在有了STM32CubeMX这个神器配置过程变得可视化不容易出错。咱们就以STM32F103C8T6和ADC1的三通道扫描为例走一遍流程。3.1 CubeMX工程基础设置首先在CubeMX里选好你的芯片型号。在Pinout Configuration视图在左侧边栏找到Analog下的ADC1。在IN0、IN1、IN2对应的引脚PA0, PA1, PA2上勾选将它们设置为ADC输入模式。你会看到这些引脚颜色变成了绿色。点击左侧的ADC1本身进入参数配置。3.2 关键参数详解与配置这里有几个关键设置理解了它们你就掌握了多通道采集的精髓Scan Conversion Mode扫描转换模式必须使能Enable。这是多通道采集的灵魂开启后ADC会按照你设定的通道顺序自动一个接一个地转换所有被选中的通道。Continuous Conversion Mode连续转换模式这里看需求。如果使能ADC在完成一轮所有通道的转换后会自动立刻开始下一轮永不停歇。如果不使能则转换一轮后停止需要再次触发软件或硬件才会开始下一轮。我们先选Enable让它连续跑起来看看效果。DMA Continuous RequestsDMA连续请求如果你打算使用DMA来搬运ADC的结果这是高效且常用的方式这里要Enable。我们稍后会用到DMA。Number Of Conversion转换数量这里填3因为我们有3个通道。Rank序列这是配置通道顺序的地方。点击Add添加3个转换序列。Rank 1:Channel选Channel 0(对应PA0)Sampling Time采样时间可以先选个Cycles 55.5这个时间越长采样越准确但转换速度越慢。对于电位器、光敏电阻这类变化不快的信号这个值足够了。Rank 2:Channel选Channel 1(对应PA1)Sampling Time同样设为Cycles 55.5。Rank 3:Channel选Channel 2(对应PA2)Sampling Time设为Cycles 55.5。Data Alignment数据对齐选Right alignment右对齐。这样12位的转换结果0-4095就存放在16位数据寄存器的低12位我们直接读取这个值就是转换结果计算起来最直观。End Of Conversion Selection转换结束选择如果用了DMA通常选EOC flag at the end of all conversions在所有转换结束后产生EOC标志。如果不用DMA想每个通道转换完都中断一次可以选EOC flag at the end of each conversion。配置好后我们还需要配置DMA。在左侧边栏找到DMA Settings点击Add选择ADC1模式选择Circular循环模式这样DMA会自动循环搬运数据无需重复配置。数据宽度都选Word字即32位但我们的数据是16位有效这样放得下。最后在Project Manager里设置好工程名、路径、IDE比如MDK-ARM V5生成代码。CubeMX会帮你生成所有初始化代码包括GPIO、ADC、DMA和时钟的配置非常省心。4. 代码实战三种数据读取方式剖析生成了代码我们就要在main.c里写应用逻辑了。多通道ADC的数据读取主要有三种方式阻塞等待、中断通知和DMA搬运。我挨个给你讲清楚并说说各自的应用场景。4.1 方式一阻塞式单次读取理解原理这是最简单、最低效但最适合理解过程的方式。它不利用扫描和连续模式而是手动切换通道并等待转换完成。// 假设已用CubeMX初始化了ADC但未开启扫描和连续模式 uint16_t adc_values[3]; void ADC_ReadThreeChannels_Blocking(void) { HAL_StatusTypeDef status; // 读取通道0 (PA0) status HAL_ADC_Start(hadc1); // 启动ADC if (status ! HAL_OK) { /* 错误处理 */ } status HAL_ADC_PollForConversion(hadc1, 10); // 等待转换完成超时10ms if (status HAL_OK) { adc_values[0] HAL_ADC_GetValue(hadc1); // 获取值 } HAL_ADC_Stop(hadc1); // 停止 // 手动切换到通道1并读取... 重复上述过程需要重新配置通道 // 这种方法非常笨拙实际多通道中绝不这样用 }这种方式在while(1)循环里调用会严重阻塞程序CPU大部分时间都在空等无法处理其他任务。它只适用于单通道、非实时、且对效率要求极低的场合。我们用它只是为了理解“启动-等待-读取”这个基本流程。4.2 方式二中断方式读取我们启用ADC的扫描模式和连续转换模式并让它在每转换完一个通道就进入一次中断。在中断服务函数里我们读取数据并自己管理通道索引。// 在CubeMX中需使能扫描模式、连续模式并将“End Of Conversion Selection”设为“Each conversion” // 同时在NVIC设置中使能ADC全局中断 uint16_t adc_buffer[3]; // 存储三个通道的结果 uint8_t adc_ch_index 0; // 当前通道索引 // 在main函数初始化后启动ADC HAL_ADC_Start_IT(hadc1); // ADC转换完成中断回调函数弱函数需重写 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { if (hadc-Instance ADC1) { adc_buffer[adc_ch_index] HAL_ADC_GetValue(hadc); // 读取当前通道值 adc_ch_index; if (adc_ch_index 3) { adc_ch_index 0; // 一轮采集完成复位索引 // 在这里可以处理已经集满一轮的 adc_buffer 数据比如计算、发送等 // 例如Process_ADC_Data(adc_buffer); } } }中断方式比阻塞式好CPU不用傻等转换完成后才被通知去取数。但它仍然需要CPU频繁进入中断上下文每个通道一次如果通道多、转换速度快中断开销会变得很大可能影响其他关键任务的实时性。4.3 方式三DMA方式推荐实战方案这是最专业、最高效的方式也是项目中最常用的。ADC转换完成的数据直接由DMA控制器自动搬运到我们指定的内存数组里完全不需要CPU干预。CPU只需要在需要的时候去读取这个数组里的最新数据即可。// 在CubeMX中使能扫描模式、连续模式使能DMA循环模式 // “End Of Conversion Selection” 通常设为 “All conversions”。 #define ADC_CHANNEL_NUM 3 uint16_t adc_dma_buffer[ADC_CHANNEL_NUM]; // DMA搬运的目标数组 // 在main函数初始化部分启动带DMA的ADC if (HAL_ADC_Start_DMA(hadc1, (uint32_t*)adc_dma_buffer, ADC_CHANNEL_NUM) ! HAL_OK) { Error_Handler(); } // 此后adc_dma_buffer 这个数组就会被DMA自动、循环地更新。 // 数组下标0对应Rank1的通道PA0下标1对应Rank2PA1下标2对应Rank3PA2。 // 在主循环中你可以安全地随时读取这个数组 while (1) { float vol_ch0 adc_dma_buffer[0] * 3.3f / 4095.0f; // 转换通道0电压 float vol_ch1 adc_dma_buffer[1] * 3.3f / 4095.0f; // 转换通道1电压 float vol_ch2 adc_dma_buffer[2] * 3.3f / 4095.0f; // 转换通道2电压 printf(CH0: %.2fV, CH1: %.2fV, CH2: %.2fV\r\n, vol_ch0, vol_ch1, vol_ch2); HAL_Delay(200); // 延时一下避免打印太快 }DMA方式简直是“神器”。ADC在后台默默工作DMA像一条传送带把数据稳稳地送到内存仓库。你的主程序while(1)想什么时候来仓库取“货”都行而且取到的永远是最新一批。CPU被彻底解放出来可以去处理更复杂的逻辑、运行算法、响应人机交互等。对于多通道、高速、连续采集的需求DMA是唯一正确的选择。5. 数据处理与校准让读数更精准拿到了原始的ADC数值比如adc_dma_buffer[0] 2048我们通常需要把它转换成有实际意义的物理量比如电压值。同时为了提升精度还需要了解一些校准和滤波的技巧。5.1 电压换算与参考电压最基础的换算公式大家都会电压 (ADC原始值 / ADC最大分辨率) * 参考电压。 对于12位ADC最大分辨率是40952^12 - 1。参考电压Vref默认通常连接到芯片的VDD3.3V。所以公式就是Voltage ADC_Value * 3.3 / 4095。但这里有个关键点这个3.3V准吗你的LDO稳压芯片输出的3.3V可能有细微偏差比如实际是3.28V或3.32V。而且这个电压会随负载和温度轻微波动。这直接影响了ADC的测量基准。对于精度要求高的场合比如测量电池电压有两种方法使用内部参考电压很多STM32芯片内部有一个高精度的参考电压源例如STM32F1系列约1.2VF4系列约1.2V。你可以先测量这个内部参考电压对应的ADC值然后反推出实际的VDD电压。公式是VDD_actual (Vrefint_cal * 3.3) / ADC_Value_of_Vrefint。其中Vrefint_cal是出厂时校准并存放在系统存储区的值。用这个计算出的VDD_actual去作为参考电压精度会高很多。使用外部精密基准源在PCB上单独放置一颗高精度、低温漂的基准电压芯片如REF3033输出3.300V将其连接到STM32的Vref引脚如果芯片有独立Vref引脚的话。这是获得最高精度的方法但增加了成本和布局复杂度。5.2 软件滤波与数据平滑即使硬件连接和参考电压都很完美ADC读值依然会有微小的跳动这是模数转换本身固有的噪声。我们可以用简单的软件滤波来让数据更平滑显示更稳定。均值滤波这是最常用的方法。连续采样N次然后取平均值。#define SAMPLE_COUNT 10 uint32_t sum 0; uint16_t filtered_value 0; for(int i0; iSAMPLE_COUNT; i) { sum adc_dma_buffer[0]; // 假设我们滤波通道0 // 如果需要可以在这里加微小延时确保不是瞬时连续采样 } filtered_value sum / SAMPLE_COUNT;均值滤波能有效抑制随机噪声但会引入一定的延迟需要累积N个样本。N越大越平滑但反应越慢。滑动平均滤波维护一个固定长度的队列每次新数据进来就剔除最老的一个数据然后计算队列中所有数据的平均值。这种方法既能平滑数据又能比简单均值滤波更快地反映输入信号的变化趋势在嵌入式系统中非常实用。一阶低通滤波软件实现这是一种模拟硬件RC滤波器的数字方法。公式是Y(n) α * X(n) (1-α) * Y(n-1)。其中X(n)是本次采样值Y(n-1)是上次滤波输出Y(n)是本次滤波输出α是滤波系数0α1。α越接近1滤波效果越弱响应越快α越接近0滤波效果越强响应越慢。这种方法计算量小效果不错非常适合在MCU中运行。在实际项目中我通常会先使用均值滤波或滑动平均做初步平滑如果对动态响应有要求再结合一阶低通滤波。你可以根据信号的特性变化快慢和系统实时性要求来选择和调整参数。6. 避坑指南与性能优化搞技术这么多年坑踩得多了也就成了指南。下面这些点是我在项目实践中总结出来的希望能帮你少走弯路。坑一采样时间设置不当导致读数不准症状读数不稳定跳动大或者当信号源内阻较大时读数明显偏低。根源在于ADC内部的采样电容没有充足的时间被充电到外部信号的电压。解决方法在CubeMX里增加Sampling Time。对于高内阻信号源比如用大电阻分压的电路需要设置更长的采样周期例如Cycles 239.5或Cycles 480.5。官方数据手册的ADC章节会给出不同条件下建议的最小采样时间值得参考。坑二GPIO模式配置错误ADC通道对应的GPIO必须配置为模拟输入模式Analog Mode而不是浮空输入Input floating或其他模式。在CubeMX中正确勾选后生成的代码会自动配置但如果你是自己用寄存器或标准库配置务必检查这一点。模拟输入模式会断开内部上拉/下拉电阻使IO口完全连接到ADC内部电路。坑三电源噪声干扰ADC的精度极度依赖干净、稳定的电源。如果MCU的模拟电源VDDA和数字电源VDD是连在一起的数字电路的高速开关噪声很容易耦合到模拟部分导致ADC底噪增大。优化建议PCB布局时确保VDDA引脚通过一个磁珠或0欧电阻从VDD分离并紧挨引脚放置一个10uF钽电容和一个0.1uF陶瓷电容到地。将ADC相关的模拟地VSSA与数字地VSS在芯片下方单点连接。让ADC的采样时钟ADCCLK远离高频的系统时钟分频可以单独用一个较低频率的时钟源如PLL分频后的专用时钟。坑四DMA缓冲区溢出或数据错位使用DMA时如果主程序读取数据的速度跟不上ADC填充缓冲区的速度旧数据会被新数据覆盖导致你读到非预期的数据组合。确保你的处理逻辑如计算、打印耗时必须小于ADC完成一轮所有通道转换的时间。如果处理很耗时可以考虑使用双缓冲区Ping-Pong BufferDMA填满缓冲区A后自动切换到缓冲区B继续填充同时CPU处理A的数据。HAL库的高级DMA模式支持这个功能。性能优化提示降低ADC分辨率如果项目对精度要求不高比如只做阈值判断可以将ADC配置为10位、8位或6位分辨率。分辨率越低单次转换时间越短可以提高采样率。合理分配通道顺序在扫描序列Rank里把需要更高采样率的通道放在前面。因为ADC在转换序列时是从Rank1开始顺序执行的。使用定时器触发对于需要严格等间隔采样的应用如音频采集不要用软件延时或循环触发而应该使用一个硬件定时器如TIM来触发ADC转换。这样采样间隔极其精确不受其他代码执行时间的影响。在CubeMX的ADC配置里找到External Trigger Conversion Source选择对应的定时器触发事件即可。多通道ADC采集是STM32连接模拟世界的关键桥梁。从硬件接线的谨慎到CubeMX的直观配置再到三种编程模式的深入理解最后到数据处理和避坑优化每一步都需要动手实践和思考。我最开始用的时候也遇到过数值乱跳、DMA数据不对齐的问题都是靠着示波器看信号、一步步调试代码解决的。现在我已经能在项目里熟练地用DMA同时处理七八路传感器信号了。记住嵌入式开发就是这样理论结合实践多动手多调试遇到问题别怕查资料、看手册、问社区每一个坑爬过去你的功力就增长一分。希望这篇指南能成为你手边有用的工具帮你把想法顺利变成现实。

相关新闻

Qwen3-Reranker-0.6B实操手册:重排序结果可视化Dashboard搭建(Streamlit版)

Qwen3-Reranker-0.6B实操手册:重排序结果可视化Dashboard搭建(Streamlit版)

Qwen3-Reranker-0.6B实操手册:重排序结果可视化Dashboard搭建(Streamlit版) 1. 项目概述与价值 你是否曾经遇到过这样的问题:在RAG系统中,虽然检索到了很多相关文档,但不知道哪些才是最相关的&#xff1f…

2026/7/5 13:03:53 阅读更多 →
SVGOMG:前端开发者的矢量图形优化利器

SVGOMG:前端开发者的矢量图形优化利器

SVGOMG:前端开发者的矢量图形优化利器 【免费下载链接】svgomg Web GUI for SVGO 项目地址: https://gitcode.com/gh_mirrors/sv/svgomg 在现代Web开发中,矢量图形格式(Scalable Vector Graphics,一种基于XML的图像格式&am…

2026/7/5 8:01:20 阅读更多 →
重构Cursor AI注册流程:TempMailPlus验证码自动化解决方案

重构Cursor AI注册流程:TempMailPlus验证码自动化解决方案

重构Cursor AI注册流程:TempMailPlus验证码自动化解决方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your…

2026/7/5 19:00:03 阅读更多 →

最新新闻

基于SSM实现的网上书城系统 基于SSM的宾馆信息管理系统 基于SSM实现的社团管理系统 基于SSM的超市进销存管理系统 基于SSM的在校生职业走向调查分析系统 基于SSM实现的员工管理系统

基于SSM实现的网上书城系统 基于SSM的宾馆信息管理系统 基于SSM实现的社团管理系统 基于SSM的超市进销存管理系统 基于SSM的在校生职业走向调查分析系统 基于SSM实现的员工管理系统

基于springbootvue的在线问卷调查管理系统 基于ssm的鲜花销售系统 基于ssm的外卖点餐订餐管理系统 基于springboot的个人博客系统 基于SSM的房屋租赁管理系统 项目合集 提取码: 32y6 更多资料汇总 提取码: dk3h

2026/7/6 7:57:17 阅读更多 →
类型断言和非空断言

类型断言和非空断言

类型断言类型断言 相当于告诉 TypeScript 编译器:"相信我,我知道这个值是什么类型"。它不会改变变量的实际值,只影响编译时的类型检查。as 语法 let length: number (value as string).length;处理联合类型interface Cat {name: s…

2026/7/6 7:57:17 阅读更多 →
6DoF运动追踪:IIM-42652 IMU与PIC18F86K90实战指南

6DoF运动追踪:IIM-42652 IMU与PIC18F86K90实战指南

1. 从3D到6DoF:IMU传感器的进阶应用在运动追踪和姿态检测领域,3D空间感知已经不能满足日益增长的需求。最近我在一个机器人导航项目中,需要将传统的3D定位升级为6自由度(6DoF)追踪系统。这个过程中,IIM-426…

2026/7/6 7:55:17 阅读更多 →
小默说AI(22)RLHF——让AI学会人类价值观

小默说AI(22)RLHF——让AI学会人类价值观

RLHF——让AI学会人类价值观 上集我们讲了强化学习的基本概念:智能体在环境中试错,通过奖励信号调整行为策略。但一个关键问题浮现出来了——奖励从哪来?如果每件事都要人工设计奖励函数,那工作量岂不要命?这就是RLHF要解决的问题。 RLHF,全称Reinforcement Learned Fr…

2026/7/6 7:55:17 阅读更多 →
WSEN-ISDS传感器与PIC18F96J94微控制器的硬件架构与运动融合算法

WSEN-ISDS传感器与PIC18F96J94微控制器的硬件架构与运动融合算法

1. WSEN-ISDS传感器与PIC18F96J94微控制器的硬件架构解析WSEN-ISDS(型号2536030320001)是一款六轴MEMS惯性测量单元(IMU),采用电容式传感原理,集成了三轴加速度计和三轴陀螺仪。其核心参数包括:加速度计量程&#xff1…

2026/7/6 7:53:17 阅读更多 →
ICM-42688-P与PIC32MZ组合在工业运动控制中的应用

ICM-42688-P与PIC32MZ组合在工业运动控制中的应用

1. ICM-42688-P与PIC32MZ1024EFF144的黄金组合解析在工业自动化和机器人控制领域,精确的运动感知能力往往决定了整个系统的性能上限。TDK InvenSense的ICM-42688-P六轴MEMS惯性测量单元(IMU)与Microchip的PIC32MZ1024EFF144微控制器形成的技术组合,正在重…

2026/7/6 7:51:16 阅读更多 →

日新闻

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/6 6:52:56 阅读更多 →

月新闻