用戰艦的板子做的一個網絡通信
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "lcd.h"
- #include "rtc.h"
- #include "beep.h"
- #include "tsensor.h"
- #include "usart.h"
- #include "timer.h"
- #include "sram.h"
- #include "malloc.h"
- #include "string.h"
- #include "usmart.h"
- #include "dm9000.h"
- #include "lwip/netif.h"
- #include "lwip_comm.h"
- #include "lwipopts.h"
- #include "udp_demo.h"
- #include "tcp_client_demo.h"
- #include "tcp_server_demo.h"
- #include "httpd.h"
- /*ALIENTEK為LWIP學習專門編寫手冊《ALIENTEK STM32F1 LWIP使用教程.pdf》,詳細說明請參考手冊。*/
-
- extern u8 udp_demo_flag; //UDP 測試全局狀態標記變量
- //加載UI
- //mode:
- //bit0:0,不加載;1,加載前半部分UI
- //bit1:0,不加載;1,加載后半部分UI
- void lwip_test_ui(u8 mode)
- {
- u8 speed;
- u8 buf[30];
- POINT_COLOR=RED;
- if(mode&1<<0)
- {
- LCD_Fill(30,30,lcddev.width,110,WHITE); //清除顯示
- LCD_ShowString(30,30,200,16,16,"WarShip STM32F1");
- LCD_ShowString(30,50,200,16,16,"Ethernet lwIP Test");
- LCD_ShowString(30,70,200,16,16,"ATOM@ALIENTEK");
- LCD_ShowString(30,90,200,16,16,"2015/3/21");
- }
- if(mode&1<<1)
- {
- LCD_Fill(30,110,lcddev.width,lcddev.height,WHITE); //清除顯示
- LCD_ShowString(30,110,200,16,16,"lwIP Init Successed");
- if(lwipdev.dhcpstatus==2)sprintf((char*)buf,"DHCP IP:%d.%d.%d.%d",lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]);//打印動態IP地址
- else sprintf((char*)buf,"Static IP:%d.%d.%d.%d",lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]);//打印靜態IP地址
- LCD_ShowString(30,130,210,16,16,buf);
- speed=DM9000_Get_SpeedAndDuplex();//得到網速
- if(speed&1<<1)LCD_ShowString(30,150,200,16,16,"Ethernet Speed:10M");
- else LCD_ShowString(30,150,200,16,16,"Ethernet Speed:100M");
- LCD_ShowString(30,170,200,16,16,"KEY0:TCP Server Test");
- LCD_ShowString(30,190,200,16,16,"KEY1:TCP Client Test");
- LCD_ShowString(30,210,200,16,16,"KEY2:UDP Test");
- }
- }
- int main(void)
- {
- u8 t;
- u8 key;
- delay_init(); //延時函數初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
- uart_init(115200); //串口初始化為9600
- LED_Init(); //LED端口初始化
- LCD_Init(); //初始化LCD
- KEY_Init(); //初始化按鍵
- BEEP_Init(); //蜂鳴器初始化
- RTC_Init(); //RTC初始化
- T_Adc_Init(); //ADC初始化
- TIM3_Int_Init(999,719);//定時器3頻率為100hz
- usmart_dev.init(72); //初始化USMART
- FSMC_SRAM_Init(); //初始化外部SRAM
- my_mem_init(SRAMIN); //初始化內部內存池
- my_mem_init(SRAMEX); //初始化外部內存池
- POINT_COLOR = RED;
- lwip_test_ui(1); //加載前半部分UI
- while(lwip_comm_init()) //lwip初始化
- {
- LCD_ShowString(30,110,200,20,16,"LWIP Init Falied!");
- delay_ms(1200);
- LCD_Fill(30,110,230,130,WHITE); //清除顯示
- LCD_ShowString(30,110,200,16,16,"Retrying...");
- }
- LCD_ShowString(30,110,200,20,16,"LWIP Init Success!");
- LCD_ShowString(30,130,200,16,16,"DHCP IP configing...");
- #if LWIP_DHCP //使用DHCP
- while((lwipdev.dhcpstatus!=2)&&(lwipdev.dhcpstatus!=0XFF))//等待DHCP獲取成功/超時溢出
- {
- lwip_periodic_handle(); //LWIP內核需要定時處理的函數
- lwip_pkt_handle();
- }
- #endif
- lwip_test_ui(2); //加載后半部分UI
- httpd_init(); //Web Server模式
- while(1)
- {
- key=KEY_Scan(0);
- switch(key)
- {
- case KEY0_PRES://TCP Server模式
- tcp_server_test();
- lwip_test_ui(3);//重新加載UI
- break;
- case KEY1_PRES://TCP Client模式
- tcp_client_test();
- lwip_test_ui(3);//重新加載UI
- break;
- case KEY2_PRES://UDP模式
- udp_demo_test();
- lwip_test_ui(3);//重新加載UI
- break;
- }
- lwip_periodic_handle();
- lwip_pkt_handle();
- delay_ms(2);
- t++;
- if(t==100)LCD_ShowString(30,230,200,16,16,"Please choose a mode!");
- if(t==200)
- {
- t=0;
- LCD_Fill(30,230,230,230+16,WHITE);//清除顯示
- LED0=!LED0;
- }
- }
- }
復制代碼
所有資料51hei提供下載:
實驗50 網絡通信實驗.rar
(2.06 MB, 下載次數: 5)
2018-6-30 02:45 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|