STM32F103的高速以太网接口设计

来源:本站
导读:目前正在解读《STM32F103的高速以太网接口设计》的相关信息,《STM32F103的高速以太网接口设计》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《STM32F103的高速以太网接口设计》的详细说明。
简介: 现代数据采集和监控系统的网络化,对信息传输速率和传输距离提出了更高的要求。采用STM32F103微控制器和W5300芯片搭建的网络系统,结构简单、易于实现。

引言

随着信息技术的快速发展,网络技术的应用越来越广泛。以太网接口是以太网中各节点的通信基础,处于TCP/IP协议栈的数据链路层,是信息传递和管理的重要环节[1]。对于单片机来说,由于内部资源有限,既要完成主控任务,又要实现TCP/IP协议栈,难度较大,经综合考虑采用意法半导体公司生产的STM32F103作为控制核心[2]。韩国WIZnet公司生产的W5300芯片内部集成了以太网协议,可以简化软件设计,减少调试时间,从而缩短开发周期;同时,能够简化系统布局,有利于系统升级。

1 芯片介绍

1.1 STM32F103芯片

STM32F103是基于ARM CortexM3核的32位处理器芯片。其最高工作频率为72 MHz;内置高速存储器(512 KB Flash、64 KB RAM);丰富的增强I/O端口和外设资源,包括5路USART、2个12通道DMA控制器、3路SPI以及12位的ADC、DAC、FSMC、SDIO、USB、CAN、I2C等;具有标准和先进的通信接口;提供可编程电压检测器(PVD),保证整个系统的稳定工作,提高抗干扰能力;温度传感器直接与内部ADC相连,能够对器件周围环境的温度进行监测;工作温度为-40~85 ℃[3],能够满足设计的要求。

1.2 W5300芯片

W5300是一款高性能以太网芯片,采用0.18 μm CMOS工艺,内部集成10/100M以太网控制器,MAC和TCP/IP协议栈。它支持固件TCP/IP协议TCP、UDP、ICMP、IPv4、ARP、IGMP、PPPoE、Ethernet;8个独立端口同时工作;高速网络数据传输,速度可达到50 Mbps;支持混合网络TCP/IP协议栈(软件/硬件TCP/IP协议栈);支持存储器到存储器的DMA功能(只有16位数据总线宽度才支持,从模式);内嵌10BaseT/100BaseTX的以太网物理层;自动握手功能(全双工,半双工);自动MDI/MDIX(信号线极性交叉);LED网络指示;第三方物理(PHY)接口;支持8/16位数据总线;支持2种主机接口模式(直接访问模式和间接访问模式)等[45]。

2 系统硬件组成

系统硬件结构框图如图1所示。该系统包括以下几个模块:

① 电源模块,为系统工作提供稳定的电源;

② 晶振模块,为系统提供时钟;

③ 复位模块,复位MCU;

④ RS232接口模块,输出调试信息及部分网络信息的设置;

⑤ I2C存储模块,用于大量信息的存储;

⑥ JTAG接口模块,下载程序;

⑦ W5 300模块,实现以太网功能;

⑧ RJ45接口模块,以太网接口。

STM32F103的高速以太网接口设计

图1 系统硬件结构框图

STM32F103的高速以太网接口设计

图2 W5300与STM32F103的接口电路

STM32F103与W5300的接口电路如图2所示。W5300的数据线DATA0~DATA15与STM32F103的D0~D15相连;W5300的地址线ADDR0~ADDR15与STM32F103的A0~A15相连;STM32F103的片选信号/CS与W5300的FSMC_NE4相连,使W5300映射到主机的地址范围为0x6C000000~0x6C0003FF;STM32F103的读使能信号/RD与W5300的FSMC_NOE相连;STM32F103的写使能信号/WR与W5300的FSMC_NWE相连;因为STM32F103需要供电电压3.0 V以上才能够正常工作,所以要求复位时间较长,采用软件对其进行硬件复位,以保证正确复位。系统采用内部PHY模式,相应的TEST_MODE[3:0]引脚均拉低;采用16位数据总线传输,相应的BIT16EN引脚要接高电平;采用直接访问模式。

3 系统软件实现

3.1 开发环境IAR和仿真器JLink简介

IAR EWARM(IAR Embedded Workbench for ARM)是一个针对ARM处理器的集成开发环境,它包含项目管理器、编辑器、C/C++编译器和ARM汇编器、连接器XLINK和支持 RTOS的调试工具CSPY。在EWARM环境下,可以使用 C/C++和汇编语言方便地开发嵌入式应用程序。较其他的ARM开发环境而言,IAR EWARM具有入门容易、使用方便和代码紧凑等特点[67]。

JLink是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。配合IAR EWARM、ADS、Keil、WinARM、RealView等集成开发环境,即可支持所有ARM7/ARM9内核芯片的仿真,仿真通过RDI接口和各集成开发环境进行无缝连接。它具有操作方便、连接方便、简单易学的特点,是ARM处理器最实用的开发工具。

3.2 主程序

W5300的Socket就可以配置为TCP、UDP、IPRAW、MACRAW模式进行数据的发送或接收。基于一般工程的应用模式,下面只讨论TCP和UDP的通信流程。由于W5300固化了TCP/IP协议栈,只需创建Socket接口即可实现网络通信,大大简化了软件设计流程。其主程序如下:

int main(void){

Stm32_init();/*STM32初始化*/

W5300_init();/*初始化W5300*/

while(1){

loopback_tcp_sever(0,8000,data_buf,0); /*TCP服务器回调函数*/

loopback_tcp_sever(1,8001,data_buf,0);

loopback_tcp_sever(2,8002,data_buf,0);

loopback_tcp_sever(3,8003,data_buf,0);

loopback_tcp_sever(4,8004,data_buf,0);

loopback_tcp_sever(5,8005,data_buf,0);

loopback_tcp_client(6,serverip, 8006,data_buf,0); /*TCP客户端回调函数*/

loopback_udp(7,1025,source_data,0,0); /*UDP回调函数*/

}

}

STM32F103初始化程序如下:

void Stm32_init(void){

RCC_Configuration();/*配置系统时钟*/

IWDG_Configuration();/*配置看门狗定时器*/

GPIO_Configuration();/*配置I/O引脚*/

USART_Configuration();/*配置串口参数*/

I2C_Configuration();/*配置I2C参数*/

FSMC_SRAM4_Configuration (); /*配置FSMC*/

}

W5300初始化程序如下:

void W5300_init(void){

Reset_h5300();/*硬件复位W5300*/

Reset_r5300();/*软件复位W5300*/

Set_SHAR(mac);/*设置本机硬件地址*/

Set_GAR(gw);/*设置本机网关地址*/

Set_SUBR(sn);/*设置本机子网掩码*/

Set_SIPR(ip);/*设置本机IP地址*/

Buf_init(tx_mem_buf,rx_mem_buf); /*内部TX/RX存储器初始化*/

}

以UDP为例介绍Socket接口的设计。UDP是一种不可靠的、无连接的数据传输方式。它不需要建立连接就可以进行数据传输[2]。UDP通信流程如图3所示[8]。

STM32F103的高速以太网接口设计

图3 UDP通信流程

UDP回调函数程序如下:

void loopback_udp(SOCKET s, u16 port, u8* buf, u16 mode, u8 cs_flag){

u32 len=sizeof(source_data)-1; /*缓冲区的数据长度*/

u8 destip[4]={192,168,0,10};/*目的IP地址*/

u16 destport=1025;/*目的端口*/

switch(getSn_SSR(s)) { /*获取Socket状态*/

case SOCK_UDP:/*Socket处于UDP模式*/

if(cs_flag) { /*相当于UDP客户端*/

sendto(s,buf,len,destip,destport);

}

else {/*相当于UDP服务器*/

if((len=getSn_RX_RSR(s)) > 0) { /*判断是否接收到数据*/

len=recvfrom(s,buf,len,destip,&destport); /*接收数据,返回收到的数据长度*/

sendto(s,buf,len,destip,destport); /*把收到的数据发送到对端*/

}

}

break;

case SOCK_CLOSED:/*Socket端口释放*/

close(s); /*关闭该Socke端口*/

socket(s,Sn_MR_UDP,port,mode); /*创建该Socke端口*/

break;

default:

break;

}

}

4 实验与结论

UDP服务器的测试方法是:打开SocketTool,创建UDP客户端模式,设置好对方IP、对方端口、本地端口后,在数据发送窗口中输入字符串“Please send data”,点击发送数据后,在数据接收与提示窗口中将显示接收到的字符串“Hello Harbin!”。

UDP客户端的测试方法是:打开SocketTool,创建UDP服务器模式,设置好本地端口后,在数据接收与提示窗口中将显示以一定的时间间隔接收到的字符串“Hello Harbin!”。

测试结果表明,该系统运行稳定,实现了以太网的接口功能;没有操作系统的支持实现单芯片与Internet的连接,可以为嵌入式网络的开发提供硬件平台[9]。

提醒:《STM32F103的高速以太网接口设计》最后刷新时间 2024-03-14 00:57:18,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《STM32F103的高速以太网接口设计》该内容的真实性请自行鉴别。