支持国产!以太网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行已经屏蔽。

    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”函数中设置:

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);
    }
}
四 :程序和原理图

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

猜你喜欢

转载自blog.csdn.net/qq_36353009/article/details/106993898