2.64 梁山派GD32F470驱动MLX90393三维霍尔传感器:I2C通信、中断与数据采集实战
梁山派GD32F470驱动MLX90393三维霍尔传感器I2C通信、中断与数据采集实战最近在做一个磁场检测的项目用到了MLX90393这款三维霍尔传感器。说实话刚开始接触时看到数据手册里一堆寄存器配置和转换公式确实有点头疼。不过经过一番折腾终于把梁山派GD32F470和MLX90393调通了今天就把整个实战过程分享给大家从硬件连接到软件驱动再到数据采集和转换一步步带你搞定这个传感器。这个教程适合有一定嵌入式基础的开发者特别是正在使用GD32或STM32系列MCU做传感器项目的朋友。我会重点讲解I2C通信的实现、传感器初始化配置、轮询和中断两种数据采集方式以及如何把原始数据转换成实际的高斯值和温度值。1. 硬件准备与连接1.1 硬件清单首先咱们得准备好硬件梁山派GD32F470开发板我用的是立创的梁山派核心是GD32F470ZGT6MLX90393三维霍尔传感器模块这个模块在某宝上就能买到工作电压3.3V功耗很低3mA杜邦线若干用于连接开发板和传感器模块1.2 引脚连接连接很简单就5根线。根据原文提供的引脚对应关系我整理成了下面这个表格接线时一目了然MLX90393模块引脚梁山派引脚功能说明SCLPE2I2C时钟线SDAPE6I2C数据线INTPC13中断输出引脚3.3VAV3V3电源3.3VGNDGND地线注意MLX90393模块的I2C地址可能因批次不同而变化原文中提到的是0x0C作为基地址但实际使用时最好先扫描确认一下。2. 软件工程搭建2.1 工程模板选择为了节省时间我直接用了梁山派开发板资料包里的例程作为基础。具体路径是梁山Pi开发板资料\资源包\08 代码例程-视频注释版-GD32F470版\005 串口打印信息这个例程已经配置好了串口打印功能咱们在此基础上添加MLX90393的驱动代码就行。2.2 文件结构规划在工程里我们需要创建几个关键文件myiic.c/h模拟I2C驱动myexti.c/h外部中断配置用于INT引脚mlx90393.c/hMLX90393传感器驱动3. I2C通信驱动实现MLX90393支持I2C和SPI两种通信方式我这里用的是I2C。因为梁山派的硬件I2C用起来有点麻烦我选择了软件模拟I2C这样移植性更好。3.1 模拟I2C底层驱动先来看看myiic.h头文件这里定义了一些基础宏和函数声明#ifndef __MYIIC_H #define __MYIIC_H #include gd32f4xx.h // 延时宏定义用于I2C时序控制 #define delay100ns {__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();\ __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();} #define delay200ns {delay100ns;delay100ns;} #define delay300ns {delay100ns;delay200ns;} #define delay400ns {delay200ns;delay200ns;} #define delay500ns {delay300ns;delay200ns;} // I2C函数声明 void IIC_Init(void); // 初始化IIC的IO口 void IIC_Start(void); // 发送IIC开始信号 void IIC_Stop(void); // 发送IIC停止信号 void IIC_Send_Byte(uint8_t txd); // IIC发送一个字节 uint8_t IIC_Read_Byte(void); // IIC读取一个字节 uint8_t IIC_Wait_Ack(void); // IIC等待ACK信号 void IIC_Ack(void); // IIC发送ACK信号 void IIC_NAck(void); // IIC不发送ACK信号 #endif在myiic.c中我们实现了具体的I2C时序。这里有个关键点I2C的时序要求比较严格延时时间要控制好。我用的是软件延时通过NOP指令来实现纳秒级延时。#include myiic.h // IIC端口定义 #define RCU_SPI_SCL RCU_GPIOE // SCL时钟线 #define PORT_SPI_SCL GPIOE #define GPIO_SPI_SCL GPIO_PIN_2 #define RCU_SPI_SDA RCU_GPIOE // SDA数据线 #define PORT_SPI_SDA GPIOE #define GPIO_SPI_SDA GPIO_PIN_6 // SDA引脚方向控制宏 #define IIC_SDA_IN gpio_mode_set(PORT_SPI_SDA,GPIO_MODE_INPUT,GPIO_PUPD_PULLUP,GPIO_SPI_SDA) #define IIC_SDA_OUT {gpio_mode_set(PORT_SPI_SDA,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,GPIO_SPI_SDA);\ gpio_output_options_set(PORT_SPI_SDA,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_SPI_SDA);} // SDA电平控制宏 #define IIC_SDA_L gpio_bit_write(PORT_SPI_SDA, GPIO_SPI_SDA, RESET) #define IIC_SDA_H gpio_bit_write(PORT_SPI_SDA, GPIO_SPI_SDA, SET) #define IIC_READ_SDA gpio_input_bit_get(PORT_SPI_SDA, GPIO_SPI_SDA) // SCL电平控制宏 #define IIC_SCL_L gpio_bit_write(PORT_SPI_SCL, GPIO_SPI_SCL, RESET) #define IIC_SCL_H gpio_bit_write(PORT_SPI_SCL, GPIO_SPI_SCL, SET) // IIC初始化函数 void IIC_Init(void) { // 使能GPIO时钟 rcu_periph_clock_enable(RCU_SPI_SCL); rcu_periph_clock_enable(RCU_SPI_SDA); // 配置SCL引脚为推挽输出上拉50MHz速度 gpio_mode_set(PORT_SPI_SCL,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,GPIO_SPI_SCL); gpio_output_options_set(PORT_SPI_SCL,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_SPI_SCL); // 配置SDA引脚 gpio_mode_set(PORT_SPI_SDA,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,GPIO_SPI_SDA); gpio_output_options_set(PORT_SPI_SDA,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_SPI_SDA); gpio_bit_write(PORT_SPI_SDA, GPIO_SPI_SDA, SET); // 初始化为高电平 }I2C的起始信号和停止信号是通信的基础这里我详细解释一下// 产生IIC起始信号 void IIC_Start(void) { IIC_SDA_OUT; // SDA设置为输出模式 IIC_SDA_H; // SDA拉高 IIC_SCL_H; // SCL拉高 delay500ns; // 保持一段时间 IIC_SDA_L; // SDA在SCL高电平时拉低产生起始信号 delay500ns; IIC_SCL_L; // 钳住I2C总线准备发送或接收数据 } // 产生IIC停止信号 void IIC_Stop(void) { IIC_SDA_OUT; // SDA设置为输出模式 IIC_SCL_L; // SCL拉低 IIC_SDA_L; // SDA拉低 delay300ns; // 保持一段时间 IIC_SCL_H; // SCL拉高 delay500ns; IIC_SDA_H; // SDA在SCL高电平时从低变高产生停止信号 delay200ns; }提示I2C起始信号的特点是SCL为高电平时SDA从高变低停止信号是SCL为高电平时SDA从低变高。这个时序一定要把握好。4. MLX90393驱动开发4.1 传感器初始化MLX90393的初始化过程比较关键需要按照特定的顺序发送命令。在mlx90393.c中我实现了完整的初始化流程void MLX90393_Init(void) { uint8_t tmp; // 1. 发送EX命令退出命令 { IIC_Start(); IIC_Send_Byte(IIC_ADD_W); // 发送写地址 if(IIC_Wait_Ack()) { printf(ADDW-Wrong\r\n); IIC_Stop(); return; } IIC_Send_Byte(MLX_EX); // 发送EX命令 if(IIC_Wait_Ack()) { printf(EX-Wrong\r\n); IIC_Stop(); return; } // 读取状态寄存器 IIC_Start(); IIC_Send_Byte(IIC_ADD_R); // 发送读地址 if(IIC_Wait_Ack()) { printf(ADDR-Wrong\r\n); IIC_Stop(); return; } tmp IIC_Read_Byte(); IIC_NAck(); IIC_Stop(); printf(EX-Status:0x%02X\r\n, tmp); delay_1ms(5); } // 2. 发送RT命令复位命令 // ...类似EX命令的流程 // 3. 配置寄存器0 // 4. 配置寄存器1 // 5. 配置寄存器2 // 6. 发送SB命令开始测量 }初始化过程主要做了这几件事EX命令退出当前模式RT命令复位传感器WR命令写入配置寄存器共3个寄存器SB命令启动测量模式4.2 寄存器配置详解MLX90393有3个主要的配置寄存器原文中使用的配置值是uint8_t MLX_REG_R[3][2] { {0x00, 0x70}, // 寄存器0 {0x83, 0xc8}, // 寄存器1 {0x18, 0x1F} // 寄存器2 };这些配置值决定了传感器的工作模式、分辨率、滤波参数等。如果你需要调整测量参数可以修改这些值但要注意参考数据手册中的寄存器定义。4.3 数据读取与转换MLX90393测量完成后我们可以通过RM命令读取数据。读取到的是原始数据需要经过转换才能得到实际的磁场强度高斯值和温度值。// 原始数据结构 struct txyzRaw { uint16_t t; // 温度原始值 uint16_t x; // X轴磁场原始值 uint16_t y; // Y轴磁场原始值 uint16_t z; // Z轴磁场原始值 }; // 转换后的数据结构 struct txyz { float t; // 温度摄氏度 float x; // X轴磁场强度高斯 float y; // Y轴磁场强度高斯 float z; // Z轴磁场强度高斯 }; // 数据转换函数 struct txyz convertRaw(struct txyzRaw raw) { // 从配置寄存器中提取参数 const uint8_t gain_sel (MLX_REG_R[GAIN_SEL_REG][1] GAIN_SEL_MASK) GAIN_SEL_SHIFT; const uint8_t hallconf (MLX_REG_R[HALLCONF_REG][1] HALLCONF_MASK) HALLCONF_SHIFT; const uint8_t res_xyz ((MLX_REG_R[RES_XYZ_REG][0] * 256 MLX_REG_R[RES_XYZ_REG][1]) RES_XYZ_MASK) RES_XYZ_SHIFT; // 计算各轴分辨率 const uint8_t res_x (res_xyz 0) 0x3; const uint8_t res_y (res_xyz 2) 0x3; const uint8_t res_z (res_xyz 4) 0x3; // 获取增益系数 float gain_factor gain_multipliers[gain_sel 0x7]; struct txyz data; // 根据hallconf选择灵敏度系数 float xy_sens, z_sens; switch(hallconf) { default: case 0: xy_sens base_xy_sens_hc0; // 0.196 z_sens base_z_sens_hc0; // 0.316 break; case 0xc: xy_sens base_xy_sens_hc0xc; // 0.150 z_sens base_z_sens_hc0xc; // 0.242 break; } // X轴数据转换Y、Z轴类似 if (tcmp_en) { data.x ((raw.x - 32768.f) * xy_sens * gain_factor * (1 res_x)); } else { switch(res_x) { case 0: case 1: data.x (int16_t)(raw.x) * xy_sens * gain_factor * (1 res_x); break; case 2: data.x ((raw.x - 32768.f) * xy_sens * gain_factor * (1 res_x)); break; case 3: data.x ((raw.x - 16384.f) * xy_sens * gain_factor * (1 res_x)); break; } } // 温度转换公式来自数据手册 data.t 25 (raw.t - 46244.f) / 45.2f; return data; }这个转换函数看起来复杂其实原理很简单根据传感器的配置参数增益、分辨率、霍尔配置等将原始ADC值转换成实际的物理量。5. 两种数据采集模式5.1 轮询模式主动查询轮询模式就是MCU主动去读取传感器数据。这种方式简单直接适合对实时性要求不高的应用。void get_data(void) { uint8_t tmp; struct txyzRaw myraw; struct txyz mytxyz; // 发送RM命令读取测量数据 IIC_Start(); IIC_Send_Byte(IIC_ADD_W); if(IIC_Wait_Ack()) { printf(ADDW-Wrong\r\n); IIC_Stop(); return; } IIC_Send_Byte(MLX_RM); if(IIC_Wait_Ack()) { printf(RM-Wrong\r\n); IIC_Stop(); return; } // 读取数据 IIC_Start(); IIC_Send_Byte(IIC_ADD_R); if(IIC_Wait_Ack()) { printf(ADDR-Wrong\r\n); IIC_Stop(); return; } tmp IIC_Read_Byte(); // 读取状态字节 IIC_Ack(); // 读取温度数据2字节 myraw.t IIC_Read_Byte(); IIC_Ack(); myraw.t 8; myraw.t IIC_Read_Byte(); IIC_Ack(); // 读取X轴数据2字节 myraw.x IIC_Read_Byte(); IIC_Ack(); myraw.x 8; myraw.x IIC_Read_Byte(); IIC_Ack(); // 读取Y轴数据2字节 myraw.y IIC_Read_Byte(); IIC_Ack(); myraw.y 8; myraw.y IIC_Read_Byte(); IIC_Ack(); // 读取Z轴数据2字节 myraw.z IIC_Read_Byte(); IIC_Ack(); myraw.z 8; myraw.z IIC_Read_Byte(); IIC_NAck(); IIC_Stop(); // 数据转换 mytxyz convertRaw(myraw); // 打印结果 printf(RM-Status:0x%02X\r\n, tmp); printf(T:%4.1f, X:%4.1f, Y:%4.1f, Z:%4.1f\r\n, mytxyz.t, mytxyz.x, mytxyz.y, mytxyz.z); }在主函数中我们可以每隔一段时间调用一次get_data()函数来获取数据int main(void) { // 初始化各种外设 nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); systick_config(); led_gpio_config(); usart_gpio_config(115200); IIC_Init(); printf(helloJLC\r\n); delay_1ms(5000); MLX90393_Init(); // 初始化传感器 while(1) { delay_1ms(1000); // 每秒读取一次 get_data(); // 获取并打印数据 } }5.2 中断模式事件触发中断模式效率更高传感器数据准备好后通过INT引脚触发中断MCU在中断服务函数中读取数据。这种方式适合对实时性要求高的应用。首先配置PC13引脚为外部中断输入// 在myexti.c中 void INT_Input_init(void) { // 配置PC13为输入模式用于接收MLX90393的中断信号 rcu_periph_clock_enable(RCU_GPIOC); gpio_mode_set(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_13); // 配置外部中断 rcu_periph_clock_enable(RCU_SYSCFG); syscfg_exti_line_config(EXTI_SOURCE_GPIOC, EXTI_SOURCE_PIN13); exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_FALLING); // 下降沿触发 exti_interrupt_flag_clear(EXTI_13); nvic_irq_enable(EXTI10_15_IRQn, 2, 0); // 使能中断设置优先级 }然后在中断服务函数中读取数据void EXTI10_15_IRQHandler(void) { if(RESET ! exti_interrupt_flag_get(EXTI_13)) { // 读取传感器数据代码与get_data()类似 // ... // 数据转换和打印 mytxyz convertRaw(myraw); printf(RM-Status:0x%02X\r\n, tmp); printf(T:%4.1f, X:%4.1f, Y:%4.1f, Z:%4.1f\r\n, mytxyz.t, mytxyz.x, mytxyz.y, mytxyz.z); // 清除中断标志 exti_interrupt_flag_clear(EXTI_13); } }使用中断模式的主函数int main(void) { // 初始化 nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); systick_config(); led_gpio_config(); usart_gpio_config(115200); IIC_Init(); printf(helloJLC\r\n); delay_1ms(5000); MLX90393_Init(); // 初始化传感器 INT_Input_init(); // 初始化中断 while(1) { // 主循环可以处理其他任务 delay_1ms(1000); gpio_bit_toggle(PORT_LED2, PIN_LED2); // LED闪烁表示程序在运行 } }6. 实际测试与调试6.1 I2C地址扫描由于不同批次的MLX90393模块I2C地址可能不同我写了一个地址扫描函数void get_iic_addr(void) { uint8_t cnt; for(cnt 0x0c; cnt 0x1c; cnt) { IIC_Start(); IIC_Send_Byte(cnt); if(!IIC_Wait_Ack()) { printf(找到I2C设备地址: 0x%02X\r\n, cnt); IIC_Stop(); break; } IIC_Stop(); } }在初始化前调用这个函数可以自动找到传感器的I2C地址。原文中使用的地址是0x18写地址和0x19读地址。6.2 测试结果编译下载程序后通过串口助手可以看到传感器的输出数据。正常工作时会先打印初始化状态EX-Status:0x03 RT-Status:0x07 0WR-Status:0x03 1WR-Status:0x03 2WR-Status:0x03 SB-Status:0x83然后每隔1秒轮询模式或每次数据准备好时中断模式打印测量数据RM-Status:0x83 T:25.2, X:21.2, Y:-108.0, Z:65.4当用磁铁靠近传感器时可以看到XYZ三个方向的磁场强度值发生明显变化T:25.6, X:-2351.8, Y:-8.0, Z:-2078.3 T:25.6, X:-1596.8, Y:898.1, Z:-3190.3 T:25.6, X:-2785.7, Y:-1135.8, Z:1534.56.3 常见问题排查在实际调试中我遇到了几个坑这里分享给大家I2C通信失败检查接线是否正确特别是SCL和SDA不要接反用逻辑分析仪或示波器查看I2C波形确认时序是否正确尝试调整延时时间不同MCU的主频不同可能需要调整读取的数据全是0或异常确认传感器初始化是否成功查看状态寄存器的返回值检查电源电压是否稳定MLX90393需要稳定的3.3V供电确认I2C地址是否正确使用地址扫描函数确认中断不触发检查INT引脚连接是否正确确认中断配置边沿触发类型、优先级等在中断服务函数中及时清除中断标志数据转换错误确认配置寄存器的值是否正确检查convertRaw函数中的转换系数是否与传感器配置匹配温度转换公式来自数据手册如果温度值异常可以检查原始温度数据7. 工程源码获取完整的工程代码可以通过百度网盘下载链接https://pan.baidu.com/s/1pp44yjD1Dhh7U9iZ2a11IA提取码LCKF这个工程包含了所有必要的驱动文件可以直接在梁山派GD32F470开发板上运行。如果你用的是其他GD32或STM32开发板只需要修改引脚定义和底层驱动即可。MLX90393是个很不错的传感器精度高、功耗低特别适合做磁场检测、位置传感等应用。通过这个项目你不仅能学会如何驱动这个传感器还能掌握I2C通信、中断处理、数据转换等嵌入式开发的核心技能。在实际项目中你可以根据需求调整采样率、分辨率等参数让传感器工作在最佳状态。

相关新闻

模块移植手册:基于梁山派GD32F470的0.96寸ST7735彩屏驱动移植实战

模块移植手册:基于梁山派GD32F470的0.96寸ST7735彩屏驱动移植实战

模块移植手册:基于梁山派GD32F470的0.96寸ST7735彩屏驱动移植实战 最近在梁山派GD32F470开发板上折腾一个小屏幕,型号是0.96寸的ST7735驱动IPS彩屏。这种小彩屏价格便宜、显示效果好,非常适合用在各种DIY项目里做状态显示。但拿到手发现&…

2026/7/6 10:12:50 阅读更多 →
Web应用开发实战:打造在线人脸检测平台(集成MogFace-large)

Web应用开发实战:打造在线人脸检测平台(集成MogFace-large)

Web应用开发实战:打造在线人脸检测平台(集成MogFace-large) 你有没有想过,自己动手做一个能识别照片里人脸的网站?听起来好像很高深,需要懂很多复杂的算法和服务器知识。其实,借助现在成熟的AI…

2026/7/5 22:52:43 阅读更多 →
达摩院PALM春联模型实战教程:添加AI评分模块(平仄/对仗/意境)

达摩院PALM春联模型实战教程:添加AI评分模块(平仄/对仗/意境)

达摩院PALM春联模型实战教程:添加AI评分模块(平仄/对仗/意境) 过年写春联,最头疼的是什么?不是想不出好词,而是好不容易憋出一副,却不知道平仄对不对、对仗工不工整、意境好不好。自己看着挺美…

2026/7/4 22:17:57 阅读更多 →

最新新闻

YOLOv5 6.2 部署实战:RTX 3060 单卡实现 30 FPS 实时检测(附环境配置)

YOLOv5 6.2 部署实战:RTX 3060 单卡实现 30 FPS 实时检测(附环境配置)

YOLOv5 6.2 部署实战:RTX 3060 单卡实现30 FPS实时检测全流程解析1. 环境配置与性能优化基础在消费级显卡上实现高效目标检测需要精细的软硬件协同优化。我们以RTX 3060(12GB显存)为例,展示从零开始的完整部署流程。首先需要构建稳…

2026/7/6 10:11:39 阅读更多 →
Plone 4.3升级:内容运营自主化与数字韧性构建

Plone 4.3升级:内容运营自主化与数字韧性构建

1. 项目概述:Plone 4.3 升级不是“打补丁”,而是内容运营能力的结构性升级 我从2008年开始接触Plone,亲手部署过从2.5到4.2的每一次大版本迁移,也带团队做过二十多个高校和科研机构的Plone站点重构。所以当Plone 4.3正式发布时&a…

2026/7/6 10:09:35 阅读更多 →
Midscene视觉驱动浏览器自动化:原理、实战与性能优化指南

Midscene视觉驱动浏览器自动化:原理、实战与性能优化指南

1. 项目概述:当AI“看见”并“操作”你的浏览器浏览器自动化,这个概念对很多开发者、测试工程师甚至运营同学来说都不陌生。从早期的Selenium,到后来的Puppeteer、Playwright,我们一直在尝试用代码模拟人类在浏览器中的点击、输入…

2026/7/6 10:03:25 阅读更多 →
输电线路绝缘子YOLO训练数据集:含完好与破损实物图及标准txt标签

输电线路绝缘子YOLO训练数据集:含完好与破损实物图及标准txt标签

本文还有配套的精品资源,点击获取 简介:输电线路巡检场景下的绝缘子检测专用YOLO格式数据集,覆盖正常和缺陷两类真实拍摄图像,图片分辨率适中,背景为典型野外架空线路环境,具备实际部署所需的复杂背景与…

2026/7/6 10:01:21 阅读更多 →
Windows任务栏透明美化终极指南:5种模式让你的桌面焕然一新

Windows任务栏透明美化终极指南:5种模式让你的桌面焕然一新

Windows任务栏透明美化终极指南:5种模式让你的桌面焕然一新 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 厌倦了Windows系统…

2026/7/6 9:59:19 阅读更多 →
医生用AI不是偷懒,是临床决策的静默升级

医生用AI不是偷懒,是临床决策的静默升级

1. 这不是医德滑坡,而是临床决策方式的静默升级上周陪媳妇去西安一家三甲医院看胃部不适,挂的是消化内科的专家号——抢了整整两天才成功。从挂号、签到、候诊,到助理初筛登记,流程和十年前几乎没变。但就在我们坐在诊室外长椅上等…

2026/7/6 9:59:19 阅读更多 →

日新闻

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/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

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

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

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

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

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

2026/7/6 6:52:56 阅读更多 →

月新闻