STM32F4-LAN8720A的移植方法

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1/8ST中stsw-stm32070的网络例子——将DP83848CVV修改为LAN8720A在main.h中将LCD注释掉//#defineUSE_LCD/*enableLCD*/Stm32f4的时钟配置首先在startup_stm32f40xx.s中找到芯片上电复位之后做的动作,将进行SystemInitSystemInit()函数在system_stm32f4xx.c中进行了编写同时SystemInit()调用SetSysClock(),也在system_stm32f4xx.c中2/8SetSysClock()配置了PLL的时钟频率,一般都配置为168M,晶振不同的时候只要配置PLL_M的值即可,8MHz晶振就将PLL_M定义为8,25MHz的时候定义为25;当然,SetSysClock()中还进行了时钟源的选择,HSE还是HIS什么的,还有HCLK、PCLK2、PCLK1等,可以查看具体的代码。时钟配置完成之后,进入main()函数,如前面所介绍,进入main()之前,时钟已经配置为168MHz了。这里有NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);这个函数,看上去是中断优先级的设置,暂且没有去管它,有兴趣的时候可以看下,应该不难;因为这里只是单纯的设置LAN8720A来替代开发板上原先的DP83848CVV,所以主要设置都在ETH_BSP_Config()中,这里设置LAN8720A成功之后,就会去设置LwIP,就不是物理层上的工作了,都是IOS其它传输层、应用层等层的工作。3/8我们先看看ETH_BSP_Config()中是做了什么工作,这个函数的内容在stm32f4x7_eth_bsp.c中,看文件名bsp就是和最底层外设相关的。函数首先进行了系统的一个定时器的滴答设置,这个定时器一般给操作系统使用。这里单纯做为网络设置时候的一些延时使用,和delay差不多,只是使用的是系统定时器这个特殊定时器。我们不必管它,不操作。接下来是GPIO口的设置因为LAN8720A是一个RMIIPHY芯片,它自己没有MAC层的功能,网络中的MAC层集成在STM32F4芯片内部,MAC层有具体的硬件信号脚,这里直接参考LAN8720A的参考电路中的RMII接口连接到STM32F4的RMII接口就行了,4/8电这里LAN8720A的复位直接连接到STM32F4的复位就可以,都是低电平复位。关于voidETH_GPIO_Config(void)这个函数也要说明一下,ST的参考板使用的是MII模式,而LAN8720A只有RMII模式,所以需要做些修改,首先在main.h中修改如下同时可以修改STM32F4上电之后的IP5/8虽然MCO没有使用,但是还是定义在这里,因为后面的其他引脚的初始化都用了GPIO_InitStructure这个结构体,其他接下来的就没有什么了,依照功能修改GPIO完成之后进行MAC层相关的设置,使用DMA功能在ETH_MACDMA_Config()函数中,首先设置为百兆自动连接方式,其它不必修改完了进入ETH_Init()函数进行MAC/DMA的设置DP83848_PHY_ADDRESS按照LAN8720A的硬件设置IP地址,硬件为0地址在ETH_Init()函数中找到和PHY芯片DP83848CVV相关的寄存器设置,改为LAN8720A相关的,其余在STM32F4内部MAC相关的寄存器不必动,设置PHY_BCR6/8WritePHYRegister()或者ReadPHYRegister()都是通过标准的SMI接口来进行的,和IIC、SPI都像类似,硬件会自动封装好数据包的头尾。接口是下面两根引脚MDIO、MDC原先的将这个两个定义为了0、1寄存器,和LAN8720A中的地址一致,所以复位设置不用修改因为设置为了百兆自动连接,所以进入if这个条件中检查网口是否已经连接好了,局域网,只要RJ45用网线连接到其他网口就可以,因为这里LAN8720A暂时没有使用中断功能,所以只能在上电之前保证网线已经连接好。因为PHY_SR这个寄存器,在LAN8720A中没有,所以最好注释掉,直接按照LAN8720A的硬件MODE[2:0]来再写一次寄存器7/8到这里后面的都不必再修改了。原先DP83848CVV使用了中断方式,只要网线连接就会有中断产生进入如下函数中在stm32f4xx_it.c中,就是一个普通的EXIT中断因为Eth_Link_ITHandler(DP83848_PHY_ADDRESS);调用到了LwIP相关的函数netif_set_link_up(),所以在不使用中断的时候,确保netif_set_link_up()在网线连接的时候调用一次8/8在进入while(1)中先进行LwIP相关的函数调用修该到这里就结束了,LAN8720A可以正常工作,当然这里只是验证了LAN8720A可以正常使用,但是具体的用法还要更多的修改、开发。

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功