STM32F4-DISCO 学习之一步一步修改官方库移植LWIP

/ 0评 / 0

之前使用针对Discovery的移植,实在版本太老,LWIP是6年前的,但是EVAL的是新的,所以,可以尝试移植EVAL的.详细的文件就是STSW-STM32070.得到的文件列表.

QQ截图20150929191428

首先删掉_htmlresc文件夹,这个文件夹只是各种LOGO,没什么用.

QQ截图20150929191428

打开Project文件夹,有FreeRTOS的和裸机的移植示例,我们不需要,直接删除.然后我们打开到httpserver目录,着手移植这个:

QQ截图20150929191428

高亮的都是别的IDE的文件,可以删掉.

QQ截图20150929191428

打开MDK工程:

QQ截图20150929191428

进行编译后有三个警告,第一个是etherntif.c最后没换行.

QQ截图20150929191428

然后是lwip中tcp_out.c这个文件,有个变量没用,这个不重要,可能是LWIP设计问题,先忽略.然后打开main.h,把MII接口改成RMII接口.

QQ截图20150929191428

然后我们不要LCD,但是要DHCP,也不要串口调试.

QQ截图20150929191428

然后把该文件删掉:

QQ截图20150929191428

删除整个STM324xG_EVAL分组.

QQ截图20150929191428

然后打开stm32f4x7_eth_bsp.h删掉如下部分,用不到.

QQ截图20150929191428

然后删除Stm32f4x7_eth_bsp.c的LCD部分.

QQ截图20150929191428

还有netconf.c的位置:

QQ截图20150929191428

然后我们把晶振频率也改一下,stm32f4xx.h上,我们外部是16MHz,大多数情况下还可能是8MHz.

QQ截图20150929191428

然后修改system_stm32f4xx.c配置文件,来符合我们的时钟.

QQ截图20150929191428

把器件修改成我们要的:

 QQ截图20150929191428然后,还要修改以太网驱动,先是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没有,果断删掉.

QQ截图20150929191428

当然也无法初始化,删掉.

QQ截图20150929191428

也不能翻转LED,删掉.

QQ截图20150929191428

这时候只剩下一个警告了.

QQ截图20150929191428

因为这个变量是LCD和串口调试用的,可以加条件编译,也可以直接删掉,我选择了直接删掉.再次编译.

QQ截图20150929191428

移植结果:

STM32F4x7_ETH_LwIP_V1.1.0_Discovery

至此,大致移植是完成了,然后有待精简.说白一些就是把用不到的文件统统删掉.然后需要验证功能.

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注