GD32F407移植SR8201F

从GD32F450移植SR8201F网络驱动到GD32F407VE笔记

一、

从网络上下载GD32F450对SR8201F的驱动,MII接法原理图,SR8201F芯片资料等。

二、解压驱动

驱动分为library和project目录

三、打开工程

在project目录下,找到MDK工程并打开,安装必要的驱动。

可以看见,选择GD的芯片

四、设置路径,把450改为407

五、并设置include path,把LWIP的头文件都包含进来。

六、把源码建目录依次导入

记得把library下面的目录包含进来,否则会报错。

七、修改main.h文件,设置MII_MODE(我用的是MII模式,芯片也支持RMII模式)

根据原理图设置MAC_ADDR0地址,关中断,用LWIP TIMEOUT模式。

八、修改enet_gpio_config()函数

九、根据原理图修改GPIO,其中RXD0~RXD3需要设置为弱上拉,这个地方芯片驱动默认是不上拉。

#ifdef MII_MODE

    /* PA1: ETH_MII_RX_CLK */

    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_1);

    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_1);

   

    /* PA2: ETH_MDIO */

    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_2);

    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_2);

   

    /* PA7: ETH_MII_RX_DV */

    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_7);

    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_7);  

   

    gpio_af_set(GPIOA, GPIO_AF_11, GPIO_PIN_1);

    gpio_af_set(GPIOA, GPIO_AF_11, GPIO_PIN_2);

    gpio_af_set(GPIOA, GPIO_AF_11, GPIO_PIN_7);

   

    /* PG11: ETH_MII_TX_EN */

    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_11);

    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_11);

//    gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_11);

//    gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_11);   

    /* PG13: ETH_MII_TXD0 */

    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_12);

    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_12);

//    gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_13);

//    gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_13);   

    /* PG14: ETH_MII_TXD1 */

    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_13);

    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_13);  

//    gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_14);

//    gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_14);  

   

    gpio_af_set(GPIOB, GPIO_AF_11, GPIO_PIN_11);

    gpio_af_set(GPIOB, GPIO_AF_11, GPIO_PIN_12);

    gpio_af_set(GPIOB, GPIO_AF_11, GPIO_PIN_13);

//    gpio_af_set(GPIOG, GPIO_AF_11, GPIO_PIN_11);

//    gpio_af_set(GPIOG, GPIO_AF_11, GPIO_PIN_13);

//    gpio_af_set(GPIOG, GPIO_AF_11, GPIO_PIN_14);

    /* PC1: ETH_MDC */

    gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_1);

    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_1);

   

    /* PC2: ETH_MII_TXD2 */

    gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_2);

    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_2);

   

    /* PC3: ETH_MII_TX_CLK */

    gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3);

    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_3); 

    /* PC4: ETH_MII_RXD0 */

//    gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_4);

              gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_4);

    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_4);

   

    /* PC5: ETH_MII_RXD1 */

    gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_5);

//    gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_5);          

    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_5);

   

    gpio_af_set(GPIOC, GPIO_AF_11, GPIO_PIN_1);

    gpio_af_set(GPIOC, GPIO_AF_11, GPIO_PIN_2);

    gpio_af_set(GPIOC, GPIO_AF_11, GPIO_PIN_3);

    gpio_af_set(GPIOC, GPIO_AF_11, GPIO_PIN_4);

    gpio_af_set(GPIOC, GPIO_AF_11, GPIO_PIN_5);

    /* PH2: ETH_MII_CRS */

    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_0);

    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_0);

//    gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_2);

//    gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_2);   

    /* PH3: ETH_MII_COL */

    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3);

    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_3);

//    gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3);

//    gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_3);   

    /* PH6: ETH_MII_RXD2 */

    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_0);

//    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_0);          

    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_0); 

//    gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_6);

//    gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_6); 

    /* PH7: ETH_MII_RXD3 */

    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_1);

//    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_1);          

    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_1);

//    gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_7);

//    gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_7);

   

    gpio_af_set(GPIOA, GPIO_AF_11, GPIO_PIN_0);

    gpio_af_set(GPIOA, GPIO_AF_11, GPIO_PIN_3);

    gpio_af_set(GPIOB, GPIO_AF_11, GPIO_PIN_0);

    gpio_af_set(GPIOB, GPIO_AF_11, GPIO_PIN_1);

//    gpio_af_set(GPIOH, GPIO_AF_11, GPIO_PIN_2);

//    gpio_af_set(GPIOH, GPIO_AF_11, GPIO_PIN_3);

//    gpio_af_set(GPIOH, GPIO_AF_11, GPIO_PIN_6);

//    gpio_af_set(GPIOH, GPIO_AF_11, GPIO_PIN_7);

             

    /* PI8: ETH_INT */

    gpio_mode_set(GPIOI, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_8);

    gpio_output_options_set(GPIOI, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_8); 

    /* PI10: ETH_MII_RX_ER */

    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_10);

    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_10);

//    gpio_mode_set(GPIOI, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_10);

//    gpio_output_options_set(GPIOI, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_10);

             

    gpio_af_set(GPIOI, GPIO_AF_11, GPIO_PIN_8);

 //   gpio_af_set(GPIOI, GPIO_AF_11, GPIO_PIN_10);

    gpio_af_set(GPIOB, GPIO_AF_11, GPIO_PIN_10);

    /* PB8: ETH_MII_TXD3 */

    gpio_mode_set(GPIOE, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_2);

    gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_2);

   

    gpio_af_set(GPIOE, GPIO_AF_11, GPIO_PIN_2);

//     gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_8);

//    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_8);

//   

//    gpio_af_set(GPIOB, GPIO_AF_11, GPIO_PIN_8);    

十、修改完编译好,下载能ping 通板子。短包有些丢包,长包可以到1472,没有发现丢包。注意startup.s要改为32F407的。

十一、测试TCP client

将电脑IP设置为192.168.57.158,运行网络调试助手,端口设为8000,可以看到TELNET连接成功

同时串口显示如下:

验证板测试ping包丢失:3小时无丢包

END.

附下载地址:(7条消息) GD32F407移植和芯润德以太网芯片SR8201F源码-嵌入式文档类资源-CSDN文库

版权声明:本文为CSDN博主「qq_21851929」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_21851929/article/details/122605997

生成海报
点赞 0

qq_21851929

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

TCRT5000循迹模块原理及应用

前言 本文将讲述TCRT5000循迹模块的原理及应用。本文应用于STM32,对于使用循迹模块的你有一定的帮助。 以下是本篇文章的正文内容 一、TCRT5000循迹模块介绍 TCRT5000就是一个红外发射和接收器&#xff0

L298N电机驱动的使用

前言 博主为某大学电气专业大学生,以学习为目的写下该文,内容主要为以51单片机为例简单介绍L298N电机驱动模块的使用。内容若有不适,欢迎指正、补充和联系。 提示:以下是本篇文章正文内容

ESP8266+CH340下载电路+LCD显示屏显示天气时钟

0.前言 之前一直进行软件编程方面的学习与应用,但所有软件都是基于一定的硬件基础,所以想通过做些比较有意思的小项目来入门硬件的设计与应用。看到ESP模块在物联网方面的应用比较多,于是准备设计一个许多人