如何用STM32和蓝牙模块打造手机遥控智能小车(附完整代码)
从零到一用STM32与蓝牙模块构建你的第一台手机遥控智能小车你是否曾想过自己动手打造一台能完全听从手机指令的智能小车那种指尖轻触屏幕小车便随之灵动转向、进退自如的操控感不仅充满乐趣更是踏入嵌入式开发与物联网世界绝佳的实践项目。对于许多刚接触STM32的开发者或电子爱好者而言智能小车项目就像一座桥梁连接了抽象的代码逻辑与看得见、摸得着的物理世界。它不只是一个玩具而是一个集成了微控制器编程、传感器应用、无线通信和电机控制等多个核心技术的综合性平台。今天我们将聚焦于其中最经典也最实用的功能之一蓝牙遥控。相较于WiFi或4G蓝牙以其低功耗、点对点直连、开发简便的特性成为近距离无线控制的理想选择。我们将抛开复杂的多模块集成深入浅出地讲解如何从硬件选型、电路搭建到软件编程、手机端交互一步步构建一个稳定可靠的蓝牙遥控智能小车。无论你是想为毕业设计增添亮点还是渴望掌握一项实用的嵌入式技能这篇文章都将为你提供一条清晰的路径和可直接复用的代码方案。1. 项目蓝图硬件选型与系统架构设计在动手焊接第一根导线之前清晰的蓝图至关重要。一个成功的项目始于合理的硬件选型和稳固的系统架构。对于我们的蓝牙遥控智能小车核心目标明确通过手机APP发送指令经由蓝牙模块传输给STM32主控最终驱动电机执行动作。1.1 核心硬件清单与选型考量首先我们来看看需要准备哪些“食材”。一份精心挑选的硬件清单是项目成功的基石。主控制器STM32系列单片机STM32家族庞大对于小车项目我们无需追求最高性能稳定性和性价比是关键。推荐使用STM32F103C8T6常被称为“蓝色药丸”或“Blue Pill”。它基于ARM Cortex-M3内核拥有64KB Flash和20KB RAM72MHz的主频足以流畅处理电机控制、蓝牙数据解析等任务且社区资源极其丰富价格亲民。蓝牙模块HC-05或HC-06这是最常用的串口透传蓝牙模块二者功能相似。主要区别在于HC-05既可作主机主动连接其他设备也可作从机等待被连接功能更灵活。HC-06仅作为从机设置更简单。对于单纯的手机遥控小车HC-06完全够用且配置步骤更少。我们选择它。电机驱动模块L298N或TB6612FNG电机驱动负责将STM32微弱的IO信号放大以驱动直流电机。L298N经典双H桥驱动芯片驱动能力强但发热较大需要散热片。TB6612FNG新一代驱动芯片效率高、发热小支持更大电流且控制逻辑更简洁。考虑到效率和体积TB6612FNG是更优的选择。它仅需两个PWM信号和一个方向信号即可控制一个电机的转速和转向大大简化了代码。电源系统锂电池与稳压模块小车需要移动必须使用电池。推荐使用7.4V 2S锂电池组。需要注意的是STM32和多数模块需要3.3V或5V供电因此需要一个降压稳压模块如LM2596将电池电压降至5V再通过STM32板载的LDO得到3.3V。其他必要组件直流减速电机与车轮TT马达套装是最常见的选择。小车底盘亚克力或金属底盘用于固定所有部件。万用板、杜邦线、开关等。注意采购时务必确认电机的工作电压与你的电池电压匹配并确保电机驱动模块的持续输出电流大于电机的堵转电流否则极易烧毁驱动芯片。1.2 系统连接架构图理解各模块如何连接是硬件搭建的核心。下图清晰地展示了信号与电源的流向[7.4V锂电池] | v [降压模块 (至5V)] | ------------------------------ | | v v [STM32F103C8T6] [TB6612FNG驱动] (3.3V来自板载LDO) | | | UART2_TX ---- RXD [HC-06蓝牙模块] |---- [右电机A] UART2_RX ---- TXD |---- [右电机B] | |---- [左电机A] PWM1/GPIO ---- 控制引脚组 |---- [左电机B] | | [USB转TTL] (仅用于初始调试) [7.4V直连驱动电源端]关键连接说明电源路径锂电池同时为驱动模块VM引脚和降压模块供电。降压后的5V为STM32的5V或Vin引脚供电同时也可为蓝牙模块的VCC供电注意模块电压是3.3V还是5V。蓝牙连接HC-06的TXD接STM32的PA3UART2_RXRXD接STM32的PA2UART2_TX。GND共地。电机驱动连接以TB6612FNG为例每个电机需要三个信号PWM速度、AIN1/BIN1方向1、AIN2/BIN2方向2。这些信号连接到STM32的任意GPIO和定时器PWM输出引脚。2. 软件基石STM32开发环境与基础驱动硬件准备就绪后我们进入软件世界。一个高效的开发环境和可靠的底层驱动是项目稳步推进的保障。2.1 搭建开发环境STM32CubeIDE与HAL库对于初学者和快速原型开发ST官方推出的STM32CubeIDE是首选。它集成了代码编辑、编译、调试和STM32CubeMX图形化配置工具大大降低了开发门槛。初始化工程步骤启动STM32CubeIDE创建新工程选择你的芯片型号STM32F103C8Tx。在Pinout Configuration视图中进行关键配置SYS-Debug: 选择Serial Wire用于ST-Link调试。RCC-High Speed Clock (HSE): 选择Crystal/Ceramic Resonator使用外部晶振。USART2模式选择Asynchronous这是连接HC-06的串口。参数通常设置为波特率9600数据位8停止位1无校验需与蓝牙模块默认设置一致。TIM1或TIM3选择某个通道如CH1为PWM Generation CH1用于电机调速。在Parameter Settings中设置预分频器和周期值以产生合适频率的PWM例如1kHz。配置控制电机方向的GPIO引脚如PA4,PA5,PB0,PB1为GPIO_Output。点击Project Manager设置工程名和路径Toolchain/IDE选择STM32CubeIDE然后生成代码。生成后的工程已经包含了所有外设的初始化代码HAL库驱动我们可以直接在main.c的/* USER CODE BEGIN */和/* USER CODE END */之间添加业务逻辑。2.2 编写电机驱动与PWM控制函数电机控制是小车运动的基础。我们首先封装一个易于调用的电机驱动层。/* USER CODE BEGIN PV */ // 定义电机控制引脚 #define MOTOR_R_PWM_PIN GPIO_PIN_8 // TIM1_CH1 - PA8 #define MOTOR_R_PWM_PORT GPIOA #define MOTOR_R_IN1_PIN GPIO_PIN_4 #define MOTOR_R_IN1_PORT GPIOA #define MOTOR_R_IN2_PIN GPIO_PIN_5 #define MOTOR_R_IN2_PORT GPIOA #define MOTOR_L_PWM_PIN GPIO_PIN_9 // TIM1_CH2 - PA9 #define MOTOR_L_PWM_PORT GPIOA #define MOTOR_L_IN1_PIN GPIO_PIN_0 #define MOTOR_L_IN1_PORT GPIOB #define MOTOR_L_IN2_PIN GPIO_PIN_1 #define MOTOR_L_IN2_PORT GPIOB // 定义电机运动状态 typedef enum { MOTOR_STOP, MOTOR_FORWARD, MOTOR_BACKWARD } Motor_State; /* USER CODE END PV */ /* USER CODE BEGIN 0 */ // 控制单个电机的函数 void Motor_Control(GPIO_TypeDef* IN1_PORT, uint16_t IN1_PIN, GPIO_TypeDef* IN2_PORT, uint16_t IN2_PIN, Motor_State state, uint8_t speed) { // speed: 0-100对应PWM占空比0-100% uint16_t pwm_value (speed * 999) / 100; // 假设PWM周期ARR设置为999 switch(state) { case MOTOR_FORWARD: HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_SET); HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); __HAL_TIM_SET_COMPARE(htim1, TIM_CHANNEL_1, pwm_value); // 需根据具体通道修改 break; case MOTOR_BACKWARD: HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_SET); __HAL_TIM_SET_COMPARE(htim1, TIM_CHANNEL_1, pwm_value); break; case MOTOR_STOP: default: HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); __HAL_TIM_SET_COMPARE(htim1, TIM_CHANNEL_1, 0); break; } } // 封装小车动作函数 void Car_Stop() { Motor_Control(MOTOR_R_IN1_PORT, MOTOR_R_IN1_PIN, MOTOR_R_IN2_PORT, MOTOR_R_IN2_PIN, MOTOR_STOP, 0); Motor_Control(MOTOR_L_IN1_PORT, MOTOR_L_IN1_PIN, MOTOR_L_IN2_PORT, MOTOR_L_IN2_PIN, MOTOR_STOP, 0); } void Car_Forward(uint8_t speed) { Motor_Control(MOTOR_R_IN1_PORT, MOTOR_R_IN1_PIN, MOTOR_R_IN2_PORT, MOTOR_R_IN2_PIN, MOTOR_FORWARD, speed); Motor_Control(MOTOR_L_IN1_PORT, MOTOR_L_IN1_PIN, MOTOR_L_IN2_PORT, MOTOR_L_IN2_PIN, MOTOR_FORWARD, speed); } void Car_Backward(uint8_t speed) { Motor_Control(MOTOR_R_IN1_PORT, MOTOR_R_IN1_PIN, MOTOR_R_IN2_PORT, MOTOR_R_IN2_PIN, MOTOR_BACKWARD, speed); Motor_Control(MOTOR_L_IN1_PORT, MOTOR_L_IN1_PIN, MOTOR_L_IN2_PORT, MOTOR_L_IN2_PIN, MOTOR_BACKWARD, speed); } void Car_TurnLeft(uint8_t speed) { // 左轮后退或停止右轮前进实现左转 Motor_Control(MOTOR_R_IN1_PORT, MOTOR_R_IN1_PIN, MOTOR_R_IN2_PORT, MOTOR_R_IN2_PIN, MOTOR_FORWARD, speed); Motor_Control(MOTOR_L_IN1_PORT, MOTOR_L_IN1_PIN, MOTOR_L_IN2_PORT, MOTOR_L_IN2_PIN, MOTOR_BACKWARD, speed); } void Car_TurnRight(uint8_t speed) { // 右轮后退或停止左轮前进实现右转 Motor_Control(MOTOR_R_IN1_PORT, MOTOR_R_IN1_PIN, MOTOR_R_IN2_PORT, MOTOR_R_IN2_PIN, MOTOR_BACKWARD, speed); Motor_Control(MOTOR_L_IN1_PORT, MOTOR_L_IN1_PIN, MOTOR_L_IN2_PORT, MOTOR_L_IN2_PIN, MOTOR_FORWARD, speed); } /* USER CODE END 0 */在main()函数的初始化部分/* USER CODE BEGIN 2 */后记得启动PWM定时器和串口接收中断HAL_TIM_PWM_Start(htim1, TIM_CHANNEL_1); HAL_TIM_PWM_Start(htim1, TIM_CHANNEL_2); HAL_UART_Receive_IT(huart2, rx_buffer, 1); // 启动串口接收中断rx_buffer是全局变量3. 无线桥梁蓝牙通信协议与数据解析蓝牙模块HC-06充当了手机与STM32之间的无线串口。数据以字节流的形式透明传输。因此我们需要设计一个简单有效的通信协议让STM32能准确理解手机的意图。3.1 设计轻量级通信协议为了简单可靠我们采用“命令字参数”的格式。例如用一个字节表示动作指令再用一个字节表示速度值。协议定义示例指令字节 (Hex)含义参数 (Hex)说明0x01前进0x00-0x64(0-100)参数代表速度百分比0x02后退0x00-0x64(0-100)参数代表速度百分比0x03左转0x00-0x64(0-100)参数代表转弯速度0x04右转0x00-0x64(0-100)参数代表转弯速度0x00停止0x00忽略参数立即停止在手机APP端当按下“前进”按钮并拖动速度条至50%时APP应连续发送两个字节0x010x3250的十六进制。3.2 实现串口中断接收与协议解析STM32端需要在串口接收中断中按照协议解析这些字节。/* USER CODE BEGIN PV */ uint8_t rx_buffer; // 单字节接收缓冲区 uint8_t cmd_buffer[2]; // 命令帧缓冲区 uint8_t cmd_index 0; uint8_t expecting_param 0; // 标志位0-期待命令字1-期待参数 /* USER CODE END PV */ // 串口接收中断回调函数 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart-Instance USART2) { if (!expecting_param) { // 接收到的是命令字 cmd_buffer[0] rx_buffer; if (rx_buffer ! 0x00) { // 非停止指令需要等待参数 expecting_param 1; } else { // 停止指令立即执行 Car_Stop(); cmd_index 0; // 重置索引 } } else { // 接收到的是参数 cmd_buffer[1] rx_buffer; expecting_param 0; // 解析并执行完整的命令帧 Execute_Command(cmd_buffer[0], cmd_buffer[1]); } // 重新启动接收中断等待下一个字节 HAL_UART_Receive_IT(huart2, rx_buffer, 1); } } // 命令执行函数 void Execute_Command(uint8_t cmd, uint8_t param) { uint8_t speed param; // 参数即为速度值 switch(cmd) { case 0x01: // 前进 Car_Forward(speed); break; case 0x02: // 后退 Car_Backward(speed); break; case 0x03: // 左转 Car_TurnLeft(speed); break; case 0x04: // 右转 Car_TurnRight(speed); break; default: Car_Stop(); // 未知指令安全停止 break; } }这种简单的状态机解析方式能够有效处理字节流避免数据错乱。在实际项目中你可能会需要更复杂的协议比如加入帧头帧尾、校验和等以提高可靠性但对于基本的遥控功能上述方法已经足够稳健。4. 指尖操控手机APP开发与联调实战有了下位机STM32的坚实基础上位机手机APP就是用户交互的窗口。开发手机APP有多种途径对于初学者使用MIT App Inventor或Blynk这类图形化、低代码平台可以快速上手。这里我们以更灵活、功能更强的Android Studio开发简单原生APP为例讲解核心思路。4.1 Android蓝牙通信核心代码在Android Studio中你需要处理蓝牙设备的搜索、配对、连接以及数据发送。以下是一些关键代码片段1. 权限声明 (AndroidManifest.xml):uses-permission android:nameandroid.permission.BLUETOOTH / uses-permission android:nameandroid.permission.BLUETOOTH_ADMIN / uses-permission android:nameandroid.permission.ACCESS_FINE_LOCATION / !-- 蓝牙扫描需要位置权限 -- uses-feature android:nameandroid.hardware.bluetooth android:requiredtrue/2. 建立蓝牙连接与发送数据 (Kotlin示例):// 定义蓝牙相关对象 private var bluetoothAdapter: BluetoothAdapter? null private var bluetoothSocket: BluetoothSocket? null private var connectedThread: ConnectedThread? null // 初始化蓝牙适配器 bluetoothAdapter BluetoothAdapter.getDefaultAdapter() // 搜索并连接设备通常在列表点击后触发 fun connectToDevice(device: BluetoothDevice) { val uuid UUID.fromString(00001101-0000-1000-8000-00805F9B34FB) // 标准SPP UUID val socket device.createRfcommSocketToServiceRecord(uuid) bluetoothSocket socket // 在子线程中执行连接避免阻塞UI Thread { try { bluetoothSocket?.connect() // 连接成功启动数据收发线程 connectedThread ConnectedThread(bluetoothSocket!!) connectedThread?.start() runOnUiThread { showToast(已连接到: ${device.name}) } } catch (e: IOException) { runOnUiThread { showToast(连接失败) } try { bluetoothSocket?.close() } catch (e1: IOException) {} } }.start() } // 用于处理已连接Socket数据收发的线程 private inner class ConnectedThread(private val mmSocket: BluetoothSocket) : Thread() { private val mmInStream: InputStream mmSocket.inputStream private val mmOutStream: OutputStream mmSocket.outputStream private val mmBuffer: ByteArray ByteArray(1024) override fun run() { // 这里可以循环读取STM32发来的数据如果需要双向通信 } // 发送数据到STM32 fun write(bytes: ByteArray) { try { mmOutStream.write(bytes) } catch (e: IOException) { // 发送失败尝试重连或提示用户 } } } // 发送“前进”指令速度50% fun sendForwardCommand(speed: Int) { val cmd: Byte 0x01 val param: Byte speed.toByte() val data byteArrayOf(cmd, param) connectedThread?.write(data) }4.2 设计用户界面与联调技巧APP的UI可以非常简单几个方向控制按钮上下左右、一个停止按钮、一个速度滑动条。按钮按下时发送对应指令和当前速度值松开时发送停止指令。联调是项目最关键的环节常常会遇到各种问题。这里有一个排查清单蓝牙无法搜索到模块检查HC-06是否已上电LED慢闪表示进入可配对状态。检查手机蓝牙是否开启并确认APP已获得定位权限Android 6.0以上必需。尝试用手机系统自带的蓝牙设置界面搜索看是否能找到名为“HC-06”的设备。连接成功但小车无反应首要检查电源用万用表测量STM32和驱动板的供电电压是否正常。检查接线特别是蓝牙模块的TX/RX是否与STM32交叉连接TX接RXRX接TX。检查波特率确保STM32代码中huart2的波特率与HC-06模块的波特率一致默认通常是9600。你可以通过USB转TTL模块连接HC-06到电脑用串口助手如XCOM发送AT指令注意HC-06的AT模式进入方法查询或修改波特率。逻辑分析仪或串口助手是神器在STM32的串口TX引脚上接一个USB转TTL监控其是否在收到蓝牙数据后发出了调试信息。或者在APP发送数据的代码后添加日志确认发送的字节是否正确。小车动作与预期不符检查电机驱动模块的逻辑电平。TB6612FNG的STBY引脚需要置高才能使能。检查电机接线。如果小车原地旋转可能是左右电机转向设反了调换一下电机线或代码中的方向控制逻辑即可。调整PWM频率和占空比。频率太低如几十Hz电机会有啸叫声太高则可能驱动芯片响应不了。1kHz-10kHz是常用范围。调试过程就是不断假设、验证、修正的过程。记得充分利用printf重定向到串口进行调试输出通过__io_putchar函数重定向这是嵌入式开发最有效的调试手段之一。当手机APP上的按钮按下小车应声而动的那一刻所有的努力都得到了回报。这个项目带给你的远不止一台遥控小车而是一套从硬件到软件、从有线到无线的完整问题解决能力。你可以在此基础上为小车增加超声波避障、红外循迹、手机摄像头图传等更多功能让它真正变得“智能”起来。我自己的第一台小车在成功跑起来后因为电机电源线虚焊导致时走时停排查了半天才发现问题这种从故障中学习的经验尤为宝贵。记住在嵌入式开发里耐心和细致的观察往往比编写复杂的代码更重要。

相关新闻

Ubuntu 22.04下Jetson Orin Nano与IMX219摄像头的完美搭配:从安装到测试全流程

Ubuntu 22.04下Jetson Orin Nano与IMX219摄像头的完美搭配:从安装到测试全流程

Ubuntu 22.04下Jetson Orin Nano与IMX219摄像头的深度集成与实战指南 如果你刚刚拿到NVIDIA Jetson Orin Nano开发套件和一块IMX219摄像头模组,准备开启你的边缘AI视觉项目,那么恭喜你,你选择了一套极具潜力的组合。然而,从硬件连…

2026/7/5 8:55:18 阅读更多 →
Cadence Orcad原理图设计:如何避免Offpage和Power Net连接导致的‘幽灵网络’问题

Cadence Orcad原理图设计:如何避免Offpage和Power Net连接导致的‘幽灵网络’问题

Cadence OrCAD原理图设计:深度解析与实战规避“幽灵网络”连接陷阱 在复杂硬件系统的设计流程中,原理图是连接创意与物理实现的桥梁。对于使用Cadence OrCAD Capture的工程师而言,多页原理图设计是家常便饭,但其中潜藏的电气连接问…

2026/7/5 17:52:37 阅读更多 →
快速上手DAMOYOLO-S:简单三步搭建高性能目标检测服务

快速上手DAMOYOLO-S:简单三步搭建高性能目标检测服务

快速上手DAMOYOLO-S:简单三步搭建高性能目标检测服务 1. 引言 你有没有遇到过这样的场景?手头有一堆图片,需要快速找出里面所有的汽车、行人或者宠物;或者想给自己的监控系统加个“眼睛”,让它能自动识别画面里的物体…

2026/7/4 16:34:25 阅读更多 →

最新新闻

超棒!无需网络的离线地图应用 Organic Maps,2025 年安装量达 600 万!

超棒!无需网络的离线地图应用 Organic Maps,2025 年安装量达 600 万!

Organic Maps:隐私保护离线地图应用Organic Maps 是注重隐私保护的离线地图与 GPS 应用,适用于徒步、骑行和驾车场景。它免费、无广告、不追踪,由开源社区及创建 MapsWithMe/Maps.Me 应用的同一批开发者打造,数据源自 OpenStreetM…

2026/7/6 9:08:13 阅读更多 →
基于Go抓包+Python CNN的本地化异常流量检测工具(含GUI界面与预训练模型)

基于Go抓包+Python CNN的本地化异常流量检测工具(含GUI界面与预训练模型)

本文还有配套的精品资源,点击获取 简介:直接在本地运行的异常流量识别工具,底层用Go语言实现高效网络数据包捕获和会话解析,支持TCP/UDP/ICMP协议的实时流量提取、窗口计数、主机行为建模和服务识别;上层采用Python…

2026/7/6 9:08:13 阅读更多 →
MATLAB直接跑的7输入RBF回归工具:带数据、代码和结果图,开箱即用

MATLAB直接跑的7输入RBF回归工具:带数据、代码和结果图,开箱即用

本文还有配套的精品资源,点击获取 简介:这个MATLAB RBF神经网络回归工具包专为7个输入特征预测1个连续数值目标设计,不需要额外工具箱,兼容2018b及以上版本。主程序MainRBFR.m一键完成数据加载、RBF网络搭建、训练、测试和预测…

2026/7/6 9:08:13 阅读更多 →
Playwright网络请求拦截与模拟实战:从原理到六大应用场景详解

Playwright网络请求拦截与模拟实战:从原理到六大应用场景详解

1. 项目概述与核心价值 如果你正在用 Playwright 做自动化测试或者数据抓取,有没有遇到过这样的场景:测试一个下单流程,但支付接口总是不稳定,导致你的测试脚本动不动就失败;或者你想测试前端页面在网络超时或服务器返…

2026/7/6 9:04:10 阅读更多 →
PyTorch LSTM 多变量多任务预测:3种损失函数加权策略对比与代码实现

PyTorch LSTM 多变量多任务预测:3种损失函数加权策略对比与代码实现

PyTorch LSTM 多变量多任务预测:3种损失函数加权策略对比与代码实现在时间序列预测领域,多任务学习正逐渐成为提升模型性能的关键技术。当我们需要同时预测多个相关变量时,传统的单任务学习方法往往难以捕捉变量间的复杂关系。本文将深入探讨…

2026/7/6 9:04:10 阅读更多 →
Python Selenium自动化校园网登录:从环境搭建到打包部署全攻略

Python Selenium自动化校园网登录:从环境搭建到打包部署全攻略

1. 项目概述与核心价值 校园网登录,尤其是像深澜Srun这类需要跳转认证页面的系统,对于需要长时间保持网络连接的用户来说,是个不大不小的痛点。手动打开浏览器、输入账号密码、点击登录,这套流程每天重复几次,不仅繁琐…

2026/7/6 9:04:10 阅读更多 →

日新闻

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 阅读更多 →

月新闻