银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-9-30 | fmj | 初次建立 |
1. 在主界面选择File–>New Project或者直接点击ACCEE TO MCU SELECTOR
2. 出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置在搜索栏的下面,提供的各种查找方式,可以选择芯片内核,型号,等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32H750IBKx。 3. 配置RCC,使用外部时钟源 4. 配置调试引脚 5. 将PA10,PB7,PB8设置为GPIO_Output 6. 引脚模式配置 7. 配置以太网 8. 时钟设置,选择外部高速时钟源,配置为最大主频 9. 工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 IDE我们使用的是 MDK5.27 10. 点击Code Generator,进行进一步配置
1.主函数
//LWIP初始化 NETMPU_Config(); lwip.initialize(); eth_tcpc.initialize(); while (1) { if((cnt ++ / 800000) % 2){ LED_RED_ON; }else{ LED_RED_OFF; } lwip.periodic_handle(); //tcp server test //支持热插拔 if(_second_flag == 1){ _second_flag = 0; if(lan8720.GetLinkState() == LAN8720_STATUS_LINK_DOWN){ eth_tcps.first_flag = 0; if(eth_tcps.first_flag_1 ++ == 0){ eth_tcps.connection_close(eth_tcps.tcppcbnew,NUL L); eth_tcps.connection_close(eth_tcps.tcppcbconn,NULL); eth_tcps.remove_timewait(); } }else{ eth_tcps.first_flag_1 = 0; if(eth_tcps.first_flag ++ == 0){ eth_tcps.initialize(); } } } if(eth_tcps.receive_ok_flag == 1){ eth_tcps.receive_ok_flag = 0; eth_tcps.send_data(eth_tcps.tcppcbnew); } }
2.LwIP初始化
unsigned char initialize(void) { unsigned char retry = 0; Struct netif *Netif_Init_Flag;//调用netif_add()函数时的返回值,用于判断网络初始化是否成功 struct ip_addr ipaddr; //ip地址 struct ip_addr netmask; //子网掩码 struct ip_addr gw; //默认网关 while(lan8720.initialize()){ //初始化LAN8720,如果失败的话就重试5次 retry++; if(retry > 5){ retry = 0; return 3; } //LAN8720初始化失败 } lwip_init(); //初始化LWIP内核 IP4_ADDR(&ipaddr,lan8720.ip[0],lan8720.ip[1],lan8720.ip[2],lan8720.ip[3]); IP4_ADDR(&netmask,lan8720.sub[0],lan8720.sub[1] ,lan8720.sub[2],lan8720.sub[3]); IP4_ADDR(&gw,lan8720.gw[0],lan8720.gw[1],lan8720.gw[2],lan8720.gw[3]); Netif_Init_Flag=netif_add(&lwip_netif,&ipaddr,&netmask,&gw,NULL,ðernetif_init,ðernet_input); //向网卡列表中添加一个网口 if(Netif_Init_Flag==NULL){ return 4; //网卡添加失败 }else{ //网口添加成功后,设置netif为默认值,并且打开netif网口 netif_set_default(&lwip_netif);//设置netif为默认网口 netif_set_up(&lwip_netif); //打开netif网口 } return 0;//操作OK }
3.eth_tcps初始化
void initialize(void) { eth_tcps.tcpc_pcb = tcp_new(); //该函数简单的调用tcp_alloc函数为一个谅解分配一个TCP控制块tcp_pcb。tcp_alloc函数首先为新的tcp_pcb分配内存空间,若内存空间不足,则函数会释放出新的pcb空间。 tcp_bind(eth_tcps.tcppcbnew,IP_ADDR_ANY,TCP_SERVER_PORT); eth_tcps.tcppcbconn=tcp_listen(eth_tcps.tcppcbnew); tcp_accept(eth_tcps.tcppcbconn,tcp_server_accept); }