从零开始使用 CubeMX 创建以太网工程

前言
在前面一篇文章中,介绍了如何使用CubeMX来建立一个简单的TCPEchoserver工程。但是在新建CubeMX项目时,是通过直接选择ST的开发板的方式实现的。对于大多数实际的开发场景,可能并不是在ST的开发板上进行的,所以在这篇文章中,我将介绍如何从零开始建立一个以太网工程。
今年ST推出的Nucleo-144板子上集成了以太网接口,所以在本文中,将以STM32F746-Nucelo板为例,通过CubeMXv4.18来新建一个TCPEchoserver的程序。
 
用CubeMX建立基于STM32F746-Nucleo的工程
用CubeMX进行初始化配置
这回我们直接选择STM32F746-Nucleo板上对应的芯片STM32F746ZGT6U,而不是选择STM32F746-Nucleo板。
1. 新建一个Project,在向导中选择STM32F746ZGT6U。
 
这个时候我们看到的还是一个空的工程。如下图:
 
2.外设使能,引脚配置
2.1以太网外设引脚配置
Nucleo-144板上用的PHY LAN8742A,RMII接口。在Cubemx中使能ETH外设,选择RMII接口。Cubemx会自动配置对应的以太网接口。如下图:
 
STM32的很多引脚都有复用功能,同一个功能也可以remap到不同的引脚。所以这里要记得将CubeMX自动配置的引脚和实际电路中使用的引脚进行对比,保证是一致的。
从UM1974中可以找到Nucleo-144板上以太网引脚分配表。对比这张表格和CubeMX的默认配置,会发现PB11,PB12引脚在STM32F746-Nucleo板中没有用做以太网的接口,而是用作其他用途了。
STM32F746-Nucleo上的引脚分配:
 
CubeMX的默认分配:
 
在Cubemx中修改引脚配置:
修改方法见下图,用同样的方法配置PG11和PG13。配置PG11和PG13后,对应PB11和PB12会自动清除之前的配置,以免冲突。
 
到现在位置,已经将所有的GPIO口都配置好了。
在Configuration页面中,还可以看到所有配置的GPIO。并可以做进一步的配置,这里就先用默认的设置。
 
2.2使能LwIP协议栈
在这个工程内,我们会用到LwIP协议栈,所以还需要在这一页的Middlewares部分将LWIP勾选上。之后就可以在Configuration页面对LWIP协议栈进行配置了。
 

3.时钟配置
接下来进行时钟配置。CubeMX默认系统时钟16MHz,但以太网外设需要至少25MHz的系统时钟,所以这里会看到Clock Configuration页面显示   
打开Clock Configuration页面会自动跳出一个提示框,可以选择让CubeMX来帮你自动调整时钟配置,也可以自己手动进行调整。这里,我选择让CubeMX自动配置,CubeMX会自动将时钟配成216MHz。
 
4. 配置以太网参数

在Parameter Settings页面,可以配置MAC地址,PHY的地址,是否进行自动协商等。
这里,我们设置了MAC地址为本地地址02 :00 :0 :00 :00 :00。LAN8742a的PHY地址由上电时PHYAD0的状态决定。根据STM32F746-Nucleo板的原理图,设置PHY地址为0。
 
接收数据的模式有轮询和中断两种方式,中断方式需要和操作系统一起使用,这里我们没有使用任何操作系统,所以在RX Mode这一项只能选择Polling Mode。
最后一项是”TX IP Header Checksum Computation”,STM32的MAC控制器可以在发送数据时自动添加IP数据报的checksum,如果需要这项功能,就将这一项设置为“By hardware”
在Advanced Parameters页,可以根据所用的PHY修改寄存器的地址和一些MASK的设置。因为STM32F746的两款开发板上用的都是PHY LAN8742A,所以CubeMX中默认的配置是以LAN8742A为例进行设置的。所以这里,我们不需要做任何修改就可以直接用。但如果是其他的PHY,可以在PHY这一项选择“user PHY”,然后根据所用PHY的数据手册,配置下面的参数,对于部分无法通过CubeMX进行配置的参数,需要手动的修改代码。将有冲突的地方删除,或者添加某个功能。
Advanced Parameters页分为三个部分:
· External PHY Configuration 。复位延时,读/写超时的参数设置
· Common :External PHY Configuration。PHY的基础寄存器配置,这部分寄存器对于大部分PHY都是相同或类似的。
· Extended :External PHY Configuration。 PHY的扩展寄存器配置,这部分对于每个PHY都是不一样的。如果是使用非CubeMX默认的PHY,这部分内容需要特别注意。
 
4. 修改LWIP的参数
配置好以太网的参数后,点击OK,回到CubeMX的配置界面。选择LWIP继续进行参数配置。
 
首先是GeneralSettings页面,在这里我们可以看到LWIP的版本号。配置IP地址信息,可以选择通过DHCP的方式动态分配IP,也可以分配一个静态的IP地址。这里,我们选择配置静态的IP地址192.168.0.10,子网掩码255.255.255.0,网关192.168.0.1。ICMP协议打开,因为我们用的是TCP协议,所以把UDP协议关掉。
不用担心不知道每项参数是做什么用的,选择每一项参数后都会在窗口的底部显示该项参数的解释。
 
在Key Options这一页里,有更多的参数可以配置。关于接收/发送内存的配置也是在这里。选择右上方的“Show Advanced Parameters”后,还有更多的参数配置项。这里,我们也可以不做修改,使用默认值。CubeMX中每个参数项的名称和代码中的名称相同,这样也方便了在代码中进行查找。
 
到此为止,我们在CubeMX中需要做的配置就全部完成了。选择Project——>Generate Code,生成初始的工程。

添加用户代码
用IAR打开前面已经生成好的工程。我们还需要两步就可以完成一个简单的TCP EchoServer程序了。
1.新建tcp_echoserver.c文件,在tcp_echoserver.c里要做下面这几件事情:
1)新建一个tcp_echoserver_pcb(调用tcp_new函数);
2)将新建的tcp_echoserver_pcb与要监听的端口绑定(调用tcp_bind函数)
3)转成监听状态(调用tcp_listen函数)
4)注册回调函数tcp_echoserver_accept,当有新连接建立后会调用该函数(调用tcp_accept函数)
5)注册回调函数tcp_echoserver_recv,当该连接接收到数据后会调用该函数(调用tcp_recv函数)
6)完成tcp_echoserver_recv函数,在该函数内,将收到的数据再发出去。
需要注意,本文的目的是示例如何用CubeMX建立一个简单的TCP EchoServer程序,所以考虑的都是最基本简单的情况。比如,在回发数据部分,我们假设Client发来的数据都在一个Pbuf的大小以内。
完成tcp_echoserver.c后,将其加入到工程项目中。

2. 在main函数中添加tcp_echoserver_init(),在while(1)中添加MX_LWIP_Process()查询接收数据。记得要将代码加在/*USER CODE BEGIN*/和/*USER CODE END*/之间,这样才不会在下次用CubeMX生成代码时被覆盖掉。
 
一个简单的TCP Echoserver程序就完成了。

测试结果
我们来看一看ping测试和TCP测试工具的结果
1. 通过电脑(192.168.0.11)ping STM32F746-Nucleo板(192.168.0.10)
 
2.通过TCP测试工具模拟客户端,向STM32F746-Nucleo板发一串数据。
 



测试结果说明我们刚刚建立的TCP EchoServer程序已经能正常工作了
  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32CubeMX是一个用于配置STM32微控制器的图形化工具。 通过使用STM32CubeMX,您可以选择所需的外设和功能,然后生成配置代码。在您引用的情况下,STM32CubeMX被用来配置STM32F427微控制器,将dp83848以太网控制器、FreeRTOS操作系统以及LWIP网络协议栈集成进来。 这样可以实现以太网数据的收发功能。 通过创建任务函数,您可以在STM32F427上实现UDP的以太网数据收发功能。您可以在电脑的DOS窗口中ping STM32F427上LWIP设置的IP地址,通过网络实现通信。 在毕设项目中,基于Zigbee和STM32的智能家居系统,上位机使用Qt编写。这个项目的源码经过本地编译并且可运行。您只需要按照文档配置好环境,就可以运行该项目。 总结起来,您可以使用STM32CubeMX创建STM32F427的项目,配置它的外设和功能,例如以太网控制器和LWIP网络协议栈。然后,通过创建任务函数,您可以实现UDP的以太网数据收发功能。此外,您还可以使用STM32和Zigbee来开发智能家居系统。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [STM32cubeMX--STM32F427--dp83848---freeRTOS--LWIP点灯实验](https://download.csdn.net/download/qq_43497365/12918109)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [STM32Cubemx+STM32F407+FreeRTos+LAN8740 以太网通信实现数据收发功能](https://download.csdn.net/download/weixin_64705314/87672487)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [毕设项目:基于zigbee和stm32的智能家居系统,上位机使用Qt编写.zip](https://download.csdn.net/download/qq_35831906/88258947)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值