使用正点原子的探索者开发板,版本是V3.4,即最新版,板载的PHY为国产的YT8512C。
使用STM32CubeMx 直接生成工程,PHY硬件平台选择LAN8742。
其中STM32CubeMx为最新的6.11,Cube包使用的是V1.28,(与1.26之前的版本的不同是,V1.27版本之后,需要自己提供MDC时钟,开启自动协商等)
STM32CubeMx配置十分简单,傻瓜式配置就好,这里不阐述。
代码生成后,核心是修改PHY的特殊状态寄存器的值和速度,双工状态的值。不同的PHY芯片这些值都可能不一样。
需要修改的地方:
1)lan8742.c文件,int32_t LAN8742_GetLinkState(lan8742_Object_t *pObj) 函数。
此函数是获取连接状态的函数,需要读取特殊状态寄存器,修改如下图:
主要为获取连接状态,速度,和双工状态。
2)在网卡驱动文件ethernetif.c文件,static void low_level_init(struct netif *netif)函数中,添加开启自协商的功能。
这里的延时较大,是保证初始化和自协商必定成功,可以按照自己的需求更改。
3)lan8742.c文件 int32_t LAN8742_Init(lan8742_Object_t *pObj)函数,此函数是初始化LAN8742,需要更改:
至此,可以打开cmd命令行,此时,理应可以ping通开发板。
可以ping通后,接下来可以进行UDP应用实验:
新建一个UDP线程,线程内容为:
这里使用的是静态IP,需要关闭DHCP。开发板IP是192.168.10.100,PC端IP是192.168.10.200..
使用网络调试助手发送数据到开发板,开发板会回送所收数据到网络调试助手:
非常简单的一个实验
补充一点:在初始化ETH IO复用的同时,最好硬件复位一下PHY