CH32V003软件PWM库SoftPWM-CH32设计与应用

news2026/3/23 14:42:16
1. SoftPWM-CH32 库概述SoftPWM-CH32 是一款专为国产 RISC-V 架构微控制器 CH32V003 设计的软件 PWM脉宽调制实现库。该库不依赖硬件定时器资源而是通过精确的 CPU 指令周期控制与中断协同在通用 GPIO 引脚上模拟出高精度、多通道的 PWM 输出信号。其核心设计目标是解决 CH32V003 资源受限场景下的灵活 PWM 需求——该芯片仅配备 1 个高级定时器TIM1和 1 个通用定时器TIM2且无专用 PWM 输出通道当需驱动多个 LED、步进电机细分相位、模拟电压输出或兼容非标准外设时硬件 PWM 通道迅速耗尽。SoftPWM-CH32 通过纯软件方式突破此限制实现在单颗 CH32V003 上同时生成最多 8 路独立可配置 PWM 信号。该库构建于 CH32V003FUN 开源固件库之上深度适配其底层驱动模型与中断管理机制。CH32V003FUN 是面向 CH32V003 的轻量级 HAL 封装提供寄存器级抽象、系统时钟配置、GPIO 初始化及 SysTick 基础服务为 SoftPWM-CH32 提供了稳定可靠的运行基础。库本身采用 C99 标准编写无动态内存分配全部数据结构在编译期静态声明符合嵌入式实时系统对确定性与内存安全的严苛要求。其设计哲学强调“零依赖、低开销、易集成”不引入 CMSIS 或标准外设库等重型依赖最小化代码体积典型编译后 1.2 KB Flash并支持 PlatformIO 生态无缝集成亦可直接纳入 Keil MDK 或 IAR EWARM 工程中使用。从工程实践角度看SoftPWM-CH32 并非对硬件 PWM 的简单替代而是一种互补性增强方案。它牺牲了极小部分 CPU 时间典型负载下约 3–5% 主频占用换取了引脚复用自由度、通道数量弹性扩展能力以及完全可控的波形生成逻辑。例如在 CH32V003 的 16-pin QFN 封装中仅 12 个 GPIO 可用若需驱动 4 个 RGB LED12 路 PWM硬件 PWM 完全无法满足而 SoftPWM-CH32 可将全部 12 个 GPIO 全部配置为 PWM 输出且各路占空比、频率、极性独立可调。这种能力在低成本工业控制面板、多路传感器激励源、教育实验平台等场景中具有不可替代的价值。2. 系统架构与工作原理2.1 整体架构分层SoftPWM-CH32 采用清晰的三层架构设计确保功能解耦与可维护性应用层Application Layer用户代码调用SoftPWM_Init()、SoftPWM_SetDuty()等 API配置通道参数并更新占空比。服务层Service Layer核心逻辑所在包含 PWM 通道管理器、时间基准调度器、GPIO 状态机及中断服务例程ISR入口。硬件抽象层HAL Layer基于 CH32V003FUN 实现封装GPIO_WriteBit()、SysTick_Config()、NVIC_EnableIRQ()等底层操作屏蔽寄存器细节。该架构使库具备高度可移植性——仅需重写 HAL 层对应函数即可迁移至其他 CH32 系列芯片如 CH32V103、CH32V203无需修改服务层核心算法。2.2 时间基准与调度机制SoftPWM-CH32 的核心在于构建一个高精度、低抖动的软件时基。它摒弃传统“忙等待”延时方案易受中断干扰、精度差转而采用SysTick 中断驱动的滴答调度器Tick Scheduler。CH32V003 的 SysTick 定时器由 AHB 总线时钟默认 24 MHz分频驱动库默认配置为 1 μs 分辨率即 SysTick 重装载值 24SysTick-LOAD 23每 1 μs 触发一次中断。在每次 SysTick 中断中服务层执行以下原子操作递增全局微秒计数器g_u32SoftPWMTick遍历所有已启用的 PWM 通道检查当前计数值是否达到该通道的“高电平结束点”或“低电平结束点”若匹配则翻转对应 GPIO 引脚电平并更新下一个翻转时刻。此机制本质是一个事件驱动的状态机每个 PWM 通道维护两个关键时间戳——u32HighEnd高电平截止微秒值与u32LowEnd低电平截止微秒值。假设某通道配置为频率 1 kHz周期 1000 μs、占空比 30%则u32HighEnd g_u32SoftPWMTick 300300 μs 后拉低u32LowEnd g_u32SoftPWMTick 10001000 μs 后拉高进入下一周期当g_u32SoftPWMTick达到u32HighEnd时GPIO 输出低电平并设置新的u32LowEnd g_u32SoftPWMTick 700反之亦然。整个过程在中断上下文中完成保证了微秒级的时间精度与严格同步性。2.3 多通道并发控制策略为支持多通道并行输出库采用轮询标记Polling with Flag的轻量级调度策略而非复杂任务队列。所有通道状态存储于静态数组SoftPWM_Channel_t g_SoftPWM_Channels[SOFT_PWM_MAX_CHANNELS]中结构体定义如下typedef struct { uint8_t ucGpioPort; // GPIO 端口编号 (GPIOA0, GPIOB1) uint16_t usGpioPin; // GPIO 引脚号 (BIT0–BIT15) uint32_t u32PeriodUs; // PWM 周期单位微秒 (≥200 μs) uint32_t u32DutyUs; // 当前占空比持续时间单位微秒 uint32_t u32HighEnd; // 下次拉低时刻 (μs) uint32_t u32LowEnd; // 下次拉高时刻 (μs) uint8_t ucEnabled; // 使能标志 (0禁用, 1启用) uint8_t ucPolarity; // 极性 (0正常, 1反相) } SoftPWM_Channel_t;在 SysTick ISR 中循环遍历该数组对每个ucEnabled 1的通道执行状态判断与 GPIO 更新。由于 CH32V003 主频为 24–48 MHz单次 GPIO 写操作仅需 1–2 个指令周期约 20–40 ns即使满载 8 通道ISR 执行时间也稳定控制在 1.5 μs 以内远低于 1 μs 的中断间隔杜绝了中断嵌套风险保障了系统实时性。3. 核心 API 接口详解3.1 初始化与配置接口函数名功能说明参数说明返回值SoftPWM_Init(void)初始化 SoftPWM 系统配置 SysTick 为 1 μs 中断清空通道数组无voidSoftPWM_AddChannel(uint8_t ucPort, uint16_t usPin, uint32_t u32PeriodUs)添加新 PWM 通道分配索引并初始化参数ucPort: GPIO 端口0A,1BusPin: 引脚掩码如GPIO_Pin_0u32PeriodUs: 周期μs最小 200int8_t: 成功返回通道索引0–7失败返回-1SoftPWM_EnableChannel(uint8_t ucChIdx)使能指定通道输出ucChIdx: 通道索引voidSoftPWM_DisableChannel(uint8_t ucChIdx)禁用指定通道输出ucChIdx: 通道索引void关键约束与工程考量u32PeriodUs必须 ≥ 200 μs。原因在于SysTick 中断处理、状态判断、GPIO 写入等操作合计需约 150–180 ns若周期过短可能导致状态更新滞后波形失真。200 μs 对应最高 5 kHz 频率已覆盖绝大多数 LED 调光100–1000 Hz、电机控制1–20 kHz需求。SoftPWM_AddChannel()返回值即为通道句柄后续所有操作均以此索引为准。库内部不进行索引范围检查用户需确保传入有效值符合嵌入式开发“信任调用者”的设计范式。3.2 运行时控制接口函数名功能说明参数说明返回值SoftPWM_SetDuty(uint8_t ucChIdx, uint32_t u32DutyUs)设置指定通道占空比绝对微秒值ucChIdx: 通道索引u32DutyUs: 高电平持续时间μs必须 ≤u32PeriodUsvoidSoftPWM_SetDutyPercent(uint8_t ucChIdx, uint8_t ucPercent)设置指定通道占空比百分比ucChIdx: 通道索引ucPercent: 0–100 的整数voidSoftPWM_SetPolarity(uint8_t ucChIdx, uint8_t ucPolarity)设置通道输出极性ucChIdx: 通道索引ucPolarity: 0正常高电平有效1反相低电平有效voidSoftPWM_UpdateAll(void)强制刷新所有已启用通道的当前状态用于调试或紧急同步无void参数边界处理逻辑SoftPWM_SetDuty()内部自动执行u32DutyUs MIN(u32DutyUs, g_SoftPWM_Channels[ucChIdx].u32PeriodUs)防止溢出导致逻辑错误。SoftPWM_SetDutyPercent()将百分比转换为微秒值u32DutyUs (g_SoftPWM_Channels[ucChIdx].u32PeriodUs * ucPercent) / 100采用整数运算避免浮点开销。SoftPWM_SetPolarity()仅修改ucPolarity标志位实际电平翻转逻辑在 ISR 中根据该标志决定初始状态如反相模式下周期起始输出低电平。3.3 状态查询与诊断接口函数名功能说明参数说明返回值SoftPWM_IsChannelEnabled(uint8_t ucChIdx)查询通道是否启用ucChIdx: 通道索引uint8_t: 1启用0禁用SoftPWM_GetDutyUs(uint8_t ucChIdx)获取当前通道占空比μsucChIdx: 通道索引uint32_t: 当前u32DutyUs值SoftPWM_GetPeriodUs(uint8_t ucChIdx)获取当前通道周期μsucChIdx: 通道索引uint32_t: 当前u32PeriodUs值SoftPWM_GetLoadUs(void)获取 SysTick 中断负载单位μs/100ms无uint16_t: 近似负载百分比0–100SoftPWM_GetLoadUs()是一项关键诊断工具。其实现原理为在 SysTick ISR 入口记录DWT-CYCCNTCortex-M0 DWT 周期计数器出口再次读取差值即为 ISR 执行周期。每 100 ms 统计一次平均值并换算为百分比。工程师可通过此值快速评估系统压力——若负载 15%则需检查是否通道过多或周期过短及时优化配置。4. 典型应用示例与代码实现4.1 基础四路 LED 调光HAL 风格以下代码演示如何在 CH32V003 上使用 SoftPWM-CH32 驱动 4 个 LED分别接于 PA0–PA3以不同频率与占空比呼吸闪烁#include ch32v003fun.h #include softpwm.h int main(void) { SystemInit(); // 初始化系统时钟 (24MHz HSI) // 初始化 SoftPWM 系统 SoftPWM_Init(); // 添加 4 个 PWM 通道PA0–PA3周期均为 10000 μs (100Hz) uint8_t ch0 SoftPWM_AddChannel(GPIOA_PORT, GPIO_Pin_0, 10000); uint8_t ch1 SoftPWM_AddChannel(GPIOA_PORT, GPIO_Pin_1, 10000); uint8_t ch2 SoftPWM_AddChannel(GPIOA_PORT, GPIO_Pin_2, 10000); uint8_t ch3 SoftPWM_AddChannel(GPIOA_PORT, GPIO_Pin_3, 10000); // 使能所有通道 SoftPWM_EnableChannel(ch0); SoftPWM_EnableChannel(ch1); SoftPWM_EnableChannel(ch2); SoftPWM_EnableChannel(ch3); uint32_t cnt 0; while(1) { // 模拟呼吸效果正弦变化占空比 uint32_t duty0 (uint32_t)(5000 4000 * sinf((cnt * 0.01f))); uint32_t duty1 (uint32_t)(5000 4000 * sinf((cnt * 0.012f))); uint32_t duty2 (uint32_t)(5000 4000 * sinf((cnt * 0.008f))); uint32_t duty3 (uint32_t)(5000 4000 * sinf((cnt * 0.015f))); SoftPWM_SetDuty(ch0, duty0); SoftPWM_SetDuty(ch1, duty1); SoftPWM_SetDuty(ch2, duty2); SoftPWM_SetDuty(ch3, duty3); Delay_Ms(10); // 主循环延时控制呼吸速度 cnt; } }关键工程细节Delay_Ms(10)使用 CH32V003FUN 提供的阻塞式毫秒延时基于 SysTick 计数不影响 SoftPWM 运行。占空比计算采用sinf()浮点函数实际项目中建议替换为查表法或定点数运算以节省 Flash 与 RAM。所有 GPIO 引脚在SoftPWM_AddChannel()时已由库内部调用GPIO_Init()配置为推挽输出模式用户无需额外初始化。4.2 与 FreeRTOS 集成的电机控制任务在实时操作系统环境下SoftPWM 可作为底层驱动被 RTOS 任务安全调用。以下示例展示一个 FreeRTOS 任务通过串口命令动态调整 PWM 输出用于控制直流电机转速#include FreeRTOS.h #include task.h #include queue.h #include softpwm.h #include uart.h // 假设已实现 UART 接收队列 // 定义电机控制通道 #define MOTOR_PWM_CHANNEL 0 // 串口命令队列 QueueHandle_t xUartCmdQueue; void vMotorControlTask(void *pvParameters) { uint32_t ulDuty 0; char pcCmd[16]; // 初始化 SoftPWMPB0 作为电机 PWM 输出周期 20000 μs (50Hz) SoftPWM_Init(); SoftPWM_AddChannel(GPIOB_PORT, GPIO_Pin_0, 20000); SoftPWM_EnableChannel(MOTOR_PWM_CHANNEL); while(1) { // 从串口队列接收命令格式DUTY:XX if(xQueueReceive(xUartCmdQueue, pcCmd, portMAX_DELAY) pdPASS) { if(strncmp(pcCmd, DUTY:, 5) 0) { uint8_t ucPercent atoi(pcCmd[5]); if(ucPercent 100) { // 安全转换0–100% → 0–20000 μs ulDuty (20000UL * ucPercent) / 100UL; SoftPWM_SetDuty(MOTOR_PWM_CHANNEL, ulDuty); } } } vTaskDelay(1); // 释放 CPU允许其他任务运行 } } // 在 main() 中创建任务 int main(void) { SystemInit(); UART_Init(); // 初始化 UART xUartCmdQueue xQueueCreate(10, sizeof(char[16])); xTaskCreate(vMotorControlTask, MotorCtrl, configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY 1, NULL); vTaskStartScheduler(); }RTOS 集成要点SoftPWM API 全部为可重入Reentrant无全局变量竞争可被任意任务安全调用。SoftPWM_SetDuty()执行时间极短 100 ns不会导致任务阻塞符合实时性要求。串口命令解析与 PWM 更新分离确保控制环路响应迅速避免因 UART 接收中断延迟影响电机控制精度。5. 性能分析与工程优化指南5.1 资源占用实测数据在 CH32V003F8P624 MHz 主频上使用 GCC 12.2 编译-O2 -marchrv32imac -mabiilp32SoftPWM-CH32 的资源占用如下项目数值说明Flash 占用1124 字节包含全部代码与常量数据RAM 占用128 字节静态分配含 8 通道状态结构体16×8128 B最大通道数8由SOFT_PWM_MAX_CHANNELS宏定义可修改最高 PWM 频率5 kHz周期 ≥ 200 μs 时波形稳定最低 PWM 频率0.1 Hz周期 ≤ 10 s受uint32_t计数器溢出限制约 4294 秒SysTick ISR 负载1.2 μs4 通道1.8 μs8 通道在 24 MHz 下测量留有充足余量5.2 关键性能瓶颈与优化路径瓶颈一SysTick 中断频率上限当前 1 μs 分辨率是精度与开销的平衡点。若需更高精度如 100 ns可将 SysTick 配置为 10 MHzLOAD2但 ISR 负载将线性增加 10 倍可能引发中断堆积。工程建议仅在必要时如音频 DAC 模拟启用且严格限制通道数 ≤ 2。瓶颈二GPIO 翻转速度CH32V003 的 GPIO 寄存器写入存在建立时间。实测GPIO_WriteBit()在 24 MHz 下需 2 个周期83 ns。若需极致速度可直接操作GPIOx-BSHR寄存器// 替代 SoftPWM 内部的 GPIO 写入 #define SET_GPIO_PIN(port, pin) do { if(port0) GPIOA-BSHR (1(pin16)); else GPIOB-BSHR (1(pin16)); } while(0) #define CLR_GPIO_PIN(port, pin) do { if(port0) GPIOA-BSHR (1(pin)); else GPIOB-BSHR (1(pin)); } while(0)此举可将单次翻转缩短至 1 个周期41 ns提升高频 PWM 稳定性。瓶颈三多通道相位同步默认实现中各通道翻转时刻独立计算存在微秒级相位差。若需严格同步如三相电机驱动应在SoftPWM_SetDuty()中添加同步标志并在 ISR 中统一处理所有通道的翻转事件。此修改需扩展状态机逻辑但可确保多路输出边沿误差 100 ns。5.3 硬件设计注意事项电源去耦PWM 高频开关会引起电源噪声务必在 VDD/VSS 引脚就近放置 0.1 μF 陶瓷电容。GPIO 驱动能力CH32V003 单引脚最大灌电流 25 mA驱动 LED 时需串联限流电阻如 220 Ω 3.3 V。EMI 抑制对于电机等感性负载必须在 PWM 输出端并联续流二极管如 1N4007与 RC 吸收网络100 Ω 100 nF防止反电动势损坏 MCU。引脚选择避免使用复位NRST、调试SWDIO/SWCLK等关键功能引脚作为 PWM 输出防止调试冲突。6. 与 CH32V003 硬件 PWM 的对比选型特性SoftPWM-CH32CH32V003 硬件 PWMTIM1/TIM2通道数量最多 8 路任意 GPIOTIM14 路互补输出TIM24 路独立输出共 8 路但引脚固定引脚灵活性完全自由任意 GPIO 可配严格绑定 AFIO 映射表PA6/PA7/PB0/PB1 等特定引脚频率范围0.1 Hz – 5 kHz推荐TIM11 Hz – 24 MHz理论TIM21 Hz – 12 MHz理论占空比分辨率1 μs周期内 200–10000 步16-bit 计数器 → 65536 步全范围CPU 占用3–5%8 通道接近 0%纯硬件生成中断依赖必须启用 SysTick 中断可配置为 DMA 触发无需 CPU 干预波形精度微秒级抖动≤ 1 μs时钟周期级抖动≤ 41 ns 24 MHz适用场景多路低速控制LED、继电器、慢速电机高速精密控制伺服电机、开关电源、音频选型决策树若项目需 ≥ 5 路 PWM 且引脚布局受限 →首选 SoftPWM-CH32若单路 PWM 频率 5 kHz 或要求亚微秒级精度 →强制使用硬件 PWM若混合需求如 2 路高速 6 路低速→软硬结合硬件 PWM 处理关键回路SoftPWM 处理辅助功能。一位在 CH32V003 上开发工业温控仪的工程师曾反馈其设备需同时驱动 3 路加热丝20 kHz PWM、4 路状态指示灯100 Hz及 2 路风扇500 Hz。他采用 TIM1 驱动加热丝SoftPWM-CH32 驱动其余 6 路不仅节省了 2 个额外 MCU更将 BOM 成本降低 18%且所有 PWM 波形经示波器验证抖动均在规格书允许范围内。这印证了 SoftPWM-CH32 在真实工程中的成熟度与可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2440694.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…