使用cubemx在NUCLEO上无OS光速点亮LWIP

  • Post author:
  • Post category:嵌入式 / 所有文章
  • Post comments:0评论
  • Post last modified:2025年1月6日
  • Reading time:2 mins read

新坑涉及一些网络相关的内容,作为最初的最初,从最简单的起步,把无OS的LWIP用NUCLEO开发板运行起来。

准备工作

一个带有ETH的stm32NUCLEO开发板
一台带有网口的电脑

CubeMX,启动!

我从杂物堆里找到了一块吃灰的NUCLEO-F767ZI,一块古老的开发板,不建议购买,网上能找到的教程都是古老的,很多界面都和现在的cubeMX不一样。
NUCLEO-F767ZI

NUCLEO这板子有个好处,可以直接在Cube中选择开发板,省下自己找引脚编号了,还能把外设都初始化好。如果是别的开发板也没问题,自己看原理图把PHY一样进行配置一下即可。
cubeInit

NUCLEO这板子有个坏处,PHY的RESET是连接在了MCU的RESET上而不是IO上,这似乎导致了某些情况下PHY出问题了需要我手动按复位按键才能恢复。对于其他RESET连接IO的开发板,则要手动配置ETH_RESET,并加入到初始化函数中。

PhyInit
PhyInit

时钟拉满
ClockInit

配置LWIP

在中间件中找到LWIP,enable。Platform setting里设置PHY型号。NUCLEO-F767ZI中使用的是LAN8742。
LWIPInit

关于LWIP_RAM_HEAP_POINTER (RAM Heap Pointer)

在Key Options中,默认的LWIP_RAM_HEAP_POINTER (RAM Heap Pointer)值是一个reserve的地址。需要自行修改,不然就会hardfault。这个值是LWIP内存空间的首地址,如果需要指定位置,则自行开辟空间并将填在这里。
LWIP_RAM_HEAP_POINTER

这里我不需要指定位置,所以直接生成代码。找到 /LWIP/Target/lwipopts.h ,将LWIP_RAM_HEAP_POINTER给undif掉。这样LWIP就会自行开辟内存空间。
LWIP_RAM_HEAP_POINTER

在主循环中加入处理函数

mainWhile

编译!烧录!找根网线插路由器上!

打开路由器控制台。
onRouter
ping一下。
ping
到这里就可以算点亮成功了。

修改Hostname

找到Key Options,选上Show Advanced Parameters,找到Network Interfaces Options,将LWIP_NETIF_HOSTNAME (NETIF Hostname)设为Enable,在LWIP_NETIF_HOSTNAME_NAME (LWIP_NETIF_HOSTNAME_NAME (LWIP NETIF Hostname))中输入需要设置的Hostname。
Hostname
编译烧录,等一小会再看路由器控制台。
Hostname

静态IP

General Setting中,将LWIP_DHCP (DHCP Module)设为Disable,并设置IP地址、子网掩码和网关地址。
Hostname
电脑新建网络连接,设置IP地址、子网掩码和网关地址。本机是Linux系统Kde桌面,其他系统也类似。
Hostname
编译烧录,并用网线直接连接电脑,激活网络链接,ping。
Hostname

下一步

过段时间可能会更新使用UDP,TCP因为我这个坑用不到我就不研究了。

发表回复