STM32H743移植Lwip网络协议栈,实现网络通信功能

前段时间,项目中用到 STM32H743 的网络通信功能,一开始遇到不少问题,在网上查找了相关的教程,发现遇到此问题的还不在少数。现总结一下最简单的方法实现 STM32H743 的网络通信功能。

一、开发平台

  • 开发环境:MDK5.30
  • 移植驱动:STM32Cube_FW_H7_V1.9.0
  • 硬件平台:STM32H743VITX + LAN8742

二、开发流程

目前,是在 STM32Cube_FW_H7_V1.9.0 的基础上应用 NUCLEO-H743ZI 的 Lwip 例程,主要有一处修改项,就是网络相关管脚的分配。也就是说如果自己的开发硬件和 NUCLEO-H743ZI 的硬件在网络相关管脚分配不一致时,需要修改成自己的。如下代码所示。

/* Ethernet pins configuration ************************************************/
  /*
        RMII_REF_CLK ----------------------> PA1
        RMII_MDIO -------------------------> PA2
        RMII_MDC --------------------------> PC1
        RMII_MII_CRS_DV -------------------> PA7
        RMII_MII_RXD0 ---------------------> PC4
        RMII_MII_RXD1 ---------------------> PC5
        RMII_MII_RXER ---------------------> PG2
        RMII_MII_TX_EN --------------------> PG11
        RMII_MII_TXD0 ---------------------> PG13
        RMII_MII_TXD1 ---------------------> PB13
  */

  /* Configure PA1, PA2 and PA7 */
  GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStructure.Pull = GPIO_NOPULL; 
  GPIO_InitStructure.Alternate = GPIO_AF11_ETH;
  GPIO_InitStructure.Pin = GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_7;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  /* Configure PB13 */
  GPIO_InitStructure.Pin = GPIO_PIN_11;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
  
  /* Configure PC1, PC4 and PC5 */
  GPIO_InitStructure.Pin = GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);

  /* Configure PG2, PG11, PG13 and PG14 */
  GPIO_InitStructure.Pin =  GPIO_PIN_13 | GPIO_PIN_14;
  HAL_GPIO_Init(GPIOG, &GPIO_InitStructure);	
  

除此之外,也要注意 LAN8742 的复位引脚的设置。例如,正点原子的开发板对 LAN8742 复位引脚的处理就是通过另一个芯片实现的,所以这一点要注意。

三、STM32H743 网络通信验证

修改完上述代码之后,编译下载,插上网线,并确保电脑的 IP 地址与 STM32H743 的 IP 处于同一局域网中,然后在命令窗口中查看局域网中的 IP 地址,可以看到 STM32H743 的 IP,并通过 ping 命令,也可以 ping 通,如下图所示。

STM32H743移植Lwip网络协议栈,实现网络通信功能
图 1 查看 STM32H743 的 IP 地址并发出 ping 命令

另外,在浏览器中打开 STM32H743 的 IP 地址,就可以看到如下界面了。

STM32H743移植Lwip网络协议栈,实现网络通信功能
图 2 查看 STM32H743 的 IP 地址以获取网页信息

可以看出,STM32H743 的网络通信验证成功。

其实这里除了移植 Lwip 外,还移植了 RTOS 嵌入式操作系统,详细的代码分析,后续介绍。

另外,在 STM32CubeMX 中创建网络通信功能的实验,后续再作补充。

附件仅博主测试所用,暂不提供下载

扫码关注尚为网微信公众号

尚为网微信公众号
每天学习电路设计嵌入式系统的专业知识,关注一波,没准就用上了。

原创文章,作者:sunev,如若转载,请注明出处:https://www.sunev.cn/embedded/988.html

(2)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年6月25日 21:18
下一篇 2020年6月8日 21:00

相关推荐

发表回复

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