15.38、 以太网实现TFTP服务器实验.pdf

上传人:紫竹语嫣 文档编号:5514333 上传时间:2020-05-27 格式:PDF 页数:23 大小:506.13KB
返回 下载 相关 举报
15.38、 以太网实现TFTP服务器实验.pdf_第1页
第1页 / 共23页
15.38、 以太网实现TFTP服务器实验.pdf_第2页
第2页 / 共23页
15.38、 以太网实现TFTP服务器实验.pdf_第3页
第3页 / 共23页
15.38、 以太网实现TFTP服务器实验.pdf_第4页
第4页 / 共23页
15.38、 以太网实现TFTP服务器实验.pdf_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《15.38、 以太网实现TFTP服务器实验.pdf》由会员分享,可在线阅读,更多相关《15.38、 以太网实现TFTP服务器实验.pdf(23页珍藏版)》请在三一文库上搜索。

1、 以太网实现以太网实现TFTP服务器实验服务器实验 10/100 以太网媒体访问控制器(MAC)是基于 ARM Cortex-M3 的 STM32 互联系列 (Connectivity Line)微控制器的特色亮点之一。 STM32 神舟 IV 号开发板使用的即是 LQFP100 封装的 STM32 互联系列微控制器 STM32F107VC。 STM32 神舟 IV 号开发板支持 10M/100M 自适应, 全双工半双工自适应。 她的优异性能可以满足需要灵活的工业标准连接功能的挑战 性需求。 我们将陆续介绍神舟 IV 号开发板太网硬件平台的建立原理和方法,以及基于神舟 IV 号开发板太网硬件平

2、台实现网络远程登录 Telnet 功能、TFTP 文件传输功能和 HTTP 网页功 能等常见的应用实例。 TFTP(Trivial File Transfer Protocol, 中文名叫简单文件传输协议)是 TCP/IP 协议族中 的一个用来在客户机与服务器之间进行简单文件传输的协议, 提供不复杂、 开销不大的文件 传输服务。TFTP 使用的端口号为 UDP 的 69(注意注意:TFTP 不一定非要在 UDP 上实现) ,因 此它可以穿越许多防火墙。 不过它也有缺点, 比如传送不可靠、 没有密码验证等。 虽然如此, 它还是非常适合传送小型文件的。 注意 TFTP 和 FTP 协议有区别, 本

3、实验为 TFTP 实验。【FTP (File Transfer Protocol 文件传输协议)是用于在互联网中传输文件的协议。FTP 服务器程序一 般工作在 20 和 21 两个端口, 端口 21 用于在客户端和服务器之间传输控制流数据流,而端 口 20 用于传输 FTP 数据流】 那么就让我们通过神舟 IV 号开发板太网硬件平台认识一下 TFTP 协议,实现一个通过 TFTP 访问神舟 IV 号开发板上的 SD 卡文件的实例。 ? 意义与作用意义与作用 嵌入式系统是继 IT 网络技术之后,又一个新的技术发展方向。由于嵌入式系统具有体 积小、性能强、功耗低、可靠性高以及面向行业应用的突出特征

4、,目前己经广泛地应用于军 事国防、消费电子、网络通信、工业控制等各个领域。随着计算机技术与通信技术的发展, 嵌入式系统的研究与开发也有着越来越重要的实际意义。而 ARM 是业界领先的 32 位嵌入 式 RISC 处理器技术提供商, 占领了大约 75的市场。 它可为一个完整系统的开发提供全面 的技术支持,技术具有性能高、成本低和能耗省的特点。ARM 的微处理器核心正迅速地成 为便携式通信设备、手持计算、多媒体数字消费和嵌入式解决方案市场中 MSC 批量生产的 标准。 有了 STM32 神舟 IV 号开发板以太网硬件平台,以及已经移植好的 TCP/IP 协议栈,我 们可以很轻松的实现各种网络应用。

5、 TFTP 是一个传输文件的简单协议,它基于是一个传输文件的简单协议,它基于 UDP 协议而实现协议而实现。TFTP 全称为 Trivial File Transfer Protocol, 中文名叫简单文件传输协议大家可以从它的名称上看出,它适合传送“简 单”的文件。与 FTP 不同的是,它使用的是 UDP 的 69 端口,因此它可以穿越许多防火墙。 此协议设计的时候是进行小文件传输的。因此它不具备通常的 FTP 的许多功能,它只能从 文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输 8 位数据。传输中有三 种模式:netascii,这是 8 位的 ASCII 码形式,另一种是 o

6、ctet,这是 8 位源数据类型;最后 一种 mail 已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。 ? 实验原理实验原理 注:本实验的以太网硬件原理与前面“以太网实现Telnet远程登录实验”对应章节完全 相同,此处不再重复,请参考“以太网实现Telnet远程登录实验”对应章节。 TFTP 协议简介协议简介 TFTP(Trivial File Transfer Protocol, 中文名叫简单文件传输协议)是 TCP/IP 协议族中 的一个用来在客户机与服务器之间进行简单文件传输的协议, 提供不复杂、 开销不大的文件 传输服务。TFTP 使用的端口号为 UDP 的 69,因此

7、它可以穿越许多防火墙。不过它也有缺 点,比如传送不可靠、没有密码验证等。此协议设计的时候是进行小文件传输的。因此它不 具备通常的 FTP 的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不 进行认证,它传输 8 位数据。 与其它协议的联系与其它协议的联系 任何传输起自一个读取或写入文件的请求, 这个请求也是连接请求。 如果服务器批准此 请求,则服务器打开连接,数据以定长 512 字节传输。每个数据包包括一块数据,服务器发 出下一个数据包以前必须得到客户对上一个数据包的确认。 如果一个数据包的大小小于 512 字节,则表示传输结束。如果数据包在传输过程中丢失,发出方会在超时后重新传

8、输最后一 个未被确认的数据包。通信的双方都是数据的发出者与接收者,一方传输数据接收应答,另 一方发出应答接收数据。大部分的错误会导致连接中断,错误由一个错误的数据包引起。这 个包不会被确认,也不会被重新发送,因此另一方无法接收到。如果错误包丢失,则使用超 时机制。错误主要是由下面三种情况引起的:不能满足请求,收到的数据包内容错误,而这 种错误不能由延时或重发解释,对需要资源的访问丢失(如硬盘满) 。TFTP 只在一种情况 下不中断连接,这种情况是源端口不正确,在这种情况下,指示错误的包会被发送到源机。 这个协议限制很多,这是都是为了实现起来比较方便而进行的。 因为 TFTP 使用 UDP,而

9、UDP 使用 IP,IP 可以还使用其它本地通信方法(一般为以太 网) 。因此一个 TFTP 包中会有以下几段:本地媒介头,IP 头,数据报头,TFTP 头,剩下 的就是 TFTP 数据了。TFTP 在 IP 头中不指定任何数据,但是它使用 UDP 中的源和目标端 口以及包长度域。由 TFTP 使用的包标记(TID)在这里被用做端口,因此 TID 必须介于 0 到 65,535 之间。对它的初始化我们在后面讨论。TFTP 头中包括两上字节的操作码,这个码 指出了包的类型下面我们看看大体上的 TFTP 包格式。 初始连接初始连接 初始连接时候需要发出 WRQ(Write request 请求写入

10、远程系统)或 RRQ(Read request 请求读取远程系统) , 收到一个确定应答, 一个确定可以写出的包或应该读取的第一块数据。 通常确认包包括要确认的包的包号, 每个数据包都与一个块号相对应, 读请求块号从 1 开始 而且是连续的。因此对于写入请求的确定是一个比较特殊的情况,因此它的包的包号是 0。 如果收到的包是一个错误的包,则这个请求被拒绝。创建连接时,通信双方随机选择一个 TID, 因此是随机选择的, 因此两次选择同一个 ID 的可能性就很小了。 每个包包括两个 TID, 发送者 ID 和接收者 ID。这些 ID 用于在 UDP 通信时选择端口,请求主机选择 ID 的方法上 面

11、已经说过了,在第一次请求的时候它会将请求发到 TID 69,也就是服务器的 69 端口上。 应答时,服务器使用一个选择好的 TID 作为源 TID,并用上一个包中的 TID 作为目的 ID 进 行发送。这两个被选择的 ID 在随后的通信中会被一直使用。下例是一个写入的例子,其中 WRQ,ACK 和 DATA 代表写入请求,确认和数据。 1. 主机 A 向主机 B 发出 WRQ,其中端口为 69 2. B 机向 A 机发出 ACK,块号为 0,包括 B 和 A 的 TID 此时连接建立, 第一个数据包以序列号 1 从主机开始发出。 以后两台主机要保证以开始 时确定的 TID 进行通信。如果源 I

12、D 与原来确定的 ID 不一样,这个包会被认识为发送到了 错误的地址而被抛弃。错误的包是被发送到正确端口的,但是包本身有错误。设想发送方发 出一个请求,这个请求在网络的那个设备中被复制成两个包,接收方先后接收到两个包。接 收方会认为为这是两个独立的请求,会返回两个应答。当这两个应答其中之一被接收到时, 连接已经建立。第二个应答再到达时,这个包会被抛弃,而不会因为接收到第二个应答包而 导致第一个建立的连接失败。 TFTP 包包 - | Local Medium | Internet | Datagram | TFTP Opcode | - TFTP 支持五种类型的包,分别如下: opcode o

13、peration 1 .Read request (RRQ) 2 .Write request (WRQ) 3 .Data (DATA) 4 .Acknowledgment (ACK) 5 .Error (ERROR) 包头中包括了这个包所指定的操作码。 RRQ/WRQ 包如下: 2 bytes string 1 byte string 1 byte - | Opcode | Filename | 0 | Mode | 0 | - RRQ 和 WRQ 包(代码分别为 1 和 2)的格式如上所示。文件名是 NETASCII 码字符, 以 0 结束。 而 MODE 域包括了字符串“netascii

14、“,“octet“或“mail“,名称不分大小写。接收 到 NETASCII 格式数据的主机必须将数据转换为本地格式。OCTET 模式用于传输文件,这 种文件在源机上以 8 位格式存储。 假设每个机器都存在一个 8 位的格式, 这样的假设是最一 般的。比如 DEC-20,这是一种 36 位机,我们可以假设它是 4 个 8 位外加另外 4 位而构成。 如果机器收到 OCTET 格式文件,返回时必须与原来文件完全一样。在使用 MAIL 模式时, 用户可以在 FILE 处使用接收人地址,这个地址可以是用户名或用户名主机的形式,如果 是后一种形式,允许主机使用电子邮件传输此文件。如果使用 MAIL 类

15、型,包必须以 WRQ 开始, 否则它与 NETASCII 完全一样。 我们的讨论建立在发送方和接收方都在相同模式的情 况下,但是双方可以以不同的模式进行传输。例如一个机器可以是一台存储服务器,这样一 台服务器需要将 NETASCII 格式转换为自己的格式。 另外, 我们可以设想 DEC-20 这种机器, 它使用 36 位字长, 用户这边可以使用特殊的机制一次读取 36 位, 而服务器却可以仍然使用 8 位格式。在这两种情况下,我们看到了两台机器使用不同格式的情况。可以在两台主机间 定义其它的传输方式,但是定义要小心,因为这种传输方式不为人知,而且也没有权威机构 为其指定名称或定义它的模式。 D

16、ATA 包如下: 2 bytes 2 bytes n bytes Opcode | Block # | Data | DATA 包数据在数据包中传输,其格式如上图所示。数据包的 OP 码为 3,它还包括有 一个数据块号和数据。数据块号域从 1 开始编码,每个数据块加 1,这样接收方可以确定这 个包是新数据还是已经接收过的数据。 数据域从 0 字节到 512 字节。 如果数据域是 512 字节 则它不是最后一个包,如果小于 512 字节则表示这个包是最后一个包。除了 ACK 和用于中 断的包外,其它的包均得到确认。发出新的数据包等于确认上次的包。WRQ 和 DATA 包由 ACK 或 ERROR

17、 数据包确认,而 RRQ 数据包由 DATA 或 ERROR 数据包确认。 下图即是一个 ACK 包,操作码为 4。其中的包号为要确认的数据包的包号。 ACK 包如下: 2 bytes 2 bytes - | Opcode | Block # | - WRQ 数据包被 ACK 数据包确认,WRQ 数据包的包号为 0。 ERROR 包如下: 2 bytes 2 bytes string 1 byte - | Opcode | ErrorCode | ErrMsg | 0 | 一个 ERROR 包,它的操作码是 5,它的格式如上所示。此包可以被其它任何类型的包 确认。错误码指定错误的类型。错误的值

18、和错误的意义在附录中。错误信息是供程序员使用 的。 正常终止正常终止 传输的结束由 DATA 数据标记,其包括 0-511 个字符。这个包可以被其它数据包确认。 接收方在发出对最后数据包的确认后可以断开连接,当然,适当的等待是比较好的,如果最 后的确定包丢失可以再次传输。 如果发出确认后仍然收到最后数据包, 可以确定最后的确认 丢失。发送最后一个 DATA 包的主机必须等待对此包的确认或超时。如果响应是 ACK,传 输完成。 如果发送方超时并不准备重新发送并且接收方有问题或网络有问题时, 发送也正常 结束。当然实现时也可以是非正常结束,但无论如何连接都将被关闭。 早终结早终结 如果请求不能被满

19、足,或者在传输中发生错误,需要发送 ERROR 包。这仅是一种传输 友好的方式,这种包不会被确认也不会被重新传输,因此这种包可能永远不会被接收到。因 此需要用超时来侦测错误。 其它:其它: 读文件的初始连接 1. 主机 A 发 RRQ 到 A,包括源=A 的 ID 和目的=69 2. 主机 B 发送 DATA,其中包号=1,这个包被传送到 A,源=B 的 ID,目的=A 的 ID 错误码 Value Meaning 0 未定义,请参阅错误信息(如果提示这种信息的话) 1 文件未找到 2 访问非法 3 磁盘满或超过分配的配额 4 非法的 TFTP 操作 5 未知的传输 ID 6 文件已经存在 7

20、 没有类似的用户 安全问题安全问题 因为 TFTP 没有安全控制机制,因此安全问题应该多加考虑。通常 TFTP 允许下载数据 而不允许上传数据。本实验我们实现的 TFTP 允许下载数据也允许上传数据。那么就让我们 通过神舟 IV 号开发板太网硬件平台认识一下 TFTP 协议,实现一个通过 TFTP 访问神舟 IV 号开发板上的 SD 卡文件的实例。 ? 硬件设计硬件设计 神舟IV号开发板的处理器STM32F107内部以太网模块与外部PHY芯片采用RMII接口的 连接图如下所示:采用RMII接口比MII接口可以节约近一半管脚资源。 以太网以太网 PHY 芯片芯片 DM9161A 工作在工作在 R

21、MII 模式时需要外部提供模式时需要外部提供 50M 时钟输入,神舟时钟输入,神舟 IV 号开发板上可以通过位号为号开发板上可以通过位号为 U9 的的 50M 有源晶振来提供,也可以由有源晶振来提供,也可以由 STM32F107 的的 PA8 pin (MCO)管教输出提供。默认使用管教输出提供。默认使用 STM32F107 的的 PA8 pin (MCO)为为 DM9161A 提供提供 50M 时钟输入。时钟输入。 图表 1 STM32F107 以太网 RMII 连接图 神舟 IV 号开发板采用高性价比的 DM9161A 作为 10M/100M 以太网 PHY 芯片,采用 RMII 接口与连

22、接,标准 RJ45 接口,支持平行交叉网线自适应。其原理图如所示。 图表 2 以太网接口原理图 DM9161A 是一款在嵌入式系统中应用的极为普遍的以太网 PHY 芯片。DM9161A 符合 IEEE802.3.10BASE-T/100BASE-TX 协议,符合 ANSIX3T12TP-PMD1995 标准,集成 10BASE-T,100BASE-TX 收发器,支持 MII/RMII 接口,支持中继模式和节点模式转换,支 持全工和半工模式转换,含可触发中断的 MII/RMII 管理接口,支持低功耗模式,采用 0.35 纳米 COMS 工艺,3.3V 供电, 48-pin PQFP 小封装(11

23、cm)。 ? 软件设计软件设计 本章节我们主要介绍在 STM32 神舟 IV 号开发板以太网硬件平台上实现 TFTP 协议, 完 成一个通过 TFTP 协议访问神舟 IV 号开发板上的 SD 卡文件的实例。所以我们软件部分也 主要讲解如何在 UDP 端口 69 端口实现 TFTP 协议的函数。其它如串口、指示灯、EEPROM 和 RTC 等相关知识请参考前面对应的章节。 软件部分我们分为四部分来讲解,第一部分 Lwip 协议栈相关知识。第二部分主要介绍 网络数据包在软件处理中的流向。 第三部分介绍网络以及系统的初始化。 第四部分介绍实现 TFTP 协议的应用程序。 第一部分第一部分Lwip协议

24、栈相关知识。协议栈相关知识。 Lwip协议栈相关知识设计的涉及Lwip协议的实现以及底层TCPIP相关知识和API应用 程序接口部分等,相关知识请参考附件TCP/IP 协议栈LwIP的设计与实现。该附件描述 了LwIP的设计与实现。描述了在协议栈实现中以及像内存与缓冲管理这样的子系统中使用 的算法和数据结构。本文还包括LwIP的参考手册以及使用LwIP的代码例子。 第二部分主要介绍网络数据包的流向。第二部分主要介绍网络数据包的流向。 本实验软件程序处理网络数据包的大体流向是: 在收到网络数据包时产生网络中断, 在 网络中断中处理函数 ETH_IRQHandler(位于“stm32f10x_it

25、.c”文件中)中调用 LwIP_Pkt_Handle()接收数据包并通知 Lwip 的 TCPIP 协议栈, 而真正解析处理网络数据包是 在 mian 函数中调用“System_Periodic_Handle();”来处理的。 首先我们看看 main 函数,如下: main 函数主要完成然后是-最后是 。真正解析处理网络数据包是在 mian 函数中调用 “System_Periodic_Handle();”来处理的。 下面我们看看网络中断处理函数。网络中断中处理函数 ETH_IRQHandler(位于 “stm32f10x_it.c” 文件中) 中调用 LwIP_Pkt_Handle()接收网

26、络数据包并通知 Lwip 的 TCPIP 协议栈, LwIP_Pkt_Handle()函数调用了 ethernetif_input 函数 ethernetif_input ()函数中的“p = low_level_input(netif);”将数据接收存入 pbuf 中,然后 (move received packet into a new pbuf)的“err = netif-input(p, netif);” 最终调用了位于 “etharp.c”文件中的函数“err_t ethernet_input(struct pbuf *p, struct netif *netif)” 负责解析 通知

27、协议栈。 也就是说最终调用了位于“etharp.c”文件中的函数“err_t ethernet_input(struct pbuf *p, struct netif *netif)”后退出中断,最后 mian 函数周期调用的“System_Periodic_Handle();”函 数便会解析处理 pbuf 中的网络数据。 第三部分介绍网络以及系统的初始化。第三部分介绍网络以及系统的初始化。 以太网中断配置函数: 以太网 GPIO 管脚配置,由于是 RMII 接口使用的管脚与 MII 有所不同: 以太网配置,包括相关的时钟、MAC 参数以及 DMA 等等: DHCP协议(Dynamic Host

28、 Configuration Protocol)是设备自动获取IP地址的一种协议, 神舟四号也支持DHCP协议,DHCP协议动态IP分配的配置在文件 Utilitieslwip-1.3.1srcincludelwipopt.h文件的第523行至533行 当设置为“#define LWIP_DHCP 1“时, 将启动动态IP分配的功能, 当动态IP分配失败时 才使用静态IP地址;当设置为“#define LWIP_DHCP 0“时,将关闭动态IP分配的功能,直接 使用静态IP地址。 神舟四号开发板的出厂IP地址为192.168.1.6,用户可以根据自己的实际环境修改用户期 望的地址。关于静态IP

29、地址的设置在文件Projectsrcnetconf.c文件中中有两处地方涉及静态 IP,第一处在第118行至122行LwIP_Init函数里: 以上地址是在关闭动态IP分配的功能(即“#define LWIP_DHCP 0“)时,直接使用上 述IP地址 第二处在在Projectsrcnetconf.c文件中的第333行至335行Display_Periodic_Handle函数 里 以上地址当启动动态 IP 分配的功能(即“#define LWIP_DHCP 1“) ,但是动态 IP 地址 分配超时失败时使用上述 IP 地址,您可以安装您的要求修改 IP 地址,修改后需要重新编译 软件工程并重

30、新下载到神舟四号开发板上才能生效。 第四部分介绍实现第四部分介绍实现 TFTP 文件传输应用程序文件传输应用程序 实现 TFTP 的应用的相关程序位于“tftpserver.c”文件中,首先是头文件引用与函数声 明等等: 错误码的定义前面已经讲过,其中文含义如下: 0 未定义,请参阅错误信息(如果提示这种信息的话) 1 文件未找到 2 访问非法 3 磁盘满或超过分配的配额 4 非法的 TFTP 操作 5 未知的传输 ID 6 文件已经存在 7 没有类似的用户 然后是 TFTP 初始化,申请资源并向协议栈注册函数,通过 pcb = udp_new();生产一个 新的 udpPCB 控制块注意此处

31、为 UDP 而不是 TCP,然后调用“udp_bind(UDPpcb, IP_ADDR_ANY, port);”将新申请的 udpPCB 与 69 端口绑定,IP_ADDR_ANY 参数表示接 受来自任意 IP 的请求。 最后的“udp_recv(UDPpcb, recv_callback_tftp, NULL);”通知协议 栈当 69 端口有连接请求时调用 recv_callback_tftp 函数处理该请求。 当 69 端口有连接请求时调用 recv_callback_tftp 函数处理该请求,以下是该函数。 recv_callback_tftp 函数调用了 process_tftp_re

32、quest 函数处理该请求。首先在串口和 LCD 触摸屏打印信息提示有 HTTP 连接请求,并打印对方的 IP 地址。如下: 然后将连接绑定到另一个端口, 此处为0端口,“bind to port 0 to receive next available free port. NOTE: This is how TFTP works. There is a UDP PCB for the standard port 69 which al transactions begin communication on, however, _all_ subsequent transactions for

33、 a given “stream“ occur on another port!。 然后是 TFTP 协议中操作码的解析,使用 SWITCH 判断,如果是文件下载请求,则首 先初始化 SD 卡以及 EFS 文件系统, 最后调用 “tftp_process_read(upcb, addr, port, FileName);” 函数处理读取对应文件的请求。 如果不是文件下载请求则使用 SWITCH 判断继续判断,如果 TFTP 协议操作码是文件 上传请求则首先提前要写入的文件名,然后初始化 SD 卡以及 EFS 文件系统,最后调用 “tftp_process_write(upcb, addr, p

34、ort, FileName);”函数处理写入对应文件的请求。 如果不是文件下载请求也不是文件上传则使用 SWITCH 的 default 分支调用函数 “tftp_send_error_message(upcb, addr, port, TFTP_ERR_ACCESS_VIOLATION);”处理异常。 上面提到的文件上传分支处理写入请求的函数如下, 通过文件系统将接收到的数据写入 对应的文件中。 注意前面已经讲解的写入请求的包号是 0,对应下面的“args-block = 0;” 上面提到的文件下载分支处理读取请求的函数如下, 通过文件系统将接对应的文件中的 数据从网络发送给接收端。 注意前

35、面已经讲解的读请求的包号是 1, 对应下面的 “args-block = 1;” 上面提到的如果不是文件下载请求也不是文件上传请求的异常处理函数 tftp_send_error_message 如下: 异常处理函数tftp_send_error_message调用tftp_construct_error_message将前面多次提到 的错误码的字符串发送给对方: ? 下载与验证下载与验证 神舟IV号光盘源码目录包含本实验的工程源码,在神舟IV号光盘源码 36 以太网 STM32F107_ETH_LCD(神 舟IV号)TFTP文 件 传 输.rarProjectEWARMv5STM3210C -

36、EVALExe目录下的【以太网】STM32F107_ETH_LCD(神舟IV号3.2寸LCD).hex文件即为前 面我们分析的神舟IV号以太网TFTP文件传输实验编译好的固件,我们可以直接将固件下载 到神舟IV号开发板中,观察运行效果。 如果使用JLINK下载固件,请按错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。下载固件 到神舟IV号开发板小节进行操作。 如果使用USB下载固件,请按错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。小节进行操 作。 如果使用串口下载固件,请按错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。错误!未找到引用源。小节进行 操作。 如果在IAR开发环境中, 下载编译好的固件或者在线调试, 请按错误! 未找到引用源。错误! 未找到引用源。 错误!未找到引用源。错误!未找到引用源。小节进行操作。 如果在MDK开发环境中,下载编译好的固件或者在线调试,请按错误!未找到引用源。错误!未找到引用源。 错误!未找到引用源。错误!未找到引用源。小节进行操作。 ? 实验现象实验现象 STM32 神舟神舟IV号开发板以太网实验介绍请参照号开发板以太网实验介绍请参照 错误!未找到引用源。 错误!未找到引用源。 章节的章节的 错误!未找到引用源。 小节部分。小节部分。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料


经营许可证编号:宁ICP备18001539号-1