LAN8720A移植笔记

LAN8720A移植笔记自己做的f407VE+LAN8720A板子,使用[野火]《LwIP应用开发实战指南》系列中的例程修改,因为野火使用的是F407ZG的芯片,硬件接线图也不一样,所以还需要做一些修改。User/eth/bsp_eth.h中,需要根据自己的硬件连线修改引脚配置。/*Privatedefines————————————–*/#defineET…

大家好,又见面了,我是你们的朋友全栈君。

自己做的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_MDC PA1 ------> ETH_REF_CLK PA2 ------> ETH_MDIO PA7 ------> ETH_CRS_DV PC4 ------> ETH_RXD0 PC5 ------> ETH_RXD1 PB11 ------> ETH_TX_EN PG13 ------> ETH_TXD0 PG14 ------> 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");
	
}

然后下载运行即可~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148967.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MySQL配置+SQLyog安装教程

    MySQL配置+SQLyog安装教程一标题、MySQL的配置官网地址:MySQL官网地址。我选择的版本是5.5.27,具体mis文件运行之后的操作步骤参考博客MySQL安装教程。二、SQLyog安装教程安装程序下载:链接:https://pan.baidu.com/s/1MeFavdcOAd0BUG3D9cA9eg提取码:i5mi安装教程参考博客SQLyog安装教程三、所需数据库资源百度云链接:链接:https…

    2022年5月28日
    59
  • 聊天机器人接口_可以对话的app

    聊天机器人接口_可以对话的app一、什么是Simsimi?simsimi公司是提供智能服务,其中一个服务是simsimi聊天机器人服务,每天有超过百万的用户聊天,国内最大的搜索引擎——百度的产品siri使用的就是simsimi提供的api。你可以在网址http://www.simsimi.com/talk.htm# 进行体验SimSimiinc.isspecializedincollectiveint…

    2022年10月22日
    1
  • Navicat Premium相关注册码「建议收藏」

    Navicat Premium相关注册码「建议收藏」–NavicatforSQLServerV10.0.10NAVD-3CG2-6KRN-IEPMNAVL-NIGY-6MYY-XWQENAVI-C3UU-AAGI-57FW–NavicatPremium注册码NAVJ-E6YF-JULL-KKIGNAVE-BOCL-CE3X-TAGYNAVC-KAIA-NU5I-SPOXNAVL-FE27-KNTQ-YJXCNAVK-LXKO-3XHL…

    2022年10月13日
    0
  • Linux文件编辑命令详细整理

    Linux文件编辑命令详细整理

    2020年11月12日
    220
  • HP磁盘阵列损坏的修复

    HP磁盘阵列损坏的修复公司中有一台HPDL380G5服务器硬盘红灯报警,使用ACU工具查看后,显示磁盘损坏,截图如下:更换磁盘后,显示正在重建,即属于正常,截图如下:更换硬盘前需要确认硬盘是什么型号,哪个系列的,以及硬盘的大小:最重要的是SPARE号一定要保持一致。下面给大家提供一下更换磁盘的一些资料以及注意事项:1、更换的磁盘与原先的磁盘无比保持大小相同,型号…

    2022年5月30日
    40
  • 番茄时间计时器_番茄计时器怎么调时间

    番茄时间计时器_番茄计时器怎么调时间今天读书学到个番茄时间,不想下app,写了个html,在手机上打开,横屏,是一样的计时效果。方法很笨,问题很多,勉强能用。因为很简陋,没有调,如果不按顺序按键,可能崩溃。1.先选时间,30分钟

    2022年8月2日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号