支持國產!以太網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

相關文章
相關標籤/搜索