新坑涉及一些网络相关的内容,作为最初的最初,从最简单的起步,把无OS的LWIP用NUCLEO开发板运行起来。
本文目录
准备工作
一个带有ETH的stm32NUCLEO开发板
一台带有网口的电脑
CubeMX,启动!
我从杂物堆里找到了一块吃灰的NUCLEO-F767ZI,一块古老的开发板,不建议购买,网上能找到的教程都是古老的,很多界面都和现在的cubeMX不一样。
NUCLEO这板子有个好处,可以直接在Cube中选择开发板,省下自己找引脚编号了,还能把外设都初始化好。如果是别的开发板也没问题,自己看原理图把PHY一样进行配置一下即可。
NUCLEO这板子有个坏处,PHY的RESET是连接在了MCU的RESET上而不是IO上,这似乎导致了某些情况下PHY出问题了需要我手动按复位按键才能恢复。对于其他RESET连接IO的开发板,则要手动配置ETH_RESET,并加入到初始化函数中。
时钟拉满
配置LWIP
在中间件中找到LWIP,enable。Platform setting里设置PHY型号。NUCLEO-F767ZI中使用的是LAN8742。
关于LWIP_RAM_HEAP_POINTER (RAM Heap Pointer)
在Key Options中,默认的LWIP_RAM_HEAP_POINTER (RAM Heap Pointer)值是一个reserve的地址。需要自行修改,不然就会hardfault。这个值是LWIP内存空间的首地址,如果需要指定位置,则自行开辟空间并将填在这里。
这里我不需要指定位置,所以直接生成代码。找到 /LWIP/Target/lwipopts.h
,将LWIP_RAM_HEAP_POINTER给undif掉。这样LWIP就会自行开辟内存空间。
在主循环中加入处理函数
编译!烧录!找根网线插路由器上!
打开路由器控制台。
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。
编译烧录,等一小会再看路由器控制台。
静态IP
General Setting中,将LWIP_DHCP (DHCP Module)设为Disable,并设置IP地址、子网掩码和网关地址。
电脑新建网络连接,设置IP地址、子网掩码和网关地址。本机是Linux系统Kde桌面,其他系统也类似。
编译烧录,并用网线直接连接电脑,激活网络链接,ping。
下一步
过段时间可能会更新使用UDP,TCP因为我这个坑用不到我就不研究了。