自己做的f407VE+LAN8720A板子,使用[野火]《LwIP应用开发实战指南》系列中的例程修改,因为野火使用的是F407ZG的芯片,硬件接线图也不一样,所以还需要做一些修改。

User/eth/bsp_eth.h中,需要根据自己的硬件连线修改引脚配置。

/* Private defines --------------------------------------*/
#define ETH_MDC_Pin                 GPIO_PIN_1        //C1
#define ETH_MDC_GPIO_Port           GPIOC
#define ETH_REF_CLK_Pin             GPIO_PIN_1        //A1
#define ETH_REF_CLK_GPIO_Port       GPIOA
#define ETH_MDIO_Pin                GPIO_PIN_2        //A2
#define ETH_MDIO_GPIO_Port          GPIOA
#define ETH_CRS_DV_Pin              GPIO_PIN_7        //A7
#define ETH_CRS_DV_GPIO_Port        GPIOA
#define ETH_RXD0_Pin                GPIO_PIN_4        //C4
#define ETH_RXD0_GPIO_Port          GPIOC
#define ETH_RXD1_Pin                GPIO_PIN_5        //C5
#define ETH_RXD1_GPIO_Port          GPIOC
#define ETH_TX_EN_Pin               GPIO_PIN_11       //G11
#define ETH_TX_EN_GPIO_Port         GPIOB
#define ETH_TXD0_Pin                GPIO_PIN_12       //G13
#define ETH_TXD0_GPIO_Port          GPIOB
#define ETH_TXD1_Pin                GPIO_PIN_13       //G14
#define ETH_TXD1_GPIO_Port          GPIOB

如果修改了TXD0、TXD1这种引脚的GPIO_GROUP,注意在对应的User/eth/bsp_eth.c文件中,也需要修改HAL_ETH_MspInit函数中HAL_GPIO_Init(GPIOB, &GPIO_InitStruct)的第一个参数,因为函数里的GPIOB并没用到宏定义去修改的(在这里被坑了好久好久)。

void HAL_ETH_MspInit(ETH_HandleTypeDef* ethHandle)
{GPIO_InitTypeDef GPIO_InitStruct;if(ethHandle->Instance==ETH){/* USER CODE BEGIN ETH_MspInit 0 *//* USER CODE END ETH_MspInit 0 */
//    /* Enable Peripheral clock */
//    __HAL_RCC_ETH_CLK_ENABLE();/**ETH GPIO Configuration    PC1     ------> ETH_MDCPA1     ------> ETH_REF_CLKPA2     ------> ETH_MDIOPA7     ------> ETH_CRS_DVPC4     ------> ETH_RXD0PC5     ------> ETH_RXD1PB11     ------> ETH_TX_ENPG13     ------> ETH_TXD0PG14     ------> ETH_TXD1 */GPIO_InitStruct.Pin = ETH_MDC_Pin|ETH_RXD0_Pin|ETH_RXD1_Pin;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF11_ETH;HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);GPIO_InitStruct.Pin = ETH_REF_CLK_Pin|ETH_MDIO_Pin|ETH_CRS_DV_Pin;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF11_ETH;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);GPIO_InitStruct.Pin = ETH_TX_EN_Pin;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF11_ETH;HAL_GPIO_Init(ETH_TX_EN_GPIO_Port, &GPIO_InitStruct);GPIO_InitStruct.Pin = ETH_TXD0_Pin|ETH_TXD1_Pin;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF11_ETH;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);    //这里注意要自己修改/* USER CODE BEGIN ETH_MspInit 1 *//* Enable the Ethernet global Interrupt */HAL_NVIC_SetPriority(ETH_IRQn, 6, 0);HAL_NVIC_EnableIRQ(ETH_IRQn);/* Enable ETHERNET clock  */__HAL_RCC_ETH_CLK_ENABLE();/* USER CODE END ETH_MspInit 1 */}
}

同样的需要修改该文件下的Eth_Reset函数,这个函数只会在开始初始化的时候进行一次硬件复位,所以根据自己的需要去修改。

static void Eth_Reset(void)
{ /* PHY RESET: PI1 */GPIO_InitTypeDef GPIO_InitStructure;__HAL_RCC_GPIOC_CLK_ENABLE();GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStructure.Pull  = GPIO_PULLUP;GPIO_InitStructure.Speed = GPIO_SPEED_FAST;GPIO_InitStructure.Pin = GPIO_PIN_0;HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET);HAL_Delay(5);HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);HAL_Delay(5);
}

最后是时钟,因为stm32使用的是25MHz的外部晶振,所以需要在board.c中的void SystemClock_Config(void)时钟配置的最后,添加MCO输出:

HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1);

同时还需要在该文件下添加引脚配置:

static void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOH_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();/*Configure GPIO pin : PA8 */GPIO_InitStruct.Pin = GPIO_PIN_8;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate = GPIO_AF0_MCO;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

并在时钟初始化之前调用:

void BSP_Init(void)
{HAL_Init();    GPIO_CLK_Init();MX_GPIO_Init();SystemClock_Config();LED_GPIO_Config(); /*³õʼ»¯USART ÅäÖÃģʽΪ 115200 8-N-1£¬ÖжϽÓÊÕ*/DEBUG_USART_Config();/* CmBacktrace initialize */cm_backtrace_init("JIEJIE-F407", HARDWARE_VERSION, SOFTWARE_VERSION);printf("----------- Lwip demo ------------\n");}

然后下载运行即可~

LAN8720A移植笔记相关推荐

  1. AT91RM9200Linux移植笔记(三)-移植Linux kernel 2.6.17

    AT91RM9200Linux移植笔记(三)-移植Linux kernel 2.6.17 手上板子原来自带的是2.4.19的内核, 打算移植新的2.6的内核,从网上下了2.6.17的kernel,下载 ...

  2. 以太网芯片W3100A到W3150A+的移植笔记(一)

    最近很多用户咨询 W3100A,由于W3100A已经停产.在此希望给大家介绍一下,W3100A可移植到其他芯片的方式及途径,供大家更好的拓展您项目的沿用性,期待能对您有所帮助.今天先为大家介绍第一部分 ...

  3. 【TINY4412】U-BOOT移植笔记:(9)SD卡启动U-BOOT

    [TINY4412]U-BOOT移植笔记:(9)SD卡启动U-BOOT 宿主机 : 虚拟机 Ubuntu 16.04 LTS / X64 目标板[底板]: Tiny4412SDK - 1506 目标板 ...

  4. micropython STM32移植笔记(一)

    micropython STM32移植笔记(一) 首先,我是一个搞硬件的,说白了是做电路的,呵呵... 一直想学一些软件,只会搞硬件的工程师是没有灵魂的,画了7年的PCB板卡了,但是每次调试硬件都要求 ...

  5. AWTK 在腾讯 TOS 上的移植笔记

    AWTK 在腾讯 TOS 上的移植笔记 本文以 STM32f103ze 为例,介绍了 AWTK 在 RTOS 上移植的经验.与其说移植,倒不如说是集成.因为 RTOS 通常没有提供标准的 LCD 驱动 ...

  6. 瑞芯微 | 摄像头ov13850移植笔记

    <1.瑞芯微rk356x板子快速上手> <2.Linux驱动|瑞芯微rtc-hym8563移植笔记> <3.Linux驱动 | Linux内核 RTC时间架构-基于瑞芯微 ...

  7. stm32 u8g2移植笔记

    STM32 u8g2 移植笔记 前言 当初想写一个单色屏菜单时,曾移植过u8g2到STM32平台(这里用的是keil MDK),不过当时一直有一个问题没有搞懂:为什么u8g2用在flash为32k,r ...

  8. u8g2 stm32移植笔记

    U8g2移植笔记 下载地址 移植步骤 部分源码简要分析 下载地址 U8g2下载地址U8g2项目Github. 移植步骤 我移植U8g2采用的是stm32硬件SPI,可以提供更高的通讯速率,移植时只需要 ...

  9. FreeModbus 移植笔记- 1-认识FreeModbus

    FreeModbus 移植笔记 目录 1 FreeMODBUS介绍 2 FreeMODBUS官网及源码下载地址 3 移植之前的准备 3.1 FreeModbus V1.6 ​​​​​​​3.2 Mod ...

最新文章

  1. Spark Streaming简介
  2. Controller的传参问题
  3. 数据分析很难学?60天就够了!
  4. python中os.path.dirname(__file__)的使用(获取文件夹路径)(获取当前py文件绝对路径)
  5. 【最快人脸检测模型开源】libfacedetection开源
  6. java 13个核心技术3
  7. 【转】重装Ubuntu时如何保留/home分区中的数据
  8. 【LeetCode】【字符串】题号:*344. 反转字符串
  9. 单模光纤最大传输距离为多少_单模光缆的传输距离是多少?
  10. 华为od机考真题-统计射击比赛成绩
  11. c语言计算100天后是星期几,用C语言试编写一个程序,输入今天是星期几,计算并输出100天后是星期几....
  12. Python 笑脸抓拍
  13. ADB模拟点击、滑动事件
  14. Linux环境重启系统网卡down,linux重启网卡命令有哪些
  15. 【HTML5】字体加粗代码
  16. 统计学习(一):最大似然估计
  17. Python-random函数用法
  18. SeaTunnel 2.1.2的源码解析(5)seatunnel-connectors-flink-http
  19. 关于大学生睡眠状况及影响因素调研报告
  20. opencv球体追踪

热门文章

  1. Android 蓝牙 HFP HF端的通话建立过程(framework)(二)
  2. 七个聊天机器人构建平台:轻松打造自己的机器人
  3. WordPress网站加载WAITING (TTFB) 时间过长解决办法
  4. Java中的容器解析----集合.2
  5. odata php,Retrieving Data with the OData SDK for PHP
  6. 【转】【2015MIIC】迅雷CTO陈磊:互联网思维会害死很多传统企业
  7. Codeforces Round #807 (Div. 2) E. Mark and Professor Koro(线段树二分)
  8. 隐写术(盲水印):从入门到出门
  9. AI语音唤醒方案的设计与实现
  10. python限制进程数_Python连载36-线程数量限制、Timer、可重入锁