当前位置: 首页 > news >正文

CubeMX配置STM32VET6实现网口通信(无操作系统版-附源码)

下面是使用CubeMX配置STM32F407VET6,实现以太网通讯(PHY芯片为LAN8720)的具体步骤总结:

一、硬件连接方式:

  • 硬件原理图:

    使用外部晶振为PHY芯片提供时钟。

image-20250407202838959

  • STM32F407VET6 与 LAN8720 采用 RMII 模式连接。
STM32F407VET6引脚功能(RMII)LAN8720引脚
PA1ETH_REF_CLKREF_CLK(50MHz时钟输入)
PA2ETH_MDIOMDIO
PC1ETH_MDCMDC
PA7ETH_CRS_DVCRS_DV
PC4ETH_RXD0RXD0
PC5ETH_RXD1RXD1
PB11ETH_TX_ENTX_EN
PB12ETH_TXD0TXD0
PB13ETH_TXD1TXD1
PA8ETH_RESETnRST

注意:

  • LAN8720使用RMII模式,需提供50MHz外部时钟至LAN8720芯片的XTAL1/CLKIN引脚。

    • LAN8720芯片外接的晶振频率为 25MHz,连接至LAN8720的XTAL1/CLKIN管脚。

      STM32F407在使用RMII模式进行以太网通信时,LAN8720内部会将这个25MHz时钟倍频为50MHz后输出到STM32的PA1引脚(ETH_REF_CLK),因此你只需要给LAN8720提供一个25MHz的晶振即可。

      • 外部晶振:25MHz
      • RMII参考时钟:LAN8720输出50MHz到STM32
  • LAN8720的地址引脚PHYAD0置0(接地),则默认PHY地址为0(我这里默认接地了,只是原理图没画出来)。

    • 根据LAN8720官方Datasheet说明:
    • 当PHYAD0引脚 下拉到GND 时,PHY地址为 0
    • 当PHYAD0引脚 上拉到VDDIO 时,PHY地址为 1

    在原理图中,这个引脚既未上拉也未下拉(即悬空状态),通常会导致PHY地址不确定,在实际工作中可能会导致STM32无法正确识别PHY芯片。


二、CubeMX软件配置步骤:

(1)以太网ETH配置:

  • 打开ETH外设,选择ModeRMII

    image-20250407204010071

  • 其他配置保持默认即可:

    • Ethernet MAC address:可以自定义,例如:00:80:E1:00:00:00。此处不做任何处理,保持默认即可。
  • 根据硬件设计,确认IO口是否配置成功(默认配置)

    image-20250407204112887

  • 配置PHY芯片复位引脚,这个引脚用于复位芯片,使得芯片初始化成功

    image-20250407204212948

(2)使能LWIP中间件:

  • 在Middleware选项中使能LWIP
  • 配置PHY芯片:

image-20250407204720221

PHY(Port Physical Layer),可称之为端口物理层,是一个对 OSI 模型物理层的简称。现在常用于STM32 的有 DP83848,LAN8270,DM9161/9162 等。这些 PHY 芯片都大同小异,基本寄存器都是一样的,只有扩展寄存和厂商专门设置的寄存器不同。如果将其中一个 PHY 驱动成功了,驱动另一个也是非常方便的,所以这里选择LAN8742即可(我们使用的芯片是LAN8720)

  • 配置LWIP的参数,

  • 使能ICMP(方便PING测试)

  • IP地址、子网掩码、网关等信息。 示例:

    IP地址:192.168.100.100
    子网掩码:255.255.255.0
    网关:192.168.100.1
    

    image-20250407204451400

  • 配置LWIP 关键参数:

image-20250407204627458

(3)配置中断(可选):

  • 通常默认已开启以太网相关中断,无需额外配置。

三、软件代码实现:

(1)初始化函数:

在生成的代码中,以太网和LWIP初始化函数自动生成,无需手动更改:

MX_LWIP_Init();    // LWIP协议栈初始化

(2)代码编写:

CUBEMX生成工程代码后,只需要编写如下函数即可实现网络初始化,实现和电脑网络以太网连接:

  • 主循环中必须调用MX_LWIP_Process(),否则网络栈不能正常工作,若不周期性调用,则导致网络数据包未及时处理,无法建立连接。

  • 需要初始化的时候给复位引脚一个脉冲,使PHY芯片开始工作。

    HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_RESET);
    HAL_Delay(55);
    HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_SET);
    HAL_Delay(55);	
    
  • 如果PHY芯片还是初始化不成功,则在MX_LWIP_Init()运行之前加入5-10s的延时。

  • 由于这个版本LWIP库的原因,需要我们在程序中手动设置PHY芯片的地址,根据上文分析,PHY芯片地址为0X00:

    image-20250407211139514

  • 如下为初始化代码,完成下买的代码即可PING通:

int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM3_Init();MX_USART1_UART_Init();MX_USART6_UART_Init();MX_LWIP_Init();/* USER CODE BEGIN 2 *///芯片复位HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_RESET);HAL_Delay(55);HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_SET);HAL_Delay(55);	/* Infinite loop *//* USER CODE BEGIN WHILE */while (1){		/* LWIP协议栈定时任务处理 */MX_LWIP_Process();/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

(3)网络PING测试:

编译并烧写程序后,使用PC机的CMD命令行输入:

image-20250407205212112

如果能够ping通,说明硬件连接、LWIP协议栈工作正常。


四、注意事项与调试:

  • LAN8720供电电压为3.3V。
  • 必须确保LAN8720芯片接收到50MHz外部时钟,否则通讯无法正常进行。
  • 网络线连接方式需采用交叉线或连接到交换机。
  • 代码编写部分需要特别注意一下。

相关文章:

CubeMX配置STM32VET6实现网口通信(无操作系统版-附源码)

下面是使用CubeMX配置STM32F407VET6,实现以太网通讯(PHY芯片为LAN8720)的具体步骤总结: 一、硬件连接方式: 硬件原理图: 使用外部晶振为PHY芯片提供时钟。 STM32F407VET6 与 LAN8720 采用 RMII 模式连接。…...

一种反激式开关电源设计流程

引:随着生产和技术的发展,对环保和能源的要求也越来越高,开关电源的应用也越来越广泛,开关电源电路结构种类繁多,包括单端转换器和双端转换器。本文介绍一种利用反激式变换电路实现5V开关电源的设计方法,以…...

数据结构实验3.2:链栈的基本操作与括号匹配问题

文章目录 一,问题描述二,基本要求三,算法分析(一)链栈的存储结构设计(二)链栈基本操作的时间复杂度分析(三)括号匹配算法分析 四,示例代码五,实验…...

一周学会Pandas2 Python数据处理与分析-NumPy算术运算和统计计算

锋哥原创的Pandas2 Python数据处理与分析 视频教程: 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 算术运算 数组的灵魂就在于可以进行批量的运算而不是要在循环里面进行元素的运算: 示例: …...

2011年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析

2011年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛(China Undergraduate Mathematical Contest in Modeling)是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动,目的在于激励学生学习数学的积极性,提高学…...

科普:GBDT与XGBoost比较

本文不去讲GBDT与XGBoost算法的原理及算法本身,而是从应用者的角度,对二者比较,以便选择。 XGBoost是GBDT的“工程化增强版”,在保持Boosting核心思想的同时,通过数学优化(二阶导数、正则化)和工…...

大数据技术之 Scala(5)

以下是今天学习的知识点与代码测试: 一、不可变数组与可变数组的转换 说明 arr1.toBuffer //不可变数组转可变数组arr2.toArray //可变数组转不可变数组 arr2.toArray 返回结果才是一个不可变数组,arr2 本身没有变化arr1.toBuffer 返回结果才是一个可变…...

int 与 Integer 的区别详解

1. 本质区别 特性intInteger类型基本数据类型(Primitive)包装类(Wrapper Class)存储位置栈(或作为对象成员在堆中)堆(对象实例)默认值0null(可能导致 NullPointerExcept…...

初阶数据结构(3)顺序表

Hello~,欢迎大家来到我的博客进行学习! 目录 1.线性表2.顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现初始化尾插头插尾删头删查找指定位置之前插入数据删除指定位置的数据销毁 1.线性表 首先我们需要知道的是,…...

智能DNS解析:解决高防IP地区访问异常的实战指南

摘要:针对高防IP在部分地区无法访问的问题,本文设计基于智能DNS的流量调度方案,提供GeoDNS配置与故障切换代码示例。 一、问题背景 运营商误拦截或线路波动可能导致高防IP在福建、江苏等地访问异常。传统切换方案成本高,智能DNS可…...

瑞芯微RK3568嵌入式AI项目实战:项目方向(三)

基于RK3568的成熟开源项目和实战资源丰富,以下是针对小白的精选推荐及学习路径规划,结合多个开源项目和详细教程,帮助快速入门嵌入式开发: 一、OpenHarmony智能设备开发 1. 凌蒙派-RK3568开发板项目 项目特点:支持Op…...

go游戏后端开发26:红中麻将发牌逻辑

首先,麻将游戏创建房间的逻辑与之前我们做过的“赢三张”创建房间的逻辑是一致的,整体上没有问题。不同之处在于,我们在创建房间时会根据游戏类型来创建对应的“game”,即创建的是麻将的“game”。大家之前写过相关代码&#xff0…...

DataFrame的遍历、排序、去重与分组

一.遍历 1.1 series遍历 import pandas as pds pd.Series([a,b,c,d,e,f],index[1,2,3,4,5,6])for i in s:print(i) a b c d e f 可见,遍历series会直接拿到其中的值 1.2 DataFrame遍历 1.2.1 直接遍历 import pandas as pd data {name: [Alice, Bob, Charlie]…...

QEMU源码全解析 —— 块设备虚拟化(17)

接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(16) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 《KVM实战 —— 原理、进阶与性能调优》—— 任永杰 程舟,机械工业出版社...

Java 中使用 File 类创建文件

文章目录 Java 中的 File 类一、文件(File)定义 二、File 类的介绍1 创建文件对象的相关构造器2 createNewFile() 的作用3 获取文件相关信息的常用方法4 目录的操作和文件的删除 Java 中的 File 类 在 Java 中,文件和文件流是处理数据输入/输…...

PowerBI-按钮过滤筛选-宜宾五粮液股份有限公司财务分析

下面为Powerbi制作的财务主题数据分析模版,以可视化的效果展示了某股份有限公司的财务关键指标数据,如营业收入、净利润、毛利率和净利率等。以瀑布图的方式展示了利润表项目金额情况,以树图方式展示了企业资产负债数据。另外图表可以进行筛选…...

【PyQt5】QSS样式表如何使用

在 PyQt5 中,使用 QSS(Qt Style Sheets)来为窗口中的各个控件添加样式是非常方便的,类似于 HTML 中的 CSS。你可以通过 QWidget.setStyleSheet() 方法应用 QSS 样式,或者通过 .qss 文件来设置样式。 基本步骤&#xf…...

数据结构:用生活中的例子解释 AOE 网中活动的最早和最迟开始时间的含义和计算方法

生活实例:装修房子中的活动安排 假设你要装修一套房子,主要流程如下: 拆旧(活动 A,3 天) → 拆旧完成(事件 X)水电改造(活动 B,4 天) → 水电完…...

第二篇:系统分析师——7-11章

目录 一、目标二、计划三、完成情况四、意外之喜(最少2点)1.计划内的明确认知和思想的提升标志2.计划外的具体事情提升内容和标志 五、总结 一、目标 通过参加考试,训练学习能力,而非单纯以拿证为目的。 1.在复习过程中,训练快速阅读能力、掌…...

二十七- Scala

抽象属性和方法 1. 基本语法: 定义抽象类:abstract class Person{} //通过 abstract 关键字标记抽象类 定义抽象属性:val|var name:String //一个属性没有初始化,就是抽象属性 定义抽象方法:def hello():String //…...

轨检探伤专用一体机平板电脑:为铁路安全保驾护航

在铁路轨道检测领域,高效、精准的探伤设备是保障列车安全运行的核心工具。鲁成伟业针对轨检探伤小车的严苛需求,推出了多款高性能专用一体机平板电脑,以创新的技术设计和卓越的适应性,成为行业标杆解决方案。以下从产品性能、技术…...

2018年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析

2018年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛(China Undergraduate Mathematical Contest in Modeling)是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动,目的在于激励学生学习数学的积极性,提高学…...

Python数据爬取

一.example1包下的 注意:需要在终端安装pip3 install -i https://requests.readthedocs.io/en/latest/ requests 1.Python网络爬虫初探-get请求 import requests rrequests.get(https://www.baidu.com) print(r.text) r1requests.get(https://www.jd.com) print…...

【详细解析:如何在小程序中实现动态二维码和预约信息展示】

背景介绍 随着小程序的快速发展,二维码已成为很多线上线下场景中必不可少的工具。在这篇文章中,我将分享如何在小程序中实现一个动态生成二维码并展示预约信息的功能。我们会使用 Vue 和 uni-app 框架,结合自定义的 API,来获取预…...

信息学奥赛一本通 1929:【04NOIP普及组】火星人 | 洛谷 P1088 [NOIP 2004 普及组] 火星人

【题目链接】 ybt 1929&#xff1a;【04NOIP普及组】火星人 洛谷 P1088 [NOIP 2004 普及组] 火星人 【题目考点】 1. 深搜回溯 2. STL next_permutation函数 头文件<algorithm> 函数定义&#xff1a;next_permutation(lb, ub, cmp) lb&#xff1a;区间下界&#xff…...

mysql8.0.29 win64下载

mysql win64安装包 mysql win64安装包下载 mysql win64安装包下载 通过网盘分享的文件&#xff1a;mysql 链接: https://pan.baidu.com/s/1sEOl-wSVtOG5gfIRdt5MXw?pwdgi7i 提取码: gi7i...

C++笔记-string(下)

这篇我们自己来简单实现一下string类中的各个接口&#xff0c;来帮助我们更好地理解string类接口的底层原理。 1.构造函数和析构函数 对于构造函数我们要写两种情况&#xff1a;空字符串和非空字符串 因为我们要自己实现string类&#xff0c;所以就不能用std命名空间&#xf…...

Android studio学习之路(六)--真机的调试以及多媒体照相的使用

多媒体应用&#xff08;语言识别&#xff0c;照相&#xff0c;拍视频&#xff09;在生活的各个方面都具有非常大的作用&#xff0c;所以接下来将会逐步介绍多媒体的使用&#xff0c;但是在使用多媒体之前&#xff0c;使用模拟器肯定是不行的&#xff0c;所以我们必须要使用真机…...

Airflow集成Lark机器人

🥭1. 实现目标 🕐 通过自定义函数,实现Lark机器人告警功能 🕐 通过Lark机器人代替邮件数据的发送功能 🥭2.自定义函数实现 from airflow import DAG from airflow.operators.python_operator import PythonOperator from airflow.models import Variable import requ…...

【电视软件】小飞电视v2.7.0 TV版-清爽无广告秒换台【永久更新】

软件介绍 小飞电视是一款电视端的直播软件&#xff0c;无需二次付费和登录&#xff0c;资源丰富&#xff0c;高清流畅。具备开机自启、推送功能、自定义直播源、个性化设置及节目预告等实用功能&#xff0c;为用户带来良好的观看体验。基于mytv开源项目二改&#xff0c;涵盖央…...

2025年- H1-Lc109-160. 相交列表--java版

1.题目描述 2.思路 “双指针切换链表头” 思路一&#xff1a;双指针路径对齐 while (pA ! pB) { pA (pA null) ? headB : pA.next; pB (pB null) ? headA : pB.next; } 让两个指针走相同的总路径长度&#xff01; 设&#xff1a; 链表 A 独有部分长度是 lenA 链表 B …...

《大模型MCP服务协议与多智能体开发实战10讲》课程大纲

以下是针对大模型MCP&#xff08;Model Context Protocol&#xff09;服务协议的多智能体开发系列专栏的10节课课程设计&#xff0c;结合MCP协议特性与多智能体系统的前沿实践&#xff0c;课程结构从协议原理到工程落地&#xff0c;涵盖核心技术、实战案例与前沿趋势&#xff1…...

C++20 范围库:开启现代 C++ 编程的新篇章

文章目录 一、范围库的核心概念&#xff08;一&#xff09;范围&#xff08;Range&#xff09;&#xff08;二&#xff09;视图&#xff08;View&#xff09; 二、范围库的主要特性&#xff08;一&#xff09;范围工厂&#xff08;二&#xff09;范围适配器&#xff08;三&…...

基于 Spring Boot 瑞吉外卖系统开发(二)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;二&#xff09; 员工登录功能实现 员工登录页面login.html存放在/resources/backend/page/login目录下。 启动项目&#xff0c;在浏览器中通过地址“http://localhost:8080/backend/page/login/login.html”访问员工登录页面。…...

Matlab实现鼠群优化算法优化随机森林算法模型 (ROS-RF)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 鼠群优化算法&#xff08;Rat Swarm Optimizer, ROS&#xff09;是一种基于老鼠觅食行为的新型元启发式优化算法。ROS通过模拟老鼠在寻找食物时的社会互动和群体智能来探索解空间&#xff0c;旨在高效地找到全局最…...

软件工程第四章习题

一、选择题 1.选择题 (1)在需求分析之前有必要进行( &#xff09;工作。 A.程序设计 B.可行性研究 C. E-R 分析 D.行为建模 &#xff08;2)需求分析是一个&#xff08; )&#xff0c;它应该贯穿于系统的整个生命周期&#xff0c;而不是仅仅属于软件生 命周期早期的一…...

第十九:b+树和b-树

优点一&#xff1a; B树只有叶节点存放数据&#xff0c;其余节点用来索引&#xff0c;而B-树是每个索引节点都会有Data域。 优点二&#xff1a; B树所有的Data域在叶子节点&#xff0c;并且所有叶子节点之间都有一个链指针。 这样遍历叶子节点就能获得全部数据&#xff0c;这样…...

SQL Server查询性能下降:执行计划不稳定与索引优化

问题现象&#xff1a; SQL Server 2022 中某些关键查询性能突然下降&#xff0c;执行时间从毫秒级增至数秒&#xff0c;日志中未报错&#xff0c;但查询计划显示低效的索引扫描或键查找。 快速诊断 捕获实际执行计划&#xff1a; -- 启用实际执行计划 SET STATISTICS XML, TIME…...

python mcp server最佳实践

文章目录 1、使用fastmcp包还是mcp包?要不要使用uv创建虚拟环境?编写mcp server代码测试cline配置小Tip2、使用stdio还是sse?其实能做的选择不多: 1、使用fastmcp包还是mcp包? 2、使用stdio还是sse? 1、使用fastmcp包还是mcp包? 个人建议选择后者,因为大模型说,后者…...

STM32看门狗应用实战:独立看门狗与窗口看门狗深度解析(下) | 零基础入门STM32第九十五步

主题内容教学目的/扩展视频看门狗什么是看门狗&#xff0c;原理分析&#xff0c;启动喂狗方法&#xff0c;读标志位。熟悉在程序里用看门狗。 师从洋桃电子&#xff0c;杜洋老师 &#x1f4d1;文章目录 一、看门狗应用架构分析1.1 系统监控流程图1.2 双看门狗应用场景对比 二、…...

操作符详解

1.操作符的分类 算数操作符&#xff1a; 、- 、 * 、 / 、 %移位操作符&#xff1a;>>、 <<位操作符&#xff1a;& 、| 、^ 赋值操作符&#xff1a;、、-、/、%、<<、>>、&、|、^单目操作符&#xff1a;&#xff01;、、- -、&、*、、…...

LeetCode 第41~43题

目录 LeetCode 第41题&#xff1a;缺失的第一个正数 LeetCode 第42题&#xff1a;接雨水 LeetCode 第43题&#xff1a;字符串相乘 LeetCode 第41题&#xff1a;缺失的第一个正数 题目描述&#xff1a; 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的…...

蓝桥杯web工作协调

在 JavaScript 里&#xff0c;Set 是一种内置对象&#xff0c;可存储任何类型的唯一值&#xff0c;无论是原始值还是对象引用。下面是 Set 集合常用方法的介绍&#xff1a; 1. 创建 Set 可以使用 new Set() 来创建一个空的 Set&#xff0c;或者传入一个可迭代对象来初始化 Se…...

夜神模拟器无法下载fiddler证书

提示信息&#xff1a; No root certificate was found. Have you enabled HTTPS traffic decryption in Fiddler yet? 在fiddler安装目录运行以下命令&#xff1a; makecert.exe -r -ss my -n "CNDO_NOT_TRUST_FiddlerRoot, ODO_NOT_TRUST, OUCreated by http://www.fidd…...

OpenCV阈值处理详解

文章目录 一、引言二、阈值处理的基本概念2.1 什么是阈值处理&#xff1f;2.2 为什么需要阈值处理&#xff1f; 三、OpenCV中的阈值处理方法3.1 基本阈值处理3.2 阈值类型详解1. 二进制阈值化 (cv2.THRESH_BINARY)2. 反二进制阈值化 (cv2.THRESH_BINARY_INV)3. 截断阈值化 (cv2…...

开源模型应用落地-Qwen2.5-Omni-7B模型-Gradio-部署 “光速” 指南(二)

一、前言 2025年3月,阿里巴巴通义千问团队开源的全模态大模型Qwen2.5-Omni-7B,犹如一记惊雷划破AI领域的长空。这个仅70亿参数的"小巧巨人",以端到端的架构实现了对文本、图像、音频、视频的全模态感知,更通过创新的Thinker-Talker双核架构,将人类"接收-思…...

【仪器仪表专题】案例:信号高电平到底是看顶端值还是最大值?

案例背景 本案例在于审查其他部门信号完整性测试报告中发现的一处有关RS232输入信号质量波形测试问题点。 首先发现测试报告中的RS232时序和信号质量测试中有一个NG项目,如下所示,可以看到T2IN的高电平要求是2.0V~3.6V之间,但是实测是3.8V,超过极限值,所以判定为NG。 …...

Git版本管理系列:(一)使用Git管理单分支

目录 基础概念介绍仓库的创建创建隐藏目录添加代码到暂存区提交代码到仓库提交记录查询比较差异标签文件删除版本回退总结 Git‌ 是一个分布式版本控制系统&#xff08;DVCS&#xff09;&#xff0c;用于跟踪文件的变更并协调多人协作开发‌&#xff0c;由 Linus Torvalds 于 2…...

Vue框架的响应式系统

以下是关于 响应式系统 的系统梳理: 一、响应式系统的核心目标 数据驱动视图:自动追踪数据变化并触发视图更新高效依赖追踪:精确识别数据与视图的依赖关系批量异步更新:优化多次数据变更的更新性能组件级更新:最小化DOM操作范围二、核心架构演进 版本核心技术优势局限性Vu…...

【Shell】模拟爬虫下载天龙八部小说

Shell脚本&#xff1a; #curl https://tianlong.5000yan.com/ -o tianlong.html grep "href" tianlong.html | grep html | awk -F"\"" { print $6 } >> urls.txt grep "href" tianlong.html | grep html | awk -F">"…...