STM32F407+FreeRTOS+LAN8720+LWIP+STM32CubeMX+DHCP

记录一下通过STM32CubeMX配置STM32F407使用lan8720A使用lwip实现dhcp功能,使用硬件正点原子战舰开发板,STM32CubeMX版本6.4;FreeRTOS版本10.2.1,接口:cmsis_v2。

1.硬件主要原理图如下:(lan8720正常工作,C11电压1.2v。PHY地址设置:MAC层通过SMI总线对PHY进行读写操作,LAN8720通过设置RXER/PHYAD0引脚来设置PHY地址,芯片内部自带下拉电阻,当硬复位结束后,LAN8720会读取该引脚电平,作为器件的SMI地址;若该引脚接下拉电阻时(浮空也可,因为内部自带下拉电阻),SMI地址为0;若该引脚接上拉电阻,SMI地址为1;这里采用的是引脚浮空,即设置LAN8720地址为0,后面配置地址会用得到。)

2.STM32CubeMX配置eth截图:

首先把时钟配置下:

1)配置PHY地址为0,上面提到第10脚悬空时地址为0.

2) PHY选择userPHY ,A用系统自带的。

3)B用系统自带的,特殊说明第三个参数最好改为数据手册的参数

 4)PHY参数设置由来:

 5)其余配置截图:

 

3.freestos配置(没什么特殊操作,只是添加了2个任务而已):

4.LWIP配置:

我这里使用的是动态获取IP地址

其余配置展示,几乎没改动,改动的都标记出来了

打开  debug调试信息:

在keil(freestos的一个任务里)中添加如下代码查看是否获取动态ip成功:

 要包含如下头文件:

 为了方便测试,整个部分代码粘贴如下,请按需复制。

void StartDefaultTask(void *argument)
{
  /* init code for LWIP */
  MX_LWIP_Init();
  /* USER CODE BEGIN StartDefaultTask */
  App_Ethernet_init();
  printf("DMA INIT");
  struct dhcp *dhcp;
  /* Infinite loop */
  for(;;)
  {
	  
	/*测试动态获取ip用*/
	dhcp=netif_dhcp_data(&gnetif);
	printf("DHCP IP address: %s\n", ip4addr_ntoa(&dhcp->offered_ip_addr));
    printf("DHCP Subnet mask: %s\n", ip4addr_ntoa(&dhcp->offered_sn_mask));
    printf("DHCP Default gateway: %s\n", ip4addr_ntoa(&dhcp->offered_gw_addr));
	/*测试动态获取ip用*/	  
	  
	 printf("IAM LIVEING1");
	 HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
     osDelay(500);
	 //MX_LWIP_Process();
  }
  /* USER CODE END StartDefaultTask */
}

最后截取下测试成功的打印信息截图:

 至此,整个工程调试结束,如果对你有帮助请点个赞再走。

  • 22
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在嵌入式里摸爬滚打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值