1197|5

441

帖子

3

TA的资源

纯净的硅(高级)

楼主
 

【极海APM32F407 Tiny Board】移植LWIP协议栈 [复制链接]

 

这篇来学习下LWIP协议栈的移植,实现ping通网络。官网SDK包里面是lwip-1.4.1版本,下面移植最新版本到开发板。

 

一、下载源码:

下载最新版本的lwip源码

下载地址:http://download.savannah.nongnu.org/releases/lwip/

二、项目中添加文件

2.1、将下载的源码解压到前篇创建的项目工程文件下的Middlewares文件夹

2.2、复制arch文件

复制官网SDK下ETH例程中的arch文件到Middlewares\lwip-2.1.3文件下

2.3、复制LWIP和网卡文件

2.4、在工程中添加文件

2.4.1、添加api

2.4.2、添加core

2.4.3、添加netif

2.4.4、添加arch

2.4.5、添加网卡驱动程序

2.4.6、添加头文件

 

2.4.5、systick中断函数添加代码

2.4.6、添加文件后,编译代码,根据提示的错误修改对应的文件,这里就不列举了 。

 

三、主程序

main.c

#include "main.h"
#include "Board.h"
#include "oled.h"
#include "stdio.h"
#include "usart.h"

/** Global pointers on Rx descriptor used to transmit and receive descriptors */
extern ETH_DMADescConfig_T  *DMARxDescToGet;

/** current Ethernet LocalTime value */
volatile uint32_t ETHTimer = 0;
/** lwip network interface structure for ethernetif */
struct netif UserNetif;

/** TCP periodic Timer */
uint32_t TCPTimer = 0;
/** ARP periodic Timer */
uint32_t ARPTimer = 0;
/** MAC address */
uint8_t SetMACaddr[6] = {0,0,0,0,0,8};

int main(void)
{
	SysTick_Init();
	init_led();
	//init_i2c1();
	I2CInit();
	init_usart();
	ConfigEthernet();
	LwIP_Init();
	
//OLED_Init();
//	led2_off();
//	led3_on();

	while (1)
	{
		/** check if any packet received */
		if (ETH_ReadRxPacketSize(DMARxDescToGet))
		{
				/** process received ethernet packet */
				LwIP_Pkt_Handle();
		}
				/** handle periodic timers for LwIP */
		LwIP_Periodic_Handle(ETHTimer);
	}
}

void LwIP_Init(void)
{
	ip4_addr_t ipaddr;
	ip4_addr_t netmask;
	ip4_addr_t gw;

    /** Initializes the dynamic memory heap */
    mem_init();

    /** Initializes the memory pools */
    memp_init();

    IP4_ADDR(&ipaddr, 192, 168, 1, 22);
    IP4_ADDR(&netmask, 255, 255 , 255, 0);
    IP4_ADDR(&gw, 192, 168, 1, 1);

    /** Config MAC Address */
    ETH_ConfigMACAddress(ETH_MAC_ADDRESS0, SetMACaddr);

    /** Add a network interface to the list of lwIP netifs */
    netif_add(&UserNetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, ðernet_input);

    /** Registers the default network interface */
    netif_set_default(&UserNetif);

    /** When the netif is fully configured this function must be called */
    netif_set_up(&UserNetif);

    /** Use Com printf static IP address*/
    printf("\n  Static IP address   \r\n");
    printf("IP: %d.%d.%d.%d\r\n",192,168,1,22);
    printf("NETMASK: %d.%d.%d.%d\r\n",255,255,255,0);
    printf("Gateway: %d.%d.%d.%d\r\n",192,168,1,1);
}

/*!
 * @brief   This function received ethernet packet
 *
 * @param       None
 *
 * @retval      None
 */
void LwIP_Pkt_Handle(void)
{
  /** Read a received packet from the Ethernet buffers and send it to the lwIP for handling */
  ethernetif_input(&UserNetif);
}

/*!
 * @brief       This function LwIP periodic tasks
 *
 * @param       ETHTimer the current Ethernet Timer value
 *
 * @retval      None
 */
void LwIP_Periodic_Handle(__IO uint32_t ETHTimer)
{
#if LWIP_TCP
    /** TCP periodic process every 250 ms */
    if (ETHTimer - TCPTimer >= TCP_TMR_INTERVAL)
    {
        TCPTimer =  ETHTimer;
        tcp_tmr();
    }
#endif

    /** ARP periodic process every 5s */
    if ((ETHTimer - ARPTimer) >= ARP_TMR_INTERVAL)
    {
        ARPTimer =  ETHTimer;
        etharp_tmr();
    }
}

 

四、程序运行

4.1、连接网线到硬件

4.2、串口输出

4.3、ping网络

最新回复

  楼主能把工程代码分享一下吗?谢谢了 我今天用sdk的tcp demo,直接卡死!!! man函数进来,第一个时钟初始化过不去: [attach]702731[/attach]     详情 回复 发表于 2023-6-4 11:25
点赞 关注
 
 

回复
举报

6822

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

程序移植是门学问,跟着楼主学习移植LWIP协议栈

点评

共同学习  详情 回复 发表于 2023-5-31 09:29
 
 
 

回复

441

帖子

3

TA的资源

纯净的硅(高级)

板凳
 
Jacktang 发表于 2023-5-31 07:28 程序移植是门学问,跟着楼主学习移植LWIP协议栈

共同学习

 
 
 

回复

7044

帖子

11

TA的资源

版主

4
 
大佬,lwip学习起来难不难,如何做网络控制。
 
 
 

回复

267

帖子

0

TA的资源

一粒金砂(高级)

5
 

点赞加关注,

个人签名

gitee/casy

 
 
 

回复

267

帖子

0

TA的资源

一粒金砂(高级)

6
 

 

楼主能把工程代码分享一下吗?谢谢了

我今天用sdk的tcp demo,直接卡死!!!

man函数进来,第一个时钟初始化过不去:

 

个人签名

gitee/casy

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表