新闻详情

新闻详情

首页 / 资讯中心 / 详情

GD32H759 RT-Thread以太网驱动移植实战:从RMII到Ping通

发布时间:2026/9/21 7:10:45来源:尧图网络
GD32H759 RT-Thread以太网驱动移植实战:从RMII到Ping通
前面一篇把GD32H759的工程搭建、时钟、串口这些基础项跑通之后很多朋友问我下一步该搞什么。我的建议是先碰以太网。原因很直白工控设备一旦要联网不管你是做远程运维、数据采集还是和PLC对接Modbus TCP以太网都是绕不开的底座。这一篇专门讲GD32H759 RT-Thread下的enet驱动目标是让网卡真正工作起来——板子能从路由器拿到IP、能被局域网ping通、能跑lwIP协议栈为后续应用层开发打地基。这篇内容适合正在评估GD32H759做产品、想在RT-Thread里把以太网跑通或者调了好几天始终link不上、dhcp超时的朋友。我会把方案选型思路、硬件连接要点、驱动移植步骤、核心代码逻辑以及最后实测和踩坑记录全部整理出来。内容不绕弯子直接给可落地的做法。1. 整体设计与方案选型思路1.1 为什么选GD32H759做工控平台先说说这块芯片。GD32H759属于兆易创新的高性能系列Cortex-M7内核主频能跑到500MHz以上片内RAM和Flash的容量都非常宽裕外设也堆得相当全。最关键的是它内置了10/100M以太网MAC控制器这意味着我们不需要外挂一颗带MAC的协议栈芯片只需要在外部接一颗PHY收发器再配合RT-Thread自带的lwIP协议栈就能实现完整的网络通信能力。在工控项目里这种“MCU内置MAC 外部PHY”的方案几乎是标准做法。对比一下用SPI接口的W5500这类集成协议栈芯片开发简单但占用MCU资源吞吐量上限低而且多一层SPI瓶颈。用内置MAC的MCU数据走DMA直接进内存吞吐量高CPU占用小成本也更可控但驱动开发复杂度上来了。用Linux 应用处理器功能强大但是成本、功耗、实时性都不可控很多工控现场不需要那么重的系统。GD32H759的定位很适合“中等复杂度、高实时性、要联网”的工控场景比如伺服驱动器、边缘采集网关、协议转换器。这类设备既需要实时控制能力又希望保留一定的通信带宽Cortex-M7的算力和内置MAC正好都覆盖到了。1.2 协议栈方案为什么直接用RT-Thread如果你只是想让板子能发个UDP报文裸机lwIP裸移植也能做到。但一旦进入产品开发阶段你要考虑的不只是“能ping通”而是“稳定跑几个月不挂、异常能恢复、后续能扩展其他业务”。这时候用RT-Thread这种RTOS的价值就体现出来了。RT-Thread相比裸机的优势主要有几个第一网络分层清晰。RT-Thread把网络栈抽象成SAL lwIP netdev三层应用层用的是标准socket接口。你今天用lwIP明天想换其他协议栈上层socket代码不用动。第二配套组件现成。比如DHCP客户端、ping工具、netstat、tftp、web server很多都能直接从软件包拉下来用。在msh命令行里敲几个命令就能完成网络调试不需要自己写测试代码。第三线程模型天然适合网络应用。收包中断进来驱动把数据丢给协议栈线程处理不会阻塞你的控制逻辑。用裸机的话你得自己协调中断和主循环的时序一不留神就丢包。所以本篇所有内容都基于RT-Thread来展开。如果你问“能不能用裸机”——能但那是另一个工作量级别的故事了。1.3 RT-Thread网络架构到底是怎么分层的在动手写驱动之前我强烈建议先把RT-Thread的网络分层结构看清楚不然调试的时候会迷失方向。层次从上到下大致是应用层socket、BSD、或者RT-Thread的AT组件。你写的业务代码在这一层。SALSocket抽象层RT-Thread抽象出来的统一socket接口屏蔽底层协议栈差异。lwIP真正的TCP/IP协议栈实现负责IP、TCP、UDP、ICMP这些协议逻辑。netdevRT-Thread的网卡设备管理层维护IP地址、网关、网卡状态这些信息。驱动层我们的enet驱动负责和GD32H759的MAC硬件打交道以及通过MDIO管理外部PHY。一个UDP报文从网线进来流程大约是PHY收到模拟信号转成数字电平给MACMAC通过DMA写入内存驱动把缓冲区交给lwIPlwIP解析成socket数据最终送到应用的recvfrom。反过来应用调用sendto数据从socket传入lwIPlwIP封包驱动把包写到DMA描述符MAC发出去PHY转成电信号上线路。驱动层的责任就是打通“MAC硬件”和“lwIP/协议栈”之间的双向通路。搞清楚这个后面调试的时候就能定位问题发生在哪一段。2. 移植前的硬件确认与准备2.1 RMII引脚分配与原理图核对GD32H759的以太网MAC支持MII和RMII两种对外接口。工控小板上几乎都用RMII原因是引脚少数据线只要TXD0/TXD1、RXD0/RXD1控制线加TX_EN、CRS_DV再加上REF_CLK和MDIO/MDC全部加起来十根出头。MII要用两倍以上的引脚在寸土寸金的PCB上不划算。引脚对应关系以RMII为例信号方向说明TXD0/TXD1输出MAC发送数据TX_EN输出发送使能RXD0/RXD1输入MAC接收数据CRS_DV输入载波侦听/数据有效REF_CLK输入或输出50MHz参考时钟MDC输出管理接口时钟MDIO双向管理接口数据拿到一块新的GD32H759板子第一件事不是写代码而是翻原理图确认PHY芯片的REF_CLK是由MCU给还是PHY自己产生。这个方向如果搞反了网卡是无论如何也工作不起来的后面我会展开讲。另外要注意引脚复用功能。GD32H759的引脚复用很灵活同一个引脚可能同时是串口、定时器、以太网。在代码里除了使能外设时钟还要调用对应的GPIO复用配置把引脚切到ENET功能上。漏了这一步信号根本到不了MAC。2.2 PHY芯片选型与外围电路GD32H759的内置MAC是10/100M的对应常见的百兆PHY芯片都能直接接。我自己板子上用的是LAN8720A这颗在工控小板上极其常见RMII接口3.3V供电外围只有一颗25MHz晶振和几个电容电阻非常省事。如果你用的板子是其他PHY比如YT8512、DP83848驱动里的PHY寄存器操作部分需要相应调整但整体框架一样。PHY外围电路有几个细节容易踩坑一是PHY的地址。LAN8720A默认PHY地址是0靠外部电阻拉高拉低引脚决定。这个地址要和驱动里读PHY ID/寄存器时使用的地址一致否则MDIO读写全部石沉大海。二是复位电路。有些PHY要求上电后先拉低复位脚再释放并且要等一段时间才能访问寄存器。如果驱动初始化太急读PHY寄存器会读回全1或者全0表现就是PHY ID不对link状态永远起不来。三是终端电阻/网络变压器。RMII数据线通常是3.3V的但网线侧是差分信号中间必须过网络变压器。工控环境里变压器还能起隔离作用防止共模干扰打坏芯片。这个属于硬件范畴但做驱动的人也应该看一眼因为如果你的“网卡link不上”是硬件问题你在软件上再折腾也是白费。2.3 MDIO、中断与复位引脚的“隐藏细节”MDIO是MAC管理PHY寄存器的通道。默认MDC时钟频率建议别太高一般在2.5MHz以下比较稳。RT-Thread的GD32驱动里会有对应配置如果PHY的寄存器读取偶尔正常偶尔乱码先检查MDC分频是否合适。中端口脚的作用是把PHY的link状态变化、协商完成这些事件通知给MCU。RT-Thread的驱动有两种处理PHY状态的方式一种是用中断PHY状态变了就进中断去读寄存器另一种是轮询驱动线程隔几百毫秒去读一次PHY寄存器把link状态同步给lwIP。两种方式各有利弊。中断响应快但如果不加防抖处理link抖动时会频繁触发中断反而增加CPU负担。轮询实现简单、稳定工控场景我反而更推荐几百毫秒的延迟完全不影响使用。很多RT-Thread官方BSP里的enet驱动就是轮询模式跑起来效果非常稳。还有一个细节PHY的硬件复位脚。如果MCU有IO接到PHY复位脚最好在初始化的时候先拉低、保持几十毫秒、再释放。如果复位脚悬空或者电容复位时序不够PHY可能处于半初始化的状态后续所有寄存器操作都不正常。我在调试中就遇到过一次板子上一颗PHY偶尔工作偶尔不工作最后发现是复位电容容值太小复位脉冲宽度不足。3. RT-Thread enet驱动移植与配置实操3.1 驱动代码从哪里来RT-Thread官方有很多GD32系列BSP比如GD32F4系列工程里自带drv_enet.c。但GD32H759毕竟是比较新的芯片如果你的RT-Thread版本里没有现成的H759 BSP有两个办法第一去Gitee/GitHub拉最新版本RT-Thread源码看develop分支里是否已经合入了GD32H7系列BSP。有就直接用省事。第二参考同系列BSP自己改。GD32系列的外设库风格非常统一以太网驱动在F4、F7、H7之间的差异主要是寄存器基地址、时钟树配置、引脚复用号这些。拿GD32F4的drv_enet.c做底子对照H759的参考手册把相关寄存器定义和时钟配置改过来完全可行。我当时就是用的第二个办法。最核心的修改点在于时钟树里ENET相关时钟源、RMII参考时钟方向、GPIO复用功能号以及中断号。这几个地方和芯片强相关必须按H759的手册逐一核对。3.2 关键配置项lwIP、netdev、DHCP驱动代码就位后需要在RT-Thread的配置里把网络组件打开。如果你用RT-Thread Studio可以在图形化配置界面里勾选本质上是修改rtconfig.h里的宏定义。几个核心配置项如下RT_USING_LWIP打开lwIP协议栈。RT_LWIP_MEM_ALIGNMENT内存对齐字节数通常填4配合DMA要求。RT_LWIP_PBUF_NUMPBUF数量这个值太小会丢包太大又浪费内存工程上一般先给一个中等值跑通再根据压力测试调优。RT_USING_NETDEV打开网卡设备管理这是ifconfig、DNS、路由表这些功能的基础。RT_LWIP_DHCP开启DHCP客户端。调试阶段可以先开方便拿到IP但工控产品正式部署时我建议改成静态IP后面会解释原因。RT_LWIP_IPADDR、RT_LWIP_GWADDR、RT_LWIP_MSKADDR静态IP地址、网关、掩码如果不开DHCP就在这里填。编译前还要检查一个东西堆内存大小。lwIP是出了名的内存大户如果board初始化里的堆设置太小协议栈起来之后分不出内存给PBUF和PCB会导致莫名其妙的收发失败。H759的内存够大但RT-Thread默认堆可能只给了1MB甚至更少可以酌情加大。3.3 驱动初始化流程与启动日志解读配置完成后编译烧录板子启动时msh控制台一般会打印类似下面这样的信息[I/eth] eth0 link up [I/eth] eth0 ip: 192.168.1.100如果一切顺利最后你会看到一个IP地址。但实际调试中大概率不是一次过的所以我们来看驱动初始化到底做了什么。驱动初始化的关键路径大概是使能GPIO时钟和ENET外设时钟。配置RMII引脚复用。配置ETH的DMA、MAC寄存器工作模式、帧过滤、流控等。初始化DMA描述符链表和收发缓冲区。通过MDIO复位PHY、读取PHY ID确认PHY通信正常。配置PHY的工作模式百兆全双工等等待link up。向RT-Thread注册网卡设备添加netdev。启动DHCP或应用静态IP配置。如果启动日志里连“phy id”或者“link up”都看不到那就要回到硬件连接和PHY通信上去排查。如果看到了link up但拿不到IP再检查DHCP配置和网络环境。4. 核心代码与收发路径拆解4.1 网卡是怎么注册进RT-Thread的RT-Thread的驱动框架里网卡本质上是一个设备对象加一个netdev描述。驱动初始化时要做两件事调用rt_device_register注册设备以及调用netdev_add把这个接口挂到协议栈的管理链表上。在enet驱动源码里你会看到一个结构体里面填了初始化函数、打开/关闭函数、发送函数、接收回调等回调接口。当lwIP准备发送报文的时候会调用到驱动提供的发送接口当网卡硬件接收到数据并产生中断时中断服务函数会调用接收逻辑把报文推给lwIP的上层处理。理解这个回调机制很重要。很多人调驱动只知道改硬件寄存器忽略了RT-Thread设备框架原有的回调链路结果网卡MAC收发了但数据没走到lwIP表现为“网卡好像活着但ping不通”。4.2 DMA描述符与数据收发路径GD32H759的MAC带DMA控制器收发数据靠DMA描述符链表。每个描述符对应一块缓冲区描述符里记录了缓冲区地址、数据长度、状态标志。初始化时驱动要准备一个发送描述符数组和一个接收描述符数组把它们组成链表然后把链表的基地址分别告诉DMA控制器的相关寄存器。发送流程简单说应用层调用socket send。lwIP把数据封装成多个网络缓冲区PBUF。驱动从PBUF里取出数据复制到DMA发送缓冲区或者零拷贝取决于实现。驱动设置对应描述符的状态字标记为“最后一个描述符”、“缓冲区有效”。DMA控制器看到描述符有效自动把缓冲区的数据搬到MAC FIFO并发送出去。发送完成后产生发送完成中断驱动释放PBUF。接收流程则是反过来PHY收到数据MAC的DMA把数据写入接收描述符指向的缓冲区。DMA置位描述符产生接收中断。中断服务函数里驱动遍历接收描述符把数据和长度传给netif通知lwIP处理。lwIP处理完后驱动重新把描述符置为可用状态。这里有个非常经典的坑DMA缓冲区地址必须对齐。GD32H759的DMA要求缓冲区地址按4字节甚至更高字节对齐如果编译器分配出来的缓冲区地址不对齐数据的第一个字节会错位接收到的报文解析出来就是错乱的。很多驱动代码里会用RT_ALIGN宏来给缓冲区做对齐这是有原因的。4.3 PHY状态管理link轮询与协商MAC本身不感知网线是否插好这个状态需要PHY告诉它。PHY的寄存器0BCR和寄存器1BSR是最常用的寄存器1的bit2就是link状态位。驱动可以主动去读读回来0说明网线没插好或者对端没开读回来1说明物理链路已经通了。我用的轮询方式是在一个驱动线程里定时读PHY寄存器把状态同步给netdev更新网卡UP/DOWN状态。轮询间隔取500ms到1s都可以。中断方式也可以但工控环境里我更倾向轮询省得处理电气噪声带来的误中断。另外PHY在上电后可能需要几百毫秒到一两秒的自协商时间才能和对端交换机协商出百兆全双工模式。所以如果你在系统启动后立刻检查link状态大概率是down的不要着急等一两秒再查。这也是为什么调驱动时要在启动日志里加一点延迟再打link状态不然会误判驱动有问题。5. 从编译通过到Ping通的完整验证5.1 拿到IP之前先看启动日志编译烧录后串口助手里打开msh控制台按复位键。我建议关注几个关键输出点驱动初始化有没有报错。比如“enet init failed”之类的提示有的话直接查程序卡在哪个函数。是否打印了PHY ID。能读出正确的PHY ID说明MDIO链路是通的硬件连接基本没问题。是否出现link up。出现了说明物理层通了接下来就是网络层的事。我一个经验调试阶段最好用路由器或者交换机连接不要直连电脑。因为有些电脑网卡自协商和PHY芯片兼容性一般直连反而出现协商失败的情况。直连不行的时候把速率手工固定成百兆试试又是另一个故事了。5.2 ifconfig、ping、TCP收发测试如果启动日志里出现了IP说明DHCP已经成功接下来进入验证阶段。在msh里敲ifconfig会看到网卡名称、IP、掩码、网关、物理地址这些信息。然后从电脑ping板子或者从板子ping电脑msh / ping 192.168.1.1能看到回包并且延迟在10ms以内基本说明收发路径是通的。但ping通了不代表高负载传输没问题因为ICMP报文小不会触发大缓冲区和高吞吐路径。所以还要跑一下TCP/UDP数据收发。我测试的时候习惯在电脑上开一个TCP Server工具板子里跑一个socket client尽力地发送数据观察有没有丢包、重传、粘包。也可以用RT-Thread自带的iperf软件包直接测吞吐量。实测下来GD32H759的百兆以太网RT-Thread lwIP默认配置下TCP吞吐在45~65Mbps之间是正常的UDP一般能到70~80Mbps。如果比这个数值低很多检查是不是中断优先级不合理、PBUF数量太少、或者驱动里做了不必要的拷贝。5.3 静态IP还是DHCP调试阶段用DHCP省事自动获取IP。但工控产品部署到现场路由器不是你想换就能换的现场网络环境五花八门。我的习惯是功能验证通过后果断改成静态IP配置并且把DHCP关掉。原因有三条第一DHCP依赖服务器一旦现场网络里没有DHCP服务或者服务器响应慢设备启动要等好几个超时周期才能跳到静态IP逻辑用户体验极差。第二工控设备通常需要固定IP被别人连接如果DHCP分配的地址漂移了上位机配置就全乱了。第三静态IP在lwIP里配置是一次性的不依赖网络环境可靠性高。所以我的产品默认都是静态IP只有在调试模式或者特殊配置场景才临时开启DHCP。6. 常见问题与排查技巧实录6.1 问题速查表调enet驱动那几天我前前后后遇到不少问题有些是硬件层面有些是软件层面。整理成一张速查表方便大家遇到类似现象直接对症下药现象可能原因排查方向PHY ID读出来全FMDIO/MDC引脚复用没配置PHY地址不对PHY复位时序不够检查GPIO复用、PHY地址电阻、复位电路PHY ID能读到但link一直down网线没插好对端没通电RMII参考时钟方向配置错PHY自协商失败示波器看REF_CLK和TX_EN检查时钟方向配置link up了但ping不通MAC地址全零lwIP内存不足PBUF数量太少DMA描述符初始化错误检查MAC地址配置、RT_ALIGN对齐、PBUF/描述符数量DHCP一直获取不到IP网线物理层有问题DHCP客户端没启动协议栈内存不够先用静态IP若能通说明DHCP配置或网络环境问题TCP传大文件卡死或断流发送描述符数量不够中断优先级。协议栈线程抢占导致丢包增加描述符个数调整中断优先级和线程优先级上电刚开始正常跑一会网口挂死DMA描述符耗尽PHY寄存器状态机停止协议栈线程被饿死看DMA中断错误标志检查驱动是否有死锁或描述符回收bug6.2 一套实用的排查链路遇到问题先别慌按链路从物理层往上层查比盲目改代码高效得多。第一步用示波器或逻辑分析仪看RMII引脚。确认REF_CLK这个50MHz时钟是否存在且稳定。这是我最先查的信号因为它的方向很容易配置错。再用示波器看MDIO有没有波形有波形说明MCU在尝试访问PHYMDIO波形异常就能把问题缩小到引脚配置或时序。第二步确认PHY寄存器能读。随便读一个寄存器比如PHY ID寄存器或状态寄存器能读到非全F、非全0的值说明物理链路和MDIO通路都OK。读不到数据就回头查PHY地址、复位、MDC时钟分频。第三步关掉DHCP手动配一个局域网内空闲的IP然后ping网关。能ping通说明MAC和协议栈工作正常问题可能只是在DHCP环节。第四步看协议栈统计信息。RT-Thread的lwIP组件会统计收发包数量、丢弃包数量。我在驱动里会临时打印接收中断产生的次数对比lwIP实际处理的报文数量能快速判断问题是丢在中断到协议栈这一段还是协议栈处理不过来。6.3 几个值得警惕的可靠性设计点驱动能跑通只是第一步。工控产品讲究的是7x24小时稳定这方面有几个设计细节我想额外啰嗦一句。第一MAC地址不能是写死的某个特殊值也不能全零。很多板厂出厂时会在Flash的OTP区烧录MAC地址驱动初始化时优先读这个读不到再用默认值。如果产品批量出货MAC地址重复会导致局域网里地址冲突是很低级的故障。第二看门狗要能监控协议栈线程。工控系统里如果某个网络异常导致协议栈线程卡死系统不能“静静死掉”要能自动复位恢复。我在产品里会给网络监控线程喂狗这个线程周期性检查PHY link状态和协议栈内存水位连续异常累计到阈值就主动触发系统复位。第三链路闪断处理。插拔网线、交换机重启会导致PHY状态反复跳变。轮询驱动里如果一检测到link down就直接释放所有TCP连接用户体验会非常差。最好加一个消抖逻辑比如连续3次检测到down才正式切换状态。第四DMA描述符和内存池要监控。长时间运行后如果内存泄漏或者描述符耗尽网卡会“假死”。所以我在驱动里加了DMA错误中断处理遇到溢出、总线错误这类异常时先把描述符链表重置而不是让系统卡死。写在实际调试之后这一路调下来最大的体会是enet驱动卡住的地方大多不在代码逻辑本身而在硬件细节的确认上——时钟方向、PHY地址、复位时序、DMA对齐每一个小问题都可能让你排查一整天。好在思路理顺之后这套东西是可复现的遇到问题按物理层、MAC层、协议栈层逐层拆就行。GD32H759 RT-Thread的以太网驱动跑通只是网络应用的开始。后面我会继续分享在它上面做Modbus TCP从站、远程固件升级、以及如何优化lwIP协议栈参数来适配不同工控场景。如果你也在调H759的网络功能希望这篇能帮你少踩几个坑。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Voyager 資料夾管理指南:為 Gemini 與 AI Studio 的 AI 對話打造真正的「檔案系統」 2026/9/21 7:43:50

Voyager 資料夾管理指南:為 Gemini 與 AI Studio 的 AI 對話打造真正的「檔案系統」

AI 应用前端 【免费下载链接】voyager Enhancement suite for Gemini, AI Studio, Claude & ChatGPT — plus a prompt manager for any websites, DeepSeek Harness included. / 面向 Gemini、AI Studio、Claude 与 ChatGPT 的增强套件;其中的提示词管理器可用…

阅读更多 →
gatsby-source-graphql 插件全解析:将任意第三方 GraphQL API 缝合进 Gatsby 数据层 2026/9/21 7:43:50

gatsby-source-graphql 插件全解析:将任意第三方 GraphQL API 缝合进 Gatsby 数据层

前端静态站点Web框架 【免费下载链接】gatsby React-based framework with performance, scalability, and security built in. 项目地址: https://gitcode.com/gh_mirrors/ga/gatsby 点击查看 免费下载 本篇技术指南以 gatsby-source-graphql 插件的 CHANGELOG 版…

阅读更多 →
Lightweight Charts v3 到 v4 迁移指南:破坏性变更逐项分析与实战改造方案 2026/9/21 7:43:50

Lightweight Charts v3 到 v4 迁移指南:破坏性变更逐项分析与实战改造方案

Lightweight Charts v3 到 v4 迁移指南:破坏性变更逐项分析与实战改造方案 【免费下载链接】lightweight-charts Performant financial charts built with HTML5 canvas 项目地址: https://gitcode.com/gh_mirrors/li/lightweight-charts 本指南以 Lightweig…

阅读更多 →
FoundationDB 存储基准测试上 RAM Disk:mako_storage_bench.sh 在 okteto 开发 Pod 上的 tmpfs 实践指南 2026/9/21 7:43:50

FoundationDB 存储基准测试上 RAM Disk:mako_storage_bench.sh 在 okteto 开发 Pod 上的 tmpfs 实践指南

分布式数据库KV存储数据库后端 【免费下载链接】foundationdb FoundationDB - the open source, distributed, transactional key-value store 项目地址: https://gitcode.com/gh_mirrors/fo/foundationdb 点击查看 免费下载 mako_storage_bench.sh 是 FoundationD…

阅读更多 →
Trigger.dev SDK 公共包修改规范:Changesets 发布流程、版本策略与 @trigger.dev/core 子路径导入指南 2026/9/21 7:43:50

Trigger.dev SDK 公共包修改规范:Changesets 发布流程、版本策略与 @trigger.dev/core 子路径导入指南

AI Agent后端任务调度开发工具可观测性AI 应用 【免费下载链接】trigger.dev Trigger.dev – build and deploy durable AI agents and workflows 项目地址: https://gitcode.com/gh_mirrors/tr/trigger.dev 点击查看 免费下载 本篇指南围绕仓库内的 .claude/rules…

阅读更多 →
VUX 的 vux2 模板与 Vue 官方 webpack 模板有什么区别:模板选型、预置配置与 vux-loader 原理 2026/9/21 7:40:49

VUX 的 vux2 模板与 Vue 官方 webpack 模板有什么区别:模板选型、预置配置与 vux-loader 原理

UI组件前端 【免费下载链接】vux Mobile UI Components based on Vue & WeUI 项目地址: https://gitcode.com/gh_mirrors/vu/vux 点击查看 免费下载 vux2 是 VUX 官方维护的 Vue 2.x 工程模板,它 fork 自 Vue 官方 webpack 模板并针对 VUX 组件库做…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞