0 卖盘信息
BOM询价
您现在的位置: 首页 > 电子资讯 >技术信息 > 正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验

来源: toutiao
2021-12-13
类别:技术信息
eye 11
文章创建人 拍明

原标题:正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验

  第六十章 网络通信实验

  本章,我们将向大家介绍探索者 STM32F4 开发板的网口及其使用。本章,我们将使用

  ALIENTEK 探索者 STM32F4 开发板自带的网口和 LWIP 实现:TCP 服务器、TCP 客服端、UDP

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

  60.1 STM32F4 以太网以及 TCP/IP LWIP 简介

  60.2 硬件设计

  60.3 软件设计

  60.4 下载验证

  60.1 STM32F4 以太网以及 TCP/IP LWIP 简介

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

  这两个部分。

  60.1.1 STM32F4 以太网简介

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

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

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

  择所需模式和功能。

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

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

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

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

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

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

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

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

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

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

  ➢ 支持 DMA

  STM32F4 以太网功能框图如图 60.1.1.1 所示:

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


  图 60.1.1.1 STM32F4 以太网框图

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

  芯片可以通过 MII/RMII 接口与 STM32F4 内部 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 层进行数据传输。STM32F407 通过 MII

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

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


  图 60.1.1.2 MII 接口信号

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

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

  本章我们采用 RMII 接口和外部 PHY 芯片连接,实现网络通信功能,探索者 STM32F4 开发

  板使用的是 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 功能框图如图 60.1.1.4 所示。

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


  图 60.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 模式),用于给

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

  3,1.2V 内部稳压器配置

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

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

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

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

  最后,我们来看下 LAN8720A 同我们探索者 STM32F4 开发板的连接关系,如图 60.1.1.5

  所示:

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


  图 60.1.1.5 LAN8720A 与 STM32F407ZGT6 连接原理图

  从上图可以看出,LAN8720A 总共通过 10 跟线同 STM32F4 连接,注意:MDIO 同串口 2

  的 TX 信号有共用,所以串口 2 和以太网功能不能同时使用,使用时需要注意这个问题。

  60.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 模型对比如表 60.1.2.1 所示。

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


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

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

  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 版本,打开后如图 60.1.2.1 所示。

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


  图 60.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 源码文件夹,如图 60.1.2.2 所示:

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


  图 60.1.2.1 LWIP src 文件夹内容

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

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

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

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

  关于 LWIP 的移植,请参考:ALIENTEK STM32F4 LWIP 使用教程.pdf(文档路径:光盘

  →6,软件资料→LWIP 学习资料)第一章,该文档详细介绍了 LWIP 在 STM32F4 上面的移植。

  这里我们就不详细介绍了。

  60.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) TFTLCD 模块

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

  6) LAN8720A

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

  60.3 软件设计

  本章,我们综合了《STM32F4 LWIP 开发手册.pdf》这个文档里面的 4 个 LWIP 基础例程:

  UDP 实验、TCP 客户端(TCP Client)实验、TCP 服务器(TCP Server)实验和 Web Server 实

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

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


  图 60.3.1 LWIP 文件夹内容

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

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

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

  《STM32F4

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

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


  图 60.3.2 例程工程结构体

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

  在:ALIENTEK STM32F4 LWIP 使用教程.pdf 里面,请大家参考该文档学习。

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

  //加载 UI

  //mode:

  //bit0:0,不加载;1,加载前半部分 UI

  //bit1:0,不加载;1,加载后半部分 UI

  void 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,"Explorer STM32F4");

  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,"2014/8/15");

  }

  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;

  HAL_Init();

  //初始化 HAL 库

  Stm32_Clock_Init(336,8,2,7);

  //设置时钟,168Mhz

  delay_init(168);

  //初始化延时函数

  uart_init(115200);

  //初始化 USART

  usmart_dev.init(84);

  //初始化 USMART

  LED_Init();

  //初始化 LED

  BEEP_Init();

  //初始化蜂鸣器

  KEY_Init();

  //初始化 KEY

  LCD_Init(); //初始化 LCD

  SRAM_Init();

  //初始化外部 SRAM

  MY_ADC_Init();

  //初始化 ADC

  RTC_Init(); //初始化 RTC

  TIM3_Init(1000-1,840-1);

  //定时器 3 初始化,周期 10ms

  my_mem_init(SRAMIN);

  //初始化内部内存池

  my_mem_init(SRAMEX);

  //初始化外部内存池

  my_mem_init(SRAMCCM);

  //初始化 CCM 内存池

  POINT_COLOR=RED;

  //红色字体

  lwip_test_ui(1);

  //加载前半部分 UI

  //先初始化 lwIP(包括 LAN8720A 初始化),此时必须插上网线,否则初始化会失败!!

  LCD_ShowString(30,110,200,16,16,"lwIP Initing...");

  while(lwip_comm_init()!=0)

  {

  LCD_ShowString(30,110,200,16,16,"lwIP Init failed!");

  delay_ms(1200);

  LCD_Fill(30,110,230,110+16,WHITE);//清除显示

  LCD_ShowString(30,110,200,16,16,"Retrying...");

  }

  LCD_ShowString(30,110,200,16,16,"lwIP Init Successed");

  //等待 DHCP 获取

  LCD_ShowString(30,130,200,16,16,"DHCP IP configing...");

  while((lwipdev.dhcpstatus!=2)&&(lwipdev.dhcpstatus!=0XFF))//等待 DHCP 成功/超时

  {

  lwip_periodic_handle();

  }

  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);//重新加载 UI

  break;

  case KEY2_PRES://UDP 模式

  udp_demo_test();

  lwip_test_ui(3);//重新加载 UI

  break;

  }

  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=!LED0;

  }

  }

  }

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

  化 LWIP,该函数处理包括:初始化 STM32F4 的以太网外设、初始化 LAN8720A、分配内存、

  使能 DHCP、添加并打开网卡等操作。

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

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

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

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

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

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

  界面,进行 Web Server 测试。

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

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

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

  60.4 下载验证

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

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

  开发板的连接设置。

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

  如图 60.4.1 所示:

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


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

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

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

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

  然后,在代码编译成功之后,我们通过下载代码到探索者 STM32F4 开发板上(这里我们

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

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


  图 60.4.2 DHCP 获取 IP 成功

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

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

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

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

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


  图 60.4.3 ping 开发板 IP 地址

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

  可以开始后续测试了。

  60.4.1 Web Server 测试

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

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

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

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


  图 60.4.1.1 Web Server 测试网页

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

  和联系我们等。登录 Web 时默认打开的是主页面,介绍了我们探索者 STM32F4 开发板的一些

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

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

  控制,如图 60.4.1.2 所示:

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


  图 60.4.1.2 LED/BEEP 控制页面

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

  即可关闭 LED1 或蜂鸣器。

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

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

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


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

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

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

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

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

  所示:

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


  图 60.4.1.4 RTC 实时时钟测试页面

  此界面显示了探索者 STM32F4 自带的 RTC 实时时钟的当前时间和日期等参数,每隔 1 秒

  钟刷新一次。

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

  60.4.2 TCP Server 测试

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

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

  所示:

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


  图 60.4.2.1 TCP Sever 测试界面

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

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

  络调试助手 V3.8.exe。

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

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

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

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

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


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

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

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

  测试,返回选择界面。

  60.4.3 TCP Client 测试

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

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

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

  192.168.1.101,如图 60.4.3.1 所示:

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


  图 60.4.3.1 远端 IP 地址设置

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

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

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

  服务,如图 60.4.3.2 所示:

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


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

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

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


  图 60.4.3.3 TCP Client 测试界面

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

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

  选择界面。

  60.4.4 UDP 测试

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

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

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


  图 60.4.4.1 UDP 测试界面

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

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

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

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

  

正点原子STM32F407探索者开发板资料连载第六十章 网络通信实验


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

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

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

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


责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯