支持国产!以太网PHY芯片SR8201的GD32F450驱动

以太网PHY芯片SR8201的GD32F450驱动

一 :标题采用RMII模式,接线方式为:
SR8201F 引脚号 GD32F450
RXD0 9 PC4
RXD1 10 PC5
TXC 15 PA1
TXD0 16 PB12
TXD1 17 PB13
TXEN 20 PB11
MDC 22 PC1
MDIO 23 PA2
CRS 26 PA7
二 :TXC时钟信号

TXC引脚须要接入一个50M晶振提供时钟信号:
在这里插入图片描述
若是不想用这个晶振能够经过单片机输出时钟信号。须要如下改动
单片机的晶振换成25M。
使用单片机PA8输出时钟信号,接到PA1和TXC上。
在给出历程的"gd32f4xx_enet_eval.c"137行已经屏蔽。




tcp

gpio_af_set(GPIOA, GPIO_AF_0, GPIO_PIN_8);
    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_8);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_8);
    /* enable SYSCFG clock */
    rcu_periph_clock_enable(RCU_SYSCFG);
三 :IP和端口号设置

IP在“main.h”中定义:函数

#define IP_ADDR0 192
#define IP_ADDR1 168
#define IP_ADDR2 1
#define IP_ADDR3 30

#define IP_S_ADDR0 192
#define IP_S_ADDR1 168
#define IP_S_ADDR2 1
#define IP_S_ADDR3 35

/* net mask */
#define NETMASK_ADDR0 255
#define NETMASK_ADDR1 255
#define NETMASK_ADDR2 255
#define NETMASK_ADDR3 0

/* gateway address */
#define GW_ADDR0 192
#define GW_ADDR1 168
#define GW_ADDR2 1
#define GW_ADDR3 1 

端口号在“tcp_client_init”函数中设置:spa

void tcp_client_init(void)
{
    struct tcp_pcb *pcb;
    struct ip_addr ipaddr;

    IP4_ADDR(&ipaddr, IP_S_ADDR0, IP_S_ADDR1, IP_S_ADDR2, IP_S_ADDR3);
  
    /* create a new TCP control block */
    pcb = tcp_new();
		pcb_Free = pcb;
    /* assign to the new pcb a local IP address and a port number */
    /* using IP_ADDR_ANY allow the pcb to be used by any local interface */
    if(ERR_USE != tcp_bind(pcb, IP_ADDR_ANY, 8087)){
        /* Specify the function to be called when a connection is established */    
        tcp_connect(pcb, &ipaddr, 8087, tcp_client_connected);
    }else{
        printf("connect is still alive \r\n ");
        memp_free(MEMP_TCP_PCB, pcb);
    }
}
四 :程序和原理图

上传的程序和原理图须要审核,过两天贴出来。
原理图下载连接
源代码下载连接

.net

相关文章
相关标签/搜索