搜索
查看: 22321|回复: 26

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

  [复制链接]
  • TA的每日心情
    开心
    2018-2-6 09:20
  • 签到天数: 1 天

    [LV.1]初来乍到

    1182

    主题

    4967

    帖子

    1

    蝴蝶豆

    论坛元老

    最后登录
    2020-3-17
    发表于 2016-12-19 13:28:47 | 显示全部楼层 |阅读模式
    前言
    在前面一篇文章中,介绍了如何使用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下载地址:




    评分

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

    查看全部评分

    回复

    使用道具 举报

    该用户从未签到

    4

    主题

    101

    帖子

    2

    蝴蝶豆

    高级会员

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

    评分

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

    查看全部评分

    回复 支持 1 反对 0

    使用道具 举报

    该用户从未签到

    10

    主题

    703

    帖子

    0

    蝴蝶豆

    金牌会员

    最后登录
    2018-6-15
    发表于 2016-12-19 14:38:35 | 显示全部楼层
    谢谢分享                                 
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    47

    主题

    3456

    帖子

    30

    蝴蝶豆

    版主

    最后登录
    2022-12-25
    发表于 2016-12-19 15:26:23 | 显示全部楼层
    学习。。学习;;;
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6

    主题

    468

    帖子

    0

    蝴蝶豆

    金牌会员

    最后登录
    2019-12-28
    发表于 2016-12-19 16:31:04 | 显示全部楼层
    cubeMX配置功能真的好强大
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    9

    帖子

    0

    蝴蝶豆

    初级会员

    最后登录
    2021-1-7
    发表于 2017-2-15 10:10:02 | 显示全部楼层
    不赖  不赖
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    107

    主题

    919

    帖子

    5

    蝴蝶豆

    论坛元老

    最后登录
    2021-1-3
    发表于 2017-6-8 19:23:53 | 显示全部楼层
    小破出品,必属精品!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    29

    主题

    1285

    帖子

    59

    蝴蝶豆

    论坛元老

    最后登录
    2021-6-27
    发表于 2017-6-8 19:24:30 | 显示全部楼层
    我来学习lwip了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    2290

    帖子

    3

    蝴蝶豆

    论坛元老

    最后登录
    2021-5-1
    发表于 2017-6-9 07:17:08 | 显示全部楼层
    学习学习,谢谢版主!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19

    主题

    1473

    帖子

    27

    蝴蝶豆

    论坛元老

    最后登录
    2021-11-17
    发表于 2017-7-20 09:36:41 | 显示全部楼层
    破总,有LAN8742A手册的吗
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-2-6 09:20
  • 签到天数: 1 天

    [LV.1]初来乍到

    1182

    主题

    4967

    帖子

    1

    蝴蝶豆

    论坛元老

    最后登录
    2020-3-17
     楼主| 发表于 2017-7-20 18:01:59 | 显示全部楼层
    队长shiwo 发表于 2017-7-20 09:36
    破总,有LAN8742A手册的吗

    是ST MCU吗  怎么没听过
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

    GMT+8, 2024-4-28 11:48 , Processed in 0.204885 second(s), 47 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表