(GCC)从零开始的ETH开发--STM32F407ZGTX

开发环境:

windows10

软件:

STM32CubeMX最新版本

gcc工具链

vscode 

硬件:

STM32F407ZGT6开发板,ETH原理图:

​ 

根据硬件可知MAC和PHY之间的接口类型为RMII,且PHY使用的外部晶振,这种情况下不需要单片机给PHY芯片提供时钟,而是由PHY的REF-CLK引脚给单片机的MAC控制器提供一个时钟用于同步,此时单片机MAC控制器和PHY芯片的时钟其实都来自于PHY的外部晶振。(还有一种方式是PHY芯片不使用外部晶振,而是单片机给它提供时钟)

 1.STM32CubeMX生成代码

第一步首先用CubeMX生成开箱即用的代码,验证硬件功能是正常的。

打开cubemx,新建工程:

选择自己使用的芯片,双击进入:

  

先配置系统时钟,选择使用外部时钟HSE,类型是石英或者陶瓷晶振:

  

再配置sw调试接口:

  

然后可以配置时钟:

  

  

只需修改HSE的频率和想要设置的主频大小,回车后会自动配置。

接着配置引脚:

在右下角输入搜索的引脚号,对应的引脚就会闪烁,然后点击引脚选择功能:

  根据自己的原理图依次设置完引脚后, 注意复位引脚选择output就可以了:

 设置完成后可以在GPIO里查看:

此时因为ETH功能还没使能,右侧引脚图上的引脚都还是黄色:

 当把ETH使能后引脚才会变成绿色:

设置完成后可以看到右边引脚视图的引脚都变成绿色:

在ETH的configuration里可以设置MAC地址,接收缓存的大小和接收模式,笔者建议都先不用改,注意提示,如果使用polling mode是不支持freertos的:

我们一开始测试先不用freertos,仅仅使用LWIP即可:

因为这里使用的芯片是LAN8720,所以直接选择了LAN8742,注意如果这里不选的话生成的文件中会少ETH引脚的初始化,所以无论你用的什么PHY芯片都可以先选择上。

再有就是一开始为了测试可以先把dhcp关掉,我们直接用静态IP测试:

到这一步如果引脚配置没问题,ETH基本功能已经可以使用了,剩下的就是生成代码:

最后点击右上角的生成:

使用vscode打开代码,生成的代码需要修改两个地方:

1.把Lwip处理添加到main的while循环:

注意,这个函数其实只有在不使用任何RTOS的时候才添加。

2.添加对PHY芯片的复位

因为复位引脚是单独的一个输出GPIO,并不属于ETH标准接口的一部分,所以需要我们自己设置和添加:

修改完成后,直接在终端里make,这里官方生成的工程有一个bug,在makefile里,有一个文件被添加了两次,所以会导致报一个重复定义的错误:

只需要删除掉其中一个就可以(如果没有这个bug请跳过):

最终编译完成结果是:

还要注意一点,如果单单修改头文件后再次make并不会重新编译,此时需要重新make clean后再make,但是windows下的powershell的rm指令和ubuntu不太一样,所以make clean会报错,这时可以手动在终端输入rm ./build/即可。build文件夹是makefile默认指定的生成文件夹。

2.代码下载与调试

vscode里面下载debug用的插件:

创建启动文件:

选择刚才下载的插件:

在打开的文件中输入:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [  
        {
            "name": "Cortex Debug-jlink",
            "cwd": "${workspaceRoot}/",
            "executable": "${workspaceFolder}/build/STM32F407ZGT6.elf",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "jlink",
            "device": "STM32F407ZG",
            "interface": "swd",
            "runToEntryPoint": "main",
            "showDevDebugTimestamps": true,
        },
        {
            "name": "Cortex Debug-stlink",
            "cwd": "${workspaceRoot}/",
            "executable": "${workspaceFolder}/build/STM32F407ZGT6.elf",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "openocd",
            "device": "STM32F407ZG",
            "interface": "swd",
            "configFiles": [
                "interface/stlink-v2.cfg",
                "target/stm32f4x.cfg",
            ],
            "runToEntryPoint": "main",
            "showDevDebugTimestamps": true,
        }
    ]
}

注意根据实际修改:

启动后会停在main函数,直接点击继续运行即可,然后使用其他设备设置在同个网段,这里407设置的IP是192.168.1.123,外接设备笔者设置的是192.168.1.120,ping的结果如下:

到这里,我们可以判断开发板的硬件是正常的。 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值