打印
[信息]

【实战经验】使用CubeMX生成TCPEchoServer程序

[复制链接]
2706|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 香水城 于 2017-8-16 15:00 编辑

使用 CubeMX生成 TCPEchoServer工程


前言
在STM32的众多外设中,以太网这个外设相对而言还是比较复杂,初始化的过程也比较复杂,涉及到MAC,DMA,PHY好几块内容的初始化。可能有时候datasheet都看得头疼了,可初始化还是有问题。而STM32CubeMX工具就可以帮我们轻松完成这部分工作。在本文中,将分别以STM3220G-EVAL板为例,通过CubeMXv4.11来新建一个基于RAW API的TCPEchoServer的工程。

用CubeMX建立基于STM3220G-EVAL的工程

用CubeMX进行初始化配置

1. 新建一个Project,在向导中选择STM3220G-EVAL板


2. 因为我们直接选择了STM3220G-EVAL板,新建的CubeMX工程打开时就已经有默认的配置在里面了。所以我们只需要打开以太网和加入LWIP中间件就可以了。
1)在ETH下面选择MII模式;
2)使能 LWIP。

3. 配置以太网的参数

在Parameter Settings页面,可以配置MAC地址,PHY的地址,是否进行自动协商等。
这里,我们设置了MAC地址为02 :00 :00 :00 :00 :00,PHY地址为1。

在CubeMXv4.11版本里,以太网的参数设置还增加了Advanced Parameters页,可以根据所用的PHY修改寄存器的地址和一些MASK的设置。CubeMX中默认的配置是以DP83848C为例进行设置的。STM3220G-EVAL用的PHY就是DP83848C,所以不用修改也可以用。对于其他的PHY,不能完全通过CubeMX来配置,需要根据PHY的数据手册,手动的修改代码。将有冲突的地方删除,或者添加某个功能。
Advanced Parameters页分为三个部分:
 External PHY Configuration 。复位延时,读/写超时的参数设置
 Common :External PHY Configuration。PHY的基础寄存器配置,这部分寄存器对于大部分PHY都是相同或类似的。
 Extended :External PHY Configuration。 PHY的扩展寄存器配置,这部分对于每个PHY都是不一样的。如果是使用DP83848C以外的PHY,这部分内容需要特别注意。

4. 修改LWIP的参数
配置好以太网的参数后,点击OK,回到CubeMX的配置界面。选择LWIP继续进行参数配置。

首先是General页面,在这里我们可以看到LWIP的版本号。配置IP地址信息,可以选择通过DHCP的方式动态分配IP,也可以分配一个静态的IP地址。这里,我们选择配置静态的IP地址192.168.0.10,子网掩码255.255.255.0,网关192.168.0.1。ICMP协议打开,因为我们用的是TCP协议,所以把UDP协议关掉。
不用担心不知道每项参数是做什么用的,选择每一项参数后都会在窗口的底部显示该项参数的解释。

在All LwIP 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 STM3220G-EVAL板(192.168.0.10)

2.通过TCP测试工具模拟客户端,向STM3220G-EVAL板发一串数据。

测试结果说明我们刚刚建立的TCP EchoServer程序已经能正常工作了。
以上所介绍的只是CubeMX配置以太网程序的一部分功能,其他的功能稍后会一一道来!

更多实战经验请看:【ST MCU实战经验汇总贴】

沙发
libingqing| | 2016-5-20 10:52 | 只看该作者
试了下,不可以啊!

使用特权

评论回复
板凳
libingqing| | 2016-5-20 10:53 | 只看该作者
首先看recv和accept的函数,发觉有些参数也没有用,楼主可否再发一帖给我们好好讲讲吧!

使用特权

评论回复
地板
keaibukelian| | 2018-6-13 15:59 | 只看该作者
我的可以,通讯成功了 但是我没看懂cubumx生成的代码里边到底哪个函数的哪个部分是发送数据的函数

使用特权

评论回复
5
keaibukelian| | 2018-6-13 15:59 | 只看该作者
补充一下 ,我也没闹明白建立这些函数的原理是什么 请教楼主

使用特权

评论回复
6
Tangdabao| | 2019-8-2 17:10 | 只看该作者
正好需要,同问楼上的问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:STM32技术专家

596

主题

17108

帖子

288

粉丝