你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【实战经验】从零开始使用 CubeMX 创建以太网工程  

[复制链接]
zero99 发布时间:2016-12-19 13:28
前言
在前面一篇文章中,介绍了如何使用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。
31.jpg
这个时候我们看到的还是一个空的工程。如下图:
32.jpg
2.外设使能,引脚配置
2.1以太网外设引脚配置
Nucleo-144板上用的PHY LAN8742A,RMII接口。在Cubemx中使能ETH外设,选择RMII接口。Cubemx会自动配置对应的以太网接口。如下图:
33.jpg
STM32的很多引脚都有复用功能,同一个功能也可以remap到不同的引脚。所以这里要记得将CubeMX自动配置的引脚和实际电路中使用的引脚进行对比,保证是一致的。
从UM1974中可以找到Nucleo-144板上以太网引脚分配表。对比这张表格和CubeMX的默认配置,会发现PB11,PB12引脚在STM32F746-Nucleo板中没有用做以太网的接口,而是用作其他用途了。
STM32F746-Nucleo上的引脚分配:
34.jpg
CubeMX的默认分配:
35.jpg
在Cubemx中修改引脚配置:
修改方法见下图,用同样的方法配置PG11和PG13。配置PG11和PG13后,对应PB11和PB12会自动清除之前的配置,以免冲突。
36.jpg
到现在位置,已经将所有的GPIO口都配置好了。
在Configuration页面中,还可以看到所有配置的GPIO。并可以做进一步的配置,这里就先用默认的设置。
37.jpg
2.2使能LwIP协议栈
在这个工程内,我们会用到LwIP协议栈,所以还需要在这一页的Middlewares部分将LWIP勾选上。之后就可以在Configuration页面对LWIP协议栈进行配置了。
38.jpg

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

在Parameter Settings页面,可以配置MAC地址,PHY的地址,是否进行自动协商等。
这里,我们设置了MAC地址为本地地址02 :00 :0 :00 :00 :00。LAN8742a的PHY地址由上电时PHYAD0的状态决定。根据STM32F746-Nucleo板的原理图,设置PHY地址为0。
41.jpg
接收数据的模式有轮询和中断两种方式,中断方式需要和操作系统一起使用,这里我们没有使用任何操作系统,所以在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,这部分内容需要特别注意。
42.jpg
4. 修改LWIP的参数
配置好以太网的参数后,点击OK,回到CubeMX的配置界面。选择LWIP继续进行参数配置。
43.jpg
首先是GeneralSettings页面,在这里我们可以看到LWIP的版本号。配置IP地址信息,可以选择通过DHCP的方式动态分配IP,也可以分配一个静态的IP地址。这里,我们选择配置静态的IP地址192.168.0.10,子网掩码255.255.255.0,网关192.168.0.1。ICMP协议打开,因为我们用的是TCP协议,所以把UDP协议关掉。
不用担心不知道每项参数是做什么用的,选择每一项参数后都会在窗口的底部显示该项参数的解释。
44.png
在Key Options这一页里,有更多的参数可以配置。关于接收/发送内存的配置也是在这里。选择右上方的“Show Advanced Parameters”后,还有更多的参数配置项。这里,我们也可以不做修改,使用默认值。CubeMX中每个参数项的名称和代码中的名称相同,这样也方便了在代码中进行查找。
45.jpg
到此为止,我们在CubeMX中需要做的配置就全部完成了。选择Project——>Generate Code,生成初始的工程。
46.jpg

添加用户代码
用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后,将其加入到工程项目中。
47.png

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

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



测试结果说明我们刚刚建立的TCP EchoServer程序已经能正常工作了。


STM32CubeMX下载地址:
STM8CubeMX下载地址:




评分

参与人数 1 ST金币 +1 收起 理由
sqmonkey-139632 + 1 赞一个!

查看全部评分

1 收藏 11 评论26 发布时间:2016-12-19 13:28

举报

26个回答
15616384352 回答时间:2017-7-22 17:33:54
抱歉,问题解决掉了,按照您上面的步骤生成的代码是没有问题的,至于PHY的寄存器偏移值及MASK,在此次这样配置下是无所谓的,用默认值即可。这些寄存器的值是用于检测连接参数及连接状态的,此次没有用到这些功能。
之前的问题,是我没有配置PD3,这儿引脚为PHY的引脚复位,现在一切正常。谢谢

评分

参与人数 1ST金币 +5 收起 理由
zero99 + 5 谢谢支持

查看全部评分

jackten 回答时间:2016-12-19 14:38:35
谢谢分享                                 
Paderboy 回答时间:2016-12-19 15:26:23
学习。。学习;;;
霹雳之火 回答时间:2016-12-19 16:31:04
cubeMX配置功能真的好强大
datouren 回答时间:2017-2-15 10:10:02
不赖  不赖
netlhx 回答时间:2017-6-8 19:23:53
小破出品,必属精品!
斜阳__ 回答时间:2017-6-8 19:24:30
我来学习lwip了
epochal 回答时间:2017-6-9 07:17:08
学习学习,谢谢版主!
队长shiwo 回答时间:2017-7-20 09:36:41
破总,有LAN8742A手册的吗
zero99 回答时间:2017-7-20 18:01:59
队长shiwo 发表于 2017-7-20 09:36
破总,有LAN8742A手册的吗

是ST MCU吗  怎么没听过
123下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版