之前使用针对Discovery的移植,实在版本太老,LWIP是6年前的,但是EVAL的是新的,所以,可以尝试移植EVAL的.详细的文件就是STSW-STM32070.得到的文件列表.
首先删掉_htmlresc文件夹,这个文件夹只是各种LOGO,没什么用.
打开Project文件夹,有FreeRTOS的和裸机的移植示例,我们不需要,直接删除.然后我们打开到httpserver目录,着手移植这个:
高亮的都是别的IDE的文件,可以删掉.
打开MDK工程:
进行编译后有三个警告,第一个是etherntif.c最后没换行.
然后是lwip中tcp_out.c这个文件,有个变量没用,这个不重要,可能是LWIP设计问题,先忽略.然后打开main.h,把MII接口改成RMII接口.
然后我们不要LCD,但是要DHCP,也不要串口调试.
然后把该文件删掉:
删除整个STM324xG_EVAL分组.
然后打开stm32f4x7_eth_bsp.h删掉如下部分,用不到.
然后删除Stm32f4x7_eth_bsp.c的LCD部分.
还有netconf.c的位置:
然后我们把晶振频率也改一下,stm32f4xx.h上,我们外部是16MHz,大多数情况下还可能是8MHz.
然后修改system_stm32f4xx.c配置文件,来符合我们的时钟.
把器件修改成我们要的:
然后,还要修改以太网驱动,先是IO不一样.把如下函数替换原来的ETH_GPIO_Config.
void ETH_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOs clocks */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOI | RCC_AHB1Periph_GPIOG | RCC_AHB1Periph_GPIOH | RCC_AHB1Periph_GPIOF, ENABLE); /* Enable SYSCFG clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* Configure MCO (PA8) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; GPIO_Init(GPIOA, &GPIO_InitStructure); /* MII/RMII Media interface selection --------------------------------------*/ #ifdef MII_MODE /* Mode MII with STM324xG-EVAL */ #ifdef PHY_CLOCK_MCO /* Output HSE clock (25MHz) on MCO pin (PA8) to clock the PHY */ RCC_MCO1Config(RCC_MCO1Source_HSE, RCC_MCO1Div_1); #endif /* PHY_CLOCK_MCO */ SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_MII); #elif defined RMII_MODE /* Mode RMII with STM324xG-EVAL */ SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_RMII); #endif /* Ethernet pins configuration ************************************************/ /* ETH_MDIO -------------------------> PA2 ETH_MDC --------------------------> PC1 ETH_PPS_OUT ----------------------> PB5 ETH_MII_CRS ----------------------> PH2 ETH_MII_COL ----------------------> PH3 ETH_MII_RX_ER --------------------> PI10 ETH_MII_RXD2 ---------------------> PH6 ETH_MII_RXD3 ---------------------> PH7 ETH_MII_TX_CLK -------------------> PC3 ETH_MII_TXD2 ---------------------> PC2 ETH_MII_TXD3 ---------------------> PB8 ETH_MII_RX_CLK/ETH_RMII_REF_CLK---> PA1 ETH_MII_RX_DV/ETH_RMII_CRS_DV ----> PA7 ETH_MII_RXD0/ETH_RMII_RXD0 -------> PC4 ETH_MII_RXD1/ETH_RMII_RXD1 -------> PC5 ETH_MII_TX_EN/ETH_RMII_TX_EN -----> PG11 ETH_MII_TXD0/ETH_RMII_TXD0 -------> PG13 ETH_MII_TXD1/ETH_RMII_TXD1 -------> PG14 */ /* Configure PA1, PA2 and PA7 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_7; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH); /* Configure PB11 and PB12 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOB, GPIO_PinSource12, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_ETH); /* Configure PC1, PC2, PC3, PC4 and PC5 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_ETH); /* Configure PG11, PG14 and PG13 */ /* GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14; GPIO_Init(GPIOG, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOG, GPIO_PinSource11, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOG, GPIO_PinSource13, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOG, GPIO_PinSource14, GPIO_AF_ETH); */ /* Configure PH2, PH3, PH6, PH7 */ /* GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_Init(GPIOH, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOH, GPIO_PinSource2, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOH, GPIO_PinSource3, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOH, GPIO_PinSource6, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOH, GPIO_PinSource7, GPIO_AF_ETH); */ /* Configure PI10 */ /* GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_Init(GPIOI, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOI, GPIO_PinSource10, GPIO_AF_ETH); */ }
这时候进行编译,等着来了一堆错误.11个错误,10个警告.首先是LED没有,果断删掉.
当然也无法初始化,删掉.
也不能翻转LED,删掉.
这时候只剩下一个警告了.
因为这个变量是LCD和串口调试用的,可以加条件编译,也可以直接删掉,我选择了直接删掉.再次编译.
移植结果:
STM32F4x7_ETH_LwIP_V1.1.0_Discovery
至此,大致移植是完成了,然后有待精简.说白一些就是把用不到的文件统统删掉.然后需要验证功能.