第六十章 网络通信实验
[mw_shl_code=c,true]1.硬件平台:正点原子探索者STM32F407开发板
2.软件平台:MDK5.1
3.固件库版本:V1.4.0[/mw_shl_code]
本章,我们将向大家介绍探索者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所示:
图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所示。
图60.1.1.2 MII接口信号
l MII_TX_CLK:连续时钟信号。该信号提供进行TX 数据传输时的参考时序。标称频率为: 速率为10 Mbit/s 时为2.5 MHz;速率为100 Mbit/s 时为25 MHz。
l MII_RX_CLK:连续时钟信号。该信号提供进行RX 数据传输时的参考时序。标称频率为:速率为10 Mbit/s 时为2.5 MHz;速率为100 Mbit/s 时为25 MHz。
l MII_TX_EN:发送使能信号。
l MII_TXD[3:0]:数据发送信号。该信号是4 个一组的数据信号,
l MII_CRS:载波侦听信号。
l MII_COL:冲突检测信号。
l MII_RXD[3:0]:数据接收信号。该信号是4 个一组的数据信号
l MII_RX_DV:接收数据有效信号。
l 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位宽(双位)的发送和接收数据路径
STM32F407通过RMII接口与PHY层芯片的连接如图60.1.1.3所示:
图60.1.1.3 RMII接口信号
从上图可以看出RMII相比MII,引脚数量精简了不少。注意,图中的REF_CLK信号,是RMII和外部PHY共用的50Mhz参考时钟,必须由外部提供,比如有源晶振,或者STM32F4的MCO输出。不过有些PHY芯片可以自己产生50Mhz参考时钟,同时提供给STM32F4,这样也是可以的。
本章我们采用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的主要特点如下:
l 高性能的10/100M以太网传输模块
l 支持RMII接口以减少引脚数
l 支持全双工和半双工模式
l 两个状态LED输出
l 可以使用25M晶振以降低成本
l 支持自协商模式
l 支持HP Auto-MDIX自动翻转功能
l 支持SMI串行管理接口
l 支持MAC接口
LAN8720A功能框图如图60.1.1.4所示。
图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所示:
图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所示。
编号
|
OSI模型
|
TCP/IP模型
|
1
|
应用层
|
应用层
|
2
|
表示层
|
3
|
会话层
|
4
|
传输层
|
传输层
|
5
|
网络层
|
互联层
|
6
|
数据链路层
|
链路层
|
7
|
物理层
|
表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的主要特性如下:
l ARP协议,以太网地址解析协议;
l IP协议,包括IPv4和IPv6,支持IP分片与重装,支持多网络接口下数据转发;
l ICMP协议,用于网络调试与维护;
l IGMP协议,用于网络组管理,可以实现多播数据的接收;
l UDP协议,用户数据报协议;
l TCP协议,支持TCP拥塞控制,RTT估计,快速恢复与重传等;
l 提供三种用户编程接口方式:raw/callback API、sequential API、BSD-style socket API;
l DNS,域名解析;
l SNMP,简单网络管理协议;
l DHCP,动态主机配置协议;
l AUTOIP,IP地址自动配置;
l PPP,点对点协议,支持PPPoE
我们从LWIP官网上下载LWIP
1.4.1版本,打开后如图60.1.2.1所示。
图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所示:
图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所示:
图60.3.1 LWIP文件夹内容
这里面总共4个文件夹:lwip_comm文件夹,存放了ALIENTEK提供的LWIP扩展支持代码,方便使用和配置LWIP,其他四个文件夹,则分别存放了TCP Client、TCP Server、UDP和Web Server测试demo程序。这里我们就不详细介绍这些内容了,详细的介绍,请参考:《STM32F4 LWIP开发手册.pdf》这个文档。本例程工程结构如图60.3.2所示:
图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;
delay_init(); //延时初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
uart_init(115200); //串口波特率设置
usmart_dev.init(84); //初始化USMART
LED_Init(); //LED初始化
KEY_Init(); //按键初始化
LCD_Init();
//LCD初始化
BEEP_Init(); //蜂鸣器初始化
RTC_Init(); //RTC初始化
Adc_Init(); //ADC初始化
TIM3_Int_Init(100-1,8400-1);//10khz的频率,计数100为10ms
my_mem_init(SRAMIN); //初始化内部内存池
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所示:
图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所示界面:
图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所示:
图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所示:
图60.4.1.1 Web Server测试网页
该界面总共有5个子页面:主页、LED/BEEP控制、ADC/内部温度传感器、RTC实时时钟和联系我们等。登录Web时默认打开的是主页面,介绍了我们探索者STM32F4开发板的一些资源和特点和LWIP的一些简介。
点击:LED/BEEP控制,进入该子页面,即可对开发板板载的DS0(LED1)和蜂鸣器进行控制,如图60.4.1.2所示:
图60.4.1.2 LED/BEEP控制页面
此时,选择ON,然后点击SEND按钮,即可点亮LED1或者打开蜂鸣器。同样,发送OFF即可关闭LED1或蜂鸣器。
点击:ADC/内部温度传感器,进入该子页面,会显示ADC1通道5的值和STM32内部温度传感器所测得的温度,如图60.4.1.3所示:
图60.4.1.3 ADC/内部温度传感器测试页面
ADC1_CH5是我们开发板多功能接口ADC的输入通道,默认连接在TPAD上,TPAD带有上拉电阻,所以这里显示3V多,大家可以将ADC接其他地方来测量电压。同时,该界面还显示了内部温度传感器采集到的温度值。该界面每个一秒钟刷新一次。
点击:RTC实时时钟,进入该子页面,会显示STM32内部RTC的时间和日期,如图60.4.1.4所示:
图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所示:
图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所示:
图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所示:
图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所示:
图60.4.3.2 电脑端网络调试助手TCP Server测试界面
在电脑端开启Server后,稍等片刻,开发板的LCD即显示Connected,如图60.4.3.3所示:
图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所示:
图60.4.4.1 UDP测试界面
可以看到,UDP测试时我们要连接的端口号为:8089,所以网络调试助手需要设置端口号为:8089。另外,UDP不是基于连接的传输协议,所以,这里直接就显示Connected了。在电脑端打开网络调试助手,设置协议类型为:UDP,本地IP地址为:192.168.1.101(电脑IP),本地端口号为:8089,然后点击连接,开启电脑端的UDP服务,如图60.4.4.2所示:
图60.4.4.2 电脑端网络调试助手UDP测试界面
然后,我们先按开发板的KEY0,发送一次数据给电脑端网络调试助手,这样电脑端网络调试助手便会识别出开发板的IP地址,然后就可以互相发送数据了。按KEY_UP按键,可以退出UDP测试,返回选择界面。
正点原子探索者STM32F407开发板购买地址:http://item.taobao.com/item.htm?id=41855882779
|