以太網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); } }