enc28j60網(wǎng)絡(luò)模塊使用an1203_第1頁
enc28j60網(wǎng)絡(luò)模塊使用an1203_第2頁
enc28j60網(wǎng)絡(luò)模塊使用an1203_第3頁
enc28j60網(wǎng)絡(luò)模塊使用an1203_第4頁
enc28j60網(wǎng)絡(luò)模塊使用an1203_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

MiniSTM32開發(fā)板上使用ALIENTEKENC28J60ALIENTEKENC28J60網(wǎng)絡(luò)模塊和uIP1.0實現(xiàn):TCP服務(wù)器、TCP客服端以及WEB服務(wù)器等三個功能。1ENC28J60uIP4本實驗(ALIENTEKMINISTM3221)ENC28J60以太網(wǎng)控制器和uIP1.0以太網(wǎng)協(xié)議棧。接下來分別介紹這兩個部分。ENC28J60是帶有行業(yè)標(biāo)準(zhǔn)串行外設(shè)接口(SerialPeripheralInterface,SPI)的獨立以太SPI的控制器的以太網(wǎng)接口。ENC28J60IEEE802.3的SPI10Mb/sLED,進(jìn)行網(wǎng)絡(luò)活8K數(shù)據(jù)接收和發(fā)送雙端口提供快速數(shù)據(jù)移動的內(nèi)部DMAENC28J60SPIENC28J60DMA、發(fā)送和接收模塊發(fā)出請求時對RAMMAC(MediumAccessControl)IEEE802.3標(biāo)準(zhǔn)的MACENC28J60還包括其他支持模塊,諸如振蕩器、片內(nèi)穩(wěn)壓器、電平變換器(提供可以接受5V電壓的I/O引腳)和系統(tǒng)控制邏輯。利用該模塊,基本上只要是個單片機(jī),就可以實現(xiàn)以太網(wǎng)連接。ALIENTEKENC28J60網(wǎng)絡(luò)模塊原理圖如圖1.1.3所示:SCK、MOSI、INT、CSV3.3。其中GNDV3.3用于給模塊供電,MISO/MOSI/SCKSPI通信,CS是片選信號,INT為中斷輸出引腳,RST為模塊復(fù)位信號。uIPuIP由瑞典計算機(jī)科學(xué)學(xué)院(網(wǎng)絡(luò)嵌入式系統(tǒng)小組)AdamDunkels開發(fā)。其源代碼由C語言編寫,并完全公開,uIP1.0版本,本指南移植和使用的版本正是此版uIP協(xié)議棧去掉了完整的TCP/IP中不常用的功能,簡化了通訊流程,但保留了網(wǎng)絡(luò)通占用的內(nèi)存數(shù)非常少,RAM客戶端),Telnet服務(wù)器,DNS主機(jī)名解析程序等。通用性強(qiáng),移植起來基本不uIP8位微控制器都使用過uIP協(xié)議棧,而uIP相當(dāng)于一個代碼庫,通過一系列的函數(shù)實現(xiàn)與底層硬件和高層應(yīng)用程序的通訊,對于整個系統(tǒng)來說它內(nèi)部的協(xié)議組是透明的,從而增加了協(xié)議的通用性。uIP協(xié)議棧與系統(tǒng)底層和高層應(yīng)用之間的關(guān)系如圖1.2.1所示:

從上圖可以看出,uIP協(xié)議棧主要提供2個函數(shù)供系統(tǒng)底層調(diào)用:uip_input當(dāng)網(wǎng)卡驅(qū)動收到一個輸入包時,將放入全局緩沖區(qū)uip_buf中,包的大小由全局變量uip_lenuip_input()函數(shù),這個函數(shù)將會根據(jù)包首部的協(xié)議處理這個包和需要時調(diào)用應(yīng)用程序。當(dāng)uip_input()返回時,一個輸出包同樣放在全局緩沖區(qū)uip_buf里,uIPuIPTCP連接都會調(diào)用uIPuip_periodic()uip_input()函數(shù)。uip_periodic()函數(shù)返回時,輸出的IP包要放到uip_buf中,供底層系統(tǒng)查詢uip_len的大小發(fā)送。由于使用TCP/IP的應(yīng)用場景很多,因此應(yīng)用程序作為單獨的模塊由用戶實現(xiàn)。uIP協(xié)C的宏命令實現(xiàn)的,主uIPUIP_APPCALL()。這樣,uIP在接受到底層傳來的數(shù)()uIPuip.h中定義,為了減少函數(shù)調(diào)用造成的額外支出,大部分接口函數(shù)以宏命令實現(xiàn)的,uIP提供的接口函數(shù)有:1,初始化uIP協(xié)議棧:uip_init()其中apps文件夾里面是uip提供的各種參考代碼,本實驗,我們主要有用到里面的webserver部分。docuipuip的官方資料。lib于初始化網(wǎng)卡(也就是我們的ENC28J60),通過這個函數(shù)實現(xiàn)網(wǎng)卡初始化。其次,是據(jù)長度返回給uip_lentapdev_send函數(shù),該函數(shù)用于向網(wǎng)卡發(fā)送一包數(shù)據(jù),將全第二步,因為uIPTCP和ARP的定時器服務(wù),因此我們需要STM32提供一個定時器做時鐘,提供10ms計時(假設(shè)clock-arch.h里面的CLOCK_CONF_SECOND100)clock-arch.cclock_timeuIP使uip-conf.hTCP最大連接數(shù)、TCP監(jiān)聽端口數(shù)、CPU大小端模式等,這個大家根據(jù)自己需要配置即可。uIPuIP和應(yīng)用程序的接口,我們必須根據(jù)uIP提那么還需要實現(xiàn)UIP_UDP_APPCALL回調(diào)函數(shù)。這個和電腦上網(wǎng)差不多,只不過我們這里是通過uip_ipaddr、uip_sethostaddr、uip_setdraddruip_setnetmask等函數(shù)實現(xiàn)。uIPWebServer就監(jiān)APPCALLuIP有本地端口本實驗功能簡介:開機(jī)檢測ENC28J60,如果檢測不成功,則提示報錯。在成功檢測12001400端口,80端口用于實現(xiàn)WEBServer功能,1200端口用TCPServer1400TCPClient功能。此時,我們在電腦瀏覽器6LED燈STM32芯片的溫度(10秒自動刷新一1400TCPClientIP地址為:61200)同開發(fā)板端發(fā)送數(shù)據(jù)到電腦的TCPClient端。按KEY1,則由開發(fā)板的TCPClient端發(fā)送數(shù)據(jù)到電腦的TCPServer端。LCD顯示當(dāng)前連接狀態(tài)。DS0、ALIENTEKENC28J60網(wǎng)絡(luò)模塊同ALIENTEKMiniSTM32開發(fā)板的ALIENTEKENC28J60網(wǎng)絡(luò)模塊的接口,我們通過杜邦線連接網(wǎng)絡(luò)模塊和開發(fā)板的相應(yīng)端口,連接關(guān)系如表2.1所示:ENC28J60uIP1.0uIP-APPuIPtimer.c這里我們改為timerx.c和timerx.h,我們還需要實現(xiàn)ENC28J60的驅(qū)動代碼,存放在HARDWARE文件夾下的ENC28J60文件夾里面。詳細(xì)的步驟我們就不一一闡述了,全部改好之后,工程如圖3.1所示:3.1移植完后,MDK則部分是我們自己實現(xiàn)的,部分是uIP提供的,其中:tapdev.c,同樣是uIP提供,用來實現(xiàn)uIP與網(wǎng)卡的接口,該文件實現(xiàn)tapdev_init、tapdev_read和tapdev_send三個重要函數(shù)。tcp_demo.c,完成UIP_APPCALLtcp_demo_appcall函數(shù)。該函數(shù)根據(jù)端口的不同,分別調(diào)用不同的appcall函數(shù),實現(xiàn)不同功能。同時該文件還實現(xiàn)了uip_logtcp_server_demo.cTCPTCP我們通過修改部分代碼,實現(xiàn)一個簡單的WEB服務(wù)器。constu8 //MAC地u8tapdev_init(void){u8 for(i=0;i<6;//指示燈狀態(tài):0x476isPHLCONLEDA(綠)=linksstatus,LEDB(紅//PHLCON:PHYLEDreturn}uint16_t{ }void{}tapdev_initENC28J60,初始化工作主要通過調(diào)用ENC28J60_Init函數(shù)實現(xiàn),該函數(shù)在enc28j60.c里面實現(xiàn),同時該函數(shù)還用于設(shè)LEDENC28J60的全部初始化工作。該函數(shù)的返回值用于判uip_buf里面,同時返回讀到的包長度(包長度一般是存放在uip_len里面的。tapdev_send函數(shù),該函數(shù)調(diào)用ENC28J60_Packet_Send函數(shù),實現(xiàn)從網(wǎng)卡(ENC28J60)發(fā)送一包數(shù)據(jù)到網(wǎng)絡(luò),數(shù)據(jù)內(nèi)容存放在uip_buf,數(shù)據(jù)長度為uip_len。void{{casecasecasedefault:}{casedefault:}}不同的appcall函數(shù),實現(xiàn)不同的服務(wù)。其中80端口用于實現(xiàn)WEB服務(wù),通過調(diào)用實現(xiàn);1400是遠(yuǎn)程端口,用于實現(xiàn)TCP客戶端,調(diào)用tcp_client_demo_appcall函數(shù)實現(xiàn)。void{structhttpd_state*sstructhttpd_statevoid{structhttpd_state*sstructhttpd_state*)&(uip_conn->appstate);//讀取連接狀態(tài)if(uip_closed()||uip_aborted()||uip_timedout())//異常處理(這里無任何處理)elseif(uip_connected())//連接成功{PSOCK_INIT(&s->sin,s->inputbuf,sizeof(s->inputbuf)-1);PSOCK_INIT(&s->sout,s->inputbuf,sizeof(s->inputbuf)-1);s->state= s->timer=0;}else{{elses->timer=0;}}else}staticvoidhandle_connection(structhttpd_state{ //處理http}出。對我們來說最重要的是handle_input函數(shù),handle_input函數(shù)代碼如下:externunsignedchardata_index_html[];//httpd-fsdata.c里面定義,htmlexternvoidget_time(u8 //LED0亮,圖標(biāo)地址 //LED1亮,圖標(biāo)地址 //LED滅,圖標(biāo)地址{char*strx;//WEBGET //"]!=== {{if(strx)//存在"LED0狀態(tài)"這個字符串{if(LED0)//LED0滅{{}}

strx=strstr((constchar*)strx,"http:");//找到"http:"字符串char*)LED_OFF_PIC_ADDR));//LED0滅圖片strncpy(strx+7,"FF0000",6);//紅色 strx=strstr((constchar*)strx,"http:");//找到"http:"字符串char*)LED0_ON_PIC_ADDR));//LED0亮圖片{if(strx)//存在"LED1狀態(tài)"這個字符串{if(LED1)//LED1滅{{}}}

strncpy(strx+24,"滅",2);//滅strx=strstr((constchar*)strx,"http:");//找到"http:"字符串char*)LED_OFF_PIC_ADDR));//LED1滅圖片strncpy(strx+7,"00FF00",6綠色strncpy(strx+24,"亮",2);//"亮"strx=strstr((constchar*)strx,"http:");//找到"http:"字符串char*)LED1_ON_PIC_ADDR));//LED1亮圖片{ }{);//}{s->inputbuf[PSOCK_DATALEN(&s->sin)-1]=0;}{PSOCK_READTO(&s->sin,{}}}作的時候,瀏覽器就會發(fā)送消息給WEB服務(wù)器,服務(wù)器根據(jù)收到的消息內(nèi)容,判斷用戶所實現(xiàn)的WEB服界面如圖3.2所示:控制DS0,DS1Get方法(科普找百度URLWEBURL的參數(shù)來相STM32URLDS0DS1的亮滅。uIPGet請求后判斷URLdata_index_html里面的部STM32溫度和RTC時間是通過刷新實現(xiàn)的,uIP每次得到來自瀏覽器的請求就會data_index_htmldata_index_html發(fā)送給瀏覽器,這里面加入了自動刷新的控制代碼,每10秒鐘刷新一次,這樣就不需要手動刷新了。sram數(shù)據(jù),data_index_html里面的數(shù)據(jù),則是通過一個工具軟件:amo的編程小工具集合V1.2.6.exe,將網(wǎng)頁源碼轉(zhuǎn)換而來,該軟件在TCP服務(wù)器appcall函數(shù):tcp_server_demo_appcallu8tcp_server_databuf[200]; u8tcp_server_databuf[200]; u8tcp_server_sta; :void{structtcp_demo_appstate*s=(structtcp_demo_appstate*)&uip_conn->appstate; if(uip_connected())tcp_server_connected();//連接成功 ({{if(uip_len>199)((u8*)uip_appdata)[199]=0;}{}{}}將需要發(fā)送的數(shù)據(jù)通過tcp_server_senddata函數(shù)發(fā)送出去。u8tcp_client_databuf[200]; u8tcp_client_databuf[200]; u8tcp_client_sta; :void{structtcp_demo_appstate*s=(structtcp_demo_appstate*)&uip_conn->appstate; if(uip_connected())tcp_client_connected();//連接成功 if{{if(uip_len>199)((u8*)uip_appdata)[199]=0;}{}{}}時候,將需要發(fā)送的數(shù)據(jù)通過tcp_client_senddata函數(shù)發(fā)送出去。uIPclock-archclock_timetimerx.c里面初始化6clock_time10ms1,這里代碼就不貼出來了,請大家查看光盤源碼(ALIENTEKMiniSTM32擴(kuò)展實驗21)。#defineBUF((structuip_eth_hdr*)&uip_buf[0])intmain(void){u8key;u8u8tcp_server_tsta=0XFF;u8tcp_client_tsta=0XFF;uip_ipaddr_tipaddr; //初始化ADC //初始化USMART LCD_ShowString(60,10,200,16,16,"MiniSTM32");LCD_ShowString(60,30,200,16,16,"ENC28J60TEST"); { //uIP初始化LCD_ShowString(60,70,200,16,16,"KEY0:ServerSendMsg");LCD_ShowString(60,90,200,16,16,"KEY1:ClientSendMsg");LCD_ShowString(30,200,200,16,16,"TCPRX:");LCD_ShowString(30,220,200,16,16,"TCPTX:");LCD_ShowString(30,270,200,16,16,"TCPRX:");LCD_ShowString(30,290,200,16,16,"TCPTX:"););//uip_ipaddr(ipaddr,192,168,1,1);//IP地址(IP地址) //監(jiān)聽80端口,用于WebServer while(1){{ { }}if(key==1KEY0按下,TCPServer{ { }}{ { }}if(key==2KEY1按下,TCPClient{ {sprintf((char*)tcp_client_databuf,"TCPClientOK%d\r\n",tcnt); }}}}voiduip_polling(void){u8staticu8timer_ok=0;{timer_ok= }uip_len=tapdev_read();//IP包,得到數(shù)據(jù)長度.uip_len在uip.c {//處理IP數(shù)據(jù)包(只有校驗通過的IP包才會被接收){ //uip_buf,uip_len(2個全局變量){}({//需要發(fā)送的數(shù)據(jù)在uip_buf,uip_len(2個全局變量)}}else { { ,{}}#ifUIP_UDP{ ,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論