开发环境:

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的结果如下:

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

好文链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。