parallels desktop 网络初始化失败_阿波罗 STM32F767 开发板资料连载第六十六章 网络通信实验

1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自《STM32F7 开发指南(HAL 库版)》关注官方微信号公众号,获取更多资料:正点原子

c367ae4365a33e86201630b764b10424.png

第六十六章 网络通信实验

本章,我们将向大家介绍阿波罗 STM32F767 开发板的网口及其使用。本章,我们将使用

ALIENTEK 阿波罗 STM32F767 开发板自带的网口和 LWIP 实现:TCP 服务器、TCP 客服端、

UDP 以及 WEB 服务器等四个功能。本章分为如下几个部分:

66.1 STM32F767 以太网以及 TCP/IP LWIP 简介

66.2 硬件设计

66.3 软件设计

66.4 下载验证

66.1 STM32F767 以太网以及 TCP/IP LWIP 简介

本章,我们需要用到 STM32F767 的以太网控制器和 LWIP TCP/IP 协议栈。接下来分别介

绍这两个部分。

66.1.1 STM32F767 以太网简介

STM32F767 芯片自带以太网模块,该模块包括带专用 DMA 控制器的 MAC 802.3(介质访

问控制)控制器,支持介质独立接口 (MII) 和简化介质独立接口 (RMII),并自带了一个用于

外部 PHY 通信的 SMI 接口,通过一组配置寄存器,用户可以为 MAC 控制器和 DMA 控制器选

择所需模式和功能。

STM32F767 自带以太网模块特点包括:

 支持外部 PHY 接口,实现 10M/100Mbit/s 的数据传输速率

 通过符合 IEEE802.3 的 MII/RMII 接口与外部以太网 PHY 进行通信

 支持全双工和半双工操作

 可编程帧长度,支持高达 16KB 巨型帧

 可编程帧间隔(40~96 位时间,以 8 为步长)

 支持多种灵活的地址过滤模式

 通过 SMI(MDIO)接口配置和管理 PHY 设备

 支持以太网时间戳(参见 IEEE1588-2008),提供 64 位时间戳

 提供接收和发送两组 FIFO。

 支持 DMA

STM32F767 以太网功能框图如图 66.1.1.1 所示:

d49bf5f97afa23fc30964f75a6813451.png

图 66.1.1.1 STM32F767 以太网框图

从上图可以看出,STM32F767 是必须外接 PHY 芯片,才可以完成以太网通信的,外部 PHY

芯片可以通过 MII/RMII 接口与 STM32F767 内部 MAC 连接,并且支持 SMI(MDIO&MDC)

接口配置外部以太网 PHY 芯片。

接下来分别介绍 SMI/MII/RMII 接口和外部 PHY 芯片。

SMI 接口,即站管理接口,该接口允许应用程序通过 2 条线:时钟(MDC)和数据线(MDIO)

访问任意 PHY 寄存器。该接口支持访问多达 32 个 PHY,应用程序可以从 32 个 PHY 中选择

一个 PHY,然后从任意 PHY 包含的 32 个寄存器中选择一个寄存器,发送控制数据或接收状态

信息。任意给定时间内只能对一个 PHY 中的一个寄存器进行寻址。

MII 接口,即介质独立接口,用于 MAC 层与 PHY 层进行数据传输。STM32F767 通过 MII

与 PHY 层芯片的连接如图 66.1.1.2 所示。

49c85cf2a29431fbf89ebfbed489ec45.png

图 66.1.1.2 MII 接口信号

 MII_TX_CLK:连续时钟信号。该信号提供进行 TX 数据传输时的参考时序。标称频率为:

速率为 10 Mbit/s 时为 2.5 MHz;速率为 100 Mbit/s 时为 25 MHz。

 MII_RX_CLK:连续时钟信号。该信号提供进行 RX 数据传输时的参考时序。标称频率为:

速率为 10 Mbit/s 时为 2.5 MHz;速率为 100 Mbit/s 时为 25 MHz。

 MII_TX_EN:发送使能信号。

 MII_TXD[3:0]:数据发送信号。该信号是 4 个一组的数据信号,

 MII_CRS:载波侦听信号。

 MII_COL:冲突检测信号。

 MII_RXD[3:0]:数据接收信号。该信号是 4 个一组的数据信号

 MII_RX_DV:接收数据有效信号。

 MII_RX_ER:接收错误信号。该信号必须保持一个或多个周期(MII_RX_CLK),从而向 MAC

子层指示在帧的某处检测到错误。

RMII 接口,即精简介质独立接口,该接口降低了在 10/100 Mbit/s 下微控制器以太网外设与

外部 PHY 间的引脚数。根据 IEEE 802.3u 标准,MII 包括 16 个数据和控制信号的引脚。RMII

规范将引脚数减少为 7 个。

RMII 接口是 MAC 和 PHY 之间的实例化对象。这有助于将 MAC 的 MII 转换为 RMII。

RMII 具有以下特性:

1,支持 10Mbit/s 和 100Mbit/s 的运行速率

2,参考时钟必须是 50 MHz

3,相同的参考时钟必须从外部提供给 MAC 和外部以太网 PHY

4,它提供了独立的 2 位宽(双位)的发送和接收数据路径

STM32F767 通过 RMII 接口与 PHY 层芯片的连接如图 66.1.1.3 所示:

7bfd44de4b20033587b94abd8c7dd34a.png

图 66.1.1.3 RMII 接口信号

从上图可以看出 RMII 相比 MII,引脚数量精简了不少。注意,图中的 REF_CLK 信号,是

RMII 和外部 PHY 共用的 50Mhz 参考时钟,必须由外部提供,比如有源晶振,或者 STM32F767

的 MCO 输出。不过有些 PHY 芯片可以自己产生 50Mhz 参考时钟,同时提供给 STM32F767,

这样也是可以的。

本章我们采用 RMII 接口和外部 PHY 芯片连接,实现网络通信功能,阿波罗 STM32F767 开

发板使用的是 LAN8720A 作为 PHY 芯片。接下来,我们简单介绍一下 LAN8720A 这个芯片。

LAN8720A 是低功耗的 10/100M 以太网 PHY 层芯片,I/O 引脚电压符合 IEEE802.3-2005 标

准,支持通过 RMII 接口与以太网 MAC 层通信,内置 10-BASE-T/100BASE-TX 全双工传输模

块,支持 10Mbps 和 100Mbps。

LAN8720A 可以通过自协商的方式与目的主机最佳的连接方式(速度和双工模式),支持 HP

Auto-MDIX 自动翻转功能,无需更换网线即可将连接更改为直连或交叉连接。LAN8720A 的主

要特点如下:

 高性能的 10/100M 以太网传输模块

 支持 RMII 接口以减少引脚数

 支持全双工和半双工模式

 两个状态 LED 输出

 可以使用 25M 晶振以降低成本

 支持自协商模式

 支持 HP Auto-MDIX 自动翻转功能

 支持 SMI 串行管理接口

 支持 MAC 接口

LAN8720A 功能框图如图 66.1.1.4 所示。

18c15d8e5276f85382e621f25eebf9ba.png

图 66.1.1.4 LAN8720A 功能框图

LAN8720A 的应脚数是比较少的,因此,很多引脚具有多个功能。这里,我们介绍几个重

要的设置。

1,PHY 芯片地址设置

LAN8720A 可以通过 PHYAD0 引脚来配置,该引脚与 RXER 引脚复用,芯片内部自带下

拉电阻,当硬复位结束后,LAN8720A 会读取该引脚电平,作为器件的 SMI 地址,接下拉电阻

时(浮空也可以,因为芯片内部自带了下拉电阻),设置 SMI 地址为 0,当外接上拉电阻后,

可以设置为 1。本章我们采用的是该引脚浮空,即设置 LAN8720 地址为 0。

2,nINT/REFCLKO 引脚功能配置

nINT/REFCLKO 引脚可以用作中断输出,或者参考时钟输出。通过 LED2(nINTSEL)引

脚设置,LED2 引脚的值在芯片复位后,被 LAN8720A 读取,当该引脚接上拉电阻(或浮空,

内置上拉电阻),那么正常工作后,nINT/REFCLKO 引脚将作为中断输出引脚(选中 REF_CLK

IN 模式)。当该引脚接下拉电阻时,正常工作后,nINT/REFCLKO 引脚将作为参考时钟输出(选中 REF_CLK OUT 模式)。

在 REF_CLK IN 模式,外部必须提供 50Mhz 参考时钟给 LAN8720A 的 XTAL1(CLKIN)

引脚。

在 REF_CLK OUT 模式,LAN8720A 可以外接 25Mhz 石英晶振,通过内部倍频到 50Mhz,

然后通过 REFCLKO 引脚,输出 50Mhz 参考时钟给 MAC 控制器。这种方式,可以降低 BOM

成本。

本章,我们设置 nINT/REFCLKO 引脚为参考时钟输出(REF_CLK OUT 模式),用于给

STM32F767 的 RMII 提供 50Mhz 参考时钟。

3,1.2V 内部稳压器配置

LAN8720A 需要 1.2V 电压给 VDDCR 供电,不过芯片内部集成了 1.2V 稳压器,可以通过

LED1(REGOFF)来配置是否使用内部稳压器,当不使用内部稳压器的时候,必须外部提供 1.2V

电压给 VDDCR 引脚。这里我们使用内部稳压器,所以我们在 LED1 接下拉电阻(浮空也行,

内置了下拉电阻),以控制开启内部 1.2V 稳压器。

最后,我们来看下 LAN8720A 同我们阿波罗 STM32F767 开发板的连接关系,如图 66.1.1.5

所示:

41e3c75603929659398d1b264e448c15.png

图 66.1.1.5 LAN8720A 与 STM32F767IGT6 连接原理图

从上图可以看出,LAN8720A 总共通过 10 跟线同 STM32F767 连接,注意:ETH_MDIO

和 USART2_TX 共用、RMII_TX_EN 和 USART3_RX 共用,所以他们不能同时使用,使用时需

要注意这个问题。另外 LAN8720A 的 ETH_RESET 脚是连接在 PCF8574 的 P7 上面的(经过

Q1 取反),所以,使用网络功能的时候,必须配置 PCF8574 对 ETH_RESET 进行控制,才可以

正常运行。

66.1.2 TCP/IP LWIP 简介

1,TCP/IP 简介

TCP/IP 中文名为传输控制协议/因特网互联协议,又名网络通讯协议,是 Internet 最基本的

协议、Internet 国际互联网络的基础,由网络层的 IP 协议和传输层的 TCP 协议组成。TCP/IP 定

义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了 4 层的层级

结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP 负责发现传

输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而

IP 是给因特网的每一台联网设备规定一个地址。

TCP/IP 协议不是 TCP 和 IP 这两个协议的合称,而是指因特网整个 TCP/IP 协议族。从协议

分层模型方面来讲,TCP/IP 由四个层次组成:网络接口层、网络层、传输层、应用层。OSI 是

传统的开放式系统互连参考模型,该模型将 TCP/IP 分为七层: 物理层、数据链路层(网络接口

层)、网络层(网络层)、传输层(传输层)、会话层、表示层和应用层(应用层)。TCP/IP 模型

与 OSI 模型对比如表 66.1.2.1 所示。

d48818114e05c60e66be7a4d9a8da62c.png

表 66.1.2.1 TCP/IP 模型与 OSI 模型对比

具体一点理解,本例程中的:PHY 层芯片 LAN8720A 相当于物理层,STM32F767 自带的

MAC 层相当于数据链路层,而 LWIP 提供的就是网络层、传输层的功能,应用层是需要用户自

己根据自己想要的功能去实现的。

2,LWIP 简介

LWIP 是瑞典计算机科学院(SICS)的Adam Dunkels 等开发的一个小型开源的TCP/IP 协议栈,

是 TCP/IP 的一种实现方式。LWIP 是轻量级 IP 协议,有无操作系统的支持都可以运行,LWIP

实现的重点是在保持 TCP 协议主要功能的基础上减少对 RAM 的占用,它只需十几 KB 的 RAM

和 40K 左右的 ROM 就可以运行,这使 LWIP 协议栈适合在低端的嵌入式系统中使用。 目前

LWIP 的最新版本是 1.4.1。本教程采用的就是 1.4.1 版本的 LWIP。

关于 LWIP 的详细信息大家可以去 http://savannah.nongnu.org/projects/lwip 这个网站去查阅,

LWIP 的主要特性如下:

 ARP 协议,以太网地址解析协议;

 IP 协议,包括 IPv4 和 IPv6,支持 IP 分片与重装,支持多网络接口下数据转发;

 ICMP 协议,用于网络调试与维护;

 IGMP 协议,用于网络组管理,可以实现多播数据的接收;

 UDP 协议,用户数据报协议;

 TCP 协议,支持 TCP 拥塞控制,RTT 估计,快速恢复与重传等;

 提供三种用户编程接口方式:raw/callback API、sequential API、BSD-style socket API;

 DNS,域名解析;

 SNMP,简单网络管理协议;

 DHCP,动态主机配置协议;

 AUTOIP,IP 地址自动配置;

 PPP,点对点协议,支持 PPPoE

我们从 LWIP 官网上下载 LWIP 1.4.1 版本,打开后如图 66.1.2.1 所示。

eb2c5630375e303355c11c637f646a9d.png

图 66.1.2.1 LWIP 1.4.1 源码内容

打开从官网上下载下来的 LWIP1.4.1 其中包括 doc,src 和 test 三个文件夹和 5 个其他文件。

doc 文件夹下包含了几个与协议栈使用相关的文本文档,doc 文件夹里面有两个比较重要的文

档:rawapi.txt 和 sys_arch.txt。

rawapi.txt 告诉读者怎么使用 raw/callback API 进行编程,sys_arch.txt 包含了移植说明,在

移植的时候会用到。src 文件夹是我们的重点,里面包含了 LWIP 的源码。test 是 LWIP 提供的

一些测试程序,方便大家使用 LWIP。打开 src 源码文件夹,如图 66.1.2.2 所示:

8c223b66ec7a9463fa6a1ac870cfd2b2.png

图 66.1.2.2 LWIP src 文件夹内容

src 文件夹由 4 个文件夹组成:api、core、include、netif 四个文件夹。api 文件夹里面是 LWIP

的 sequential API(Netconn)和 socket API 两种接口函数的源码,要使用这两种 API 需要操作系统

支持。core 文件夹是 LWIP 内核源码,实现了各种协议支持,include 文件夹里面是 LWIP 使用

到的头文件,netif 文件夹里面是与网络底层接口有关的文件。

关于 LWIP 的移植,请参考:《STM32F767 LWIP 开发手册.pdf》(文档路径:光盘 A 盘

根目录)第一章,该文档详细介绍了 LWIP 在 STM32F767 上面的移植。这里我们就不详细介

绍了。

66.2 硬件设计

本节实验功能简介:开机后,程序初始化 LWIP,包括:初始化 LAN8720A、申请内存、

开启 DHCP 服务、添加并打开网卡,然后等待 DHCP 获取 IP 成功,当 DHCP 获取成功后,将

在 LCD 屏幕上显示 DHCP 得到的 IP 地址,如果 DHCP 获取失败,那么将使用静态 IP(固定

为:192.168.1.30),然后开启 Web Server 服务,并进入主循环,等待按键输入选择需要测

试的功能:

KEY0 按键,用于选择 TCP Server 测试功能。

KEY1 按键,用于选择 TCP Client 测试功能

KEY2 按键,用于选择 UDP 测试功能

TCP Server 测试的时候,直接使用 DHCP 获取到的 IP(DHCP 失败,则使用静态 IP)作

为服务器地址,端口号固定为:8088。在电脑端,可以使用网络调试助手(TCP Client 模式)

连接开发板,连接成功后,屏幕显示连接上的 Client 的 IP 地址,此时便可以互相发送数据了。

按 KEY0 发送数据给电脑,电脑端发送过来的数据将会显示在 LCD 屏幕上。按 KEY_UP 可以

退出 TCP Server 测试。

TCP Client 测试的时候,先通过 KEY0/KEY2 来设置远端 IP 地址(Server 的 IP),端口

号固定为:8087。设置好之后,通过 KEY_UP 确认,随后,开发板会不断尝试连接到所设置

的远端 IP 地址(端口:8087),此时我们需要在电脑端使用网络调试助手(TCP Server 模式),设置端口为:8087,开启 TCP Server 服务,等待开发板连接。当连接成功后,测试方法同 TCP

Server 测试的方法一样。

UDP 测试的时候,同 TCP Client 测试几乎一模一样,先通过 KEY0/KEY2 设置远端 IP 地

址(电脑端的 IP),端口号固定为:8089,然后按 KEY_UP 确认。电脑端使用网络调试助手

(UDP 模式),设置端口为:8089,开启 UDP 服务。不过对于 UDP 通信,我们得先按开发

板 KEY0,发送一次数据给电脑,随后才可以电脑发送数据给开发板,实现数据互发。按 KEY_UP

可以退出 UDP 测试。

Web Server 的测试相对简单,只需要在浏览器端输入开发板的 IP 地址(DHCP 获取到的

IP 地址或者 DHCP 失败时使用的静态 IP 地址),即可登录一个 Web 界面,在 Web 界面,可

以实现对 DS1(LED1)的控制、蜂鸣器的控制、查看 ADC1 通道 5 的值、内部温度传感器温度

值以及查看 RTC 时间和日期等。

DS0 用于提示程序正在运行。

本例程所要用到的硬件资源如下:

1) 指示灯 DS0 、DS1

2) 四个按键(KEY0/KEY1/KEY2/KEY_UP)

3) 串口

4) LCD 模块

5) ETH(STM32F767 自带以太网功能)

6) LAN8720A

7) PCF8574

这几个部分我们都已经详细介绍过了。本实验测试,需自备网线一根,路由器一个。

66.3 软件设计

本章,我们综合了 ALIENTEK《STM32F767 LWIP 开发手册.pdf》这个文档里面的 4 个 LWIP

基础例程:UDP 实验、TCP 客户端(TCP Client)实验、TCP 服务器(TCP Server)实验和 Web

Server 实验。这些实验测试代码在工程 LWIPlwip_app 文件夹下,如图 66.3.1 所示:

e9c4b775fb2460cc0b8bd9d04186d894.png

图 66.3.1 LWIP 文件夹内容

这里面总共 4 个文件夹:lwip_comm 文件夹,存放了 ALIENTEK 提供的 LWIP 扩展支

持代码,方便使用和配置 LWIP,其他四个文件夹,则分别存放了 TCP Client、TCP Server、UDP

和 Web Server 测试 demo 程序。这里我们就不详细介绍这些内容了,详细的介绍,请参考:

ALIENTEK《STM32F767 LWIP 开发手册.pdf》这个文档。本例程工程结构如图 66.3.2 所示:

79e642f84ae265ce3e198515223b136f.png

图 66.3.2 例程工程结构体

本章例程所实现的功能,全部由 LWIP_APP 组下的几个.c 文件实现,这些文件的具体介绍

在:ALIENTEK 《STM32F767 LWIP 开发手册.pdf》里面,请大家参考该文档学习。

其他部分代码我们就不详细介绍了,最后,我们来看看 main.c 里面的代码,如下:

//加载 UI//mode://bit0:0,不加载;1,加载前半部分 UI//bit1:0,不加载;1,加载后半部分 UIvoid lwip_test_ui(u8 mode){u8 speed;u8 buf[30];POINT_COLOR=RED;if(mode&1<<0){LCD_Fill(30,30,lcddev.width,110,WHITE); //清除显示LCD_ShowString(30,30,200,16,16,"Apollo STM32F4/F7");LCD_ShowString(30,50,200,16,16,"Ethernet lwIP Test");LCD_ShowString(30,70,200,16,16,"ATOM@ALIENTEK");LCD_ShowString(30,90,200,16,16,"2016/7/19"); }if(mode&1<<1){LCD_Fill(30,110,lcddev.width,lcddev.height,WHITE);//清除显示LCD_ShowString(30,110,200,16,16,"lwIP Init Successed");if(lwipdev.dhcpstatus==2)sprintf((char*)buf,"DHCP IP:%d.%d.%d.%d",lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]);//打印动态 IP 地址else sprintf((char*)buf,"Static IP:%d.%d.%d.%d",lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]);//打印静态 IP 地址LCD_ShowString(30,130,210,16,16,buf); speed=LAN8720_Get_Speed();//得到网速if(speed&1<<1)LCD_ShowString(30,150,200,16,16,"Ethernet Speed:100M");else LCD_ShowString(30,150,200,16,16,"Ethernet Speed:10M");LCD_ShowString(30,170,200,16,16,"KEY0:TCP Server Test");LCD_ShowString(30,190,200,16,16,"KEY1:TCP Client Test");LCD_ShowString(30,210,200,16,16,"KEY2:UDP Test");} }int main(void){ u8 t;u8 key; Cache_Enable(); //打开 L1-Cache MPU_Memory_Protection(); //保护相关存储区域 HAL_Init(); //初始化 HAL 库 Stm32_Clock_Init(432,25,2,9); //设置时钟,216Mhz  delay_init(216); //延时初始化uart_init(115200); //串口初始化usmart_dev.init(108); //初始化 USMART LED_Init(); //初始化 LED KEY_Init(); //初始化按键 SDRAM_Init(); //初始化 SDRAM LCD_Init(); //初始化 LCD PCF8574_Init(); //初始化 PCF8574 MY_ADC_Init(); //初始化 ADC RTC_Init(); //初始化 RTC  TIM3_Init(1000-1,1080-1); //定时器 3 初始化,定时器时钟为 108M,分频系数为 10800-1, //所以定时器 3 的频率为 108M/1080=100K,自动重装载为 1000-1,//那么定时器周期就是 10ms my_mem_init(SRAMIN); //初始化内部内存池my_mem_init(SRAMEX); //初始化外部内存池my_mem_init(SRAMDTCM); //初始化 DTCM 内存池 POINT_COLOR=RED;LED0(1);lwip_test_ui(1); //加载前半部分 UI LCD_ShowString(30,110,200,16,16,"lwIP Initing...");while(lwip_comm_init()) //lwip 初始化{LCD_ShowString(30,110,200,20,16,"LWIP Init Falied! ");delay_ms(500);LCD_ShowString(30,110,200,16,16,"Retrying... "); delay_ms(500);}LCD_ShowString(30,110,200,20,16,"LWIP Init Success!");LCD_ShowString(30,130,200,16,16,"DHCP IP configing..."); //等待 DHCP 获取#if LWIP_DHCP //使用 DHCPwhile((lwipdev.dhcpstatus!=2)&&(lwipdev.dhcpstatus!=0XFF))//等待 DHCP 获取成功/超时溢出{ lwip_periodic_handle(); //LWIP 内核需要定时处理的函数}#endif lwip_test_ui(2); //加载后半部分 UI httpd_init(); //HTTP 初始化(默认开启 websever)while(1){key=KEY_Scan(0);switch(key){case KEY0_PRES://TCP Server 模式tcp_server_test();lwip_test_ui(3);//重新加载 UI break;case KEY1_PRES://TCP Client 模式tcp_client_test();lwip_test_ui(3);//重新加载 UIbreak; case KEY2_PRES://UDP 模式udp_demo_test();lwip_test_ui(3);//重新加载 UIbreak; }  lwip_periodic_handle();delay_ms(2);t++;if(t==100)LCD_ShowString(30,230,200,16,16,"Please choose a mode!");if(t==200){ t=0;LCD_Fill(30,230,230,230+16,WHITE);//清除显示LED0_Toggle;} } }

这里,我们开启了定时器 3 来给 LWIP 提供时钟,然后通过 lwip_comm_init 函数,初始化 LWIP,

该函数处理包括:初始化 STM32F767 的以太网外设、初始化 LAN8720A、分配内存、使能 DHCP、

添加并打开网卡等操作。

这里特别注意:因为我们配置 STM32F767 的网卡使用自动协商功能(双工模式和连接速

度),如果协商过程中遇到问题,则会进行多次重试,需要等待很久,而且如果协商失败,那么

直接返回错误,导致 LWIP 初始化失败,因此一定要插上网线,然后 LWIP 才能初始化成功,

否则肯定会初始化失败,而这个失败,不是硬件问题,是因为你没插网线的缘故!!!

在 LWIP 初始化成功后,进入 DHCP 获取 IP 状态,当 DHCP 获取成功后,显示开发板获

取到的 IP 地址,然后开启 HTTP 服务。此时可以在浏览器输入开发板 IP 地址,登录 Web 控制

界面,进行 Web Server 测试。

在主循环里面,我们可以通过按键选择:TCP Server 测试、TCP Client 测试和 UDP 测试等

测试项目,主循环还调用了 lwip_periodic_handle 函数,周期性处理 LWIP 事务。

软件设计部分就为大家介绍到这里。

66.4 下载验证

在开始测试之前,我们先用网线(需自备)将开发板和电脑连接起来。

对于有路由器的用户,直接用网线连接路由器,同时电脑也连接路由器,即可完成电脑与

开发板的连接设置。

对于没有路由器的用户,则直接用网线连接电脑的网口,然后设置电脑的本地连接属性,

如图 66.4.1 所示:

26898f3133de4d811c9d5678e3dc37d4.png

图 66.4.1 开发板与电脑直连时电脑本地连接属性设置

这里,我们设置 IPV4 的属性,设置 IP 地址为:192.168.1.100(100 是可以随意设置的,但

是不能是 30 和 1);子网掩码:255.255.255.0;网关:192.168.1.1;DNS 部分可以不用设置。

设置完后,点击确定,即可完成电脑端设置,这样开发板和电脑就可以通过互相通信了。

然后,在代码编译成功之后,我们通过下载代码到阿波罗 STM32 开发板上(这里我们以

路由器连接方式介绍,下同,且假设 DHCP 获取 IP 成功),LCD 显示如图 66.4.2 所示界面:

b6ab51bf327f6c217806ccad6ae54c6f.png

图 66.4.2 DHCP 获取 IP 成功

此时屏幕提示选择测试模式,可以选择 TCP Server、TCP Client 和 UDP 三项测试。不过,

我们先来看看网络连接是否正常。从 66.4.2 可以看到,我们开发板通过 DHCP 获取到的 IP 地

址为:192.168.1.137,因此,我们在电脑上先来 ping 一下这个 IP,看看能否 ping 通,以检查连

接是否正常(Start运行CMD),如图 66.4.3 所示:

952dd23c1c6a4fc181b5dc04674e190f.png

图 66.4.3 ping 开发板 IP 地址

可以看到开发板所显示的 IP 地址,是可以 ping 通的,说明我们的开发板和电脑连接正常,

可以开始后续测试了。

66.4.1 Web Server 测试

这个测试不需要任何操作来开启,开发板在获取 IP 成功(也可以使用静态 IP)后,即开

启了 Web Server 功能。我们在浏览器输入:192.168.1.137(开发板显示的 IP 地址),即可进入

一个 Web 界面,如图 66.4.1.1 所示:

ea58e49d69609f0932be2f9542630d5a.png

图 66.4.1.1 Web Server 测试网页

该界面总共有 5 个子页面:主页、LED/BEEP 控制、ADC/内部温度传感器、RTC 实时时钟

和联系我们等。登录 Web 时默认打开的是主页面,介绍了我们阿波罗 STM32F767 开发板的一

些资源和特点和 LWIP 的一些简介。

点击:LED/BEEP 控制,进入该子页面,即可对开发板板载的 DS0(LED1)和蜂鸣器进行

控制,如图 66.4.1.2 所示:

1b25b26a14ccbfdfa3b848230b4af246.png

图 66.4.1.2 LED/BEEP 控制页面

此时,选择 ON,然后点击 SEND 按钮,即可点亮 LED1 或者打开蜂鸣器。同样,发送 OFF

即可关闭 LED1 或蜂鸣器。

点击:ADC/内部温度传感器,进入该子页面,会显示 ADC1 通道 5 的值和 STM32 内部温

度传感器所测得的温度,如图 66.4.1.3 所示:

b219ef20a9ba4420173a91af7cdf6925.png

图 66.4.1.3 ADC/内部温度传感器测试页面

ADC1_CH5 是我们开发板多功能接口 ADC 的输入通道,默认连接在 TPAD 上,TPAD 带

有上拉电阻,所以这里显示 3.3V 左右,大家可以将 ADC 接其他地方来测量电压。同时,该界

面还显示了内部温度传感器采集到的温度值。该界面每个一秒钟刷新一次。

点击:RTC 实时时钟,进入该子页面,会显示 STM32 内部 RTC 的时间和日期,如图 66.4.1.4

所示:

32a7b9f80b6b6a57e3208a71bf298ba5.png

图 66.4.1.4 RTC 实时时钟测试页面

此界面显示了阿波罗 STM32F767 自带的 RTC 实时时钟的当前时间和日期等参数,每隔 1

秒钟刷新一次。

最后,点击联系我们,即可进入到 ALIENTEK 官方店铺,这里就不再介绍了。

66.4.2 TCP Server 测试

在提示界面,按 KEY0 即可进入 TCP Server 测试,此时,开发板作为 TCP Server。此时,

LCD 屏幕上显示 Server IP 地址(就是开发板的 IP 地址),Server 端口固定为:8088。如图 66.4.2.1

所示:

4611168f8e74bbd924e5834714224411.png

图 66.4.2.1 TCP Sever 测试界面

图中显示了 Server IP 地址是 192.168.1.137,Server 端口号是:8088。上位机配合我们测试,

需要用到一个网络调试助手的软件,该软件在光盘 6,软件资料软件网络调试助手网

络调试助手 V3.8.exe。

我们在电脑端打开网络调试助手,设置协议类型为:TCP Client,服务器 IP 地址为:

192.168.1.137,服务器端口号为:8088,然后点击连接,即可连上开发板的 TCP Sever,此时,

开发板的液晶显示:Client IP:192.168.1.115(电脑的 IP 地址),如图 66.4.2.1 所示,而网络调试

助手端则显示连接成功,如图 6.4.2.2 所示:

2a52ce7f9871ebf855a72e7ffcfa56cf.png

图 66.4.2.2 电脑端网络调试助手 TCP Client 测试界面

按开发板的 KEY0 按键,即可发送数据给电脑。同样,电脑端输入数据,也可以通过网络

调试助手发送给开发板。如图 63.4.2.1 和图 66.4.2.2 所示。按 KEY_UP 按键,可以退出 TCP Sever

测试,返回选择界面。

66.4.3 TCP Client 测试

在提示界面,按 KEY1 即可进入 TCP Client 测试,此时,先进入一个远端 IP 设置界面,也

就是 Client 要去连接的 Server 端的 IP 地址。通过 KEY0/KEY2 可以设置 IP 地址,通过 66.4.3.2

节的测试,我们知道电脑的 IP 是 192.168.1.115,所以我们这里设置 Client 要连接的远端 IP 为

192.168.1.115,如图 66.4.3.1 所示:

3e162f08538dab26bac0e6ab41c2854c.png

图 66.4.3.1 远端 IP 地址设置

设置好之后,按 KEY_UP,确认,进入 TCP Client 测试界面。开始的时候,屏幕显示

Disconnected。然后我们在电脑端打开网络调试助手,设置协议类型为:TCP Server,本地 IP

地址为:192.168.1.115(电脑 IP),本地端口号为:8087,然后点击连接,开启电脑端的 TCP Server

服务,如图 66.4.3.2 所示:

7507114074555dbb7d384567fbd8bfed.png

图 66.4.3.2 电脑端网络调试助手 TCP Server 测试界面

在电脑端开启 Server 后,稍等片刻,开发板的 LCD 即显示 Connected,如图 66.4.3.3 所示:

c9d9b389a7388a99832f2d336e2eca1e.png

图 66.4.3.3 TCP Client 测试界面

在连接成功后,电脑和开发板即可互发数据,同样开发板还是按 KEY0 发送数据给电脑,

测试结果如图 66.4.3.2 和图 66.4.3.3 所示。按 KEY_UP 按键,可以退出 TCP Client 测试,返回

选择界面。

66.4.4 UDP 测试

在提示界面,按 KEY2 即可进入 UDP 测试,UDP 测试同 TCP Client 测试一样,要先设置

远端 IP 地址,设置好之后,进入 UDP 测试界面,如图 66.4.4.1 所示:

ae0937b35c9320ffcb0c18eeff533377.png

图 66.4.4.1 UDP 测试界面

可以看到,UDP 测试时我们要连接的端口号为:8089,所以网络调试助手需要设置端口号

为:8089。另外,UDP 不是基于连接的传输协议,所以,这里直接就显示 Connected 了。在电

脑端打开网络调试助手,设置协议类型为:UDP,本地 IP 地址为:192.168.1.115(电脑 IP),

本地端口号为:8089,然后点击连接,开启电脑端的 UDP 服务,如图 66.4.4.2 所示:

d5344b784e950ccf7b3832c4ca239b1e.png

图 66.4.3.2 电脑端网络调试助手 UDP 测试界面

然后,我们先按开发板的 KEY0,发送一次数据给电脑端网络调试助手,这样电脑端网络

调试助手便会识别出开发板的 IP 地址,然后就可以互相发送数据了。按 KEY_UP 按键,可以

退出 UDP 测试,返回选择界面。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值