| 银杏科技有限公司旗下技术文档发布平台 | |||
| 技术支持电话 | 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,使用外部时钟源
3. 配置RCC,使用外部时钟源
 4. 配置调试引脚
4. 配置调试引脚
 5. 将PA10,PB7,PB8设置为GPIO_Output
5. 将PA10,PB7,PB8设置为GPIO_Output
 6. 引脚模式配置
6. 引脚模式配置
 
 7. 配置以太网
7. 配置以太网
 
 
 
 8. 时钟设置,选择外部高速时钟源,配置为最大主频
8. 时钟设置,选择外部高速时钟源,配置为最大主频
 9. 工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可  IDE我们使用的是 MDK5.27
9. 工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可  IDE我们使用的是 MDK5.27
 10. 点击Code Generator,进行进一步配置
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); }