基于STM32F103的網(wǎng)絡(luò)溫度報警器物聯(lián)網(wǎng)全解_第1頁
基于STM32F103的網(wǎng)絡(luò)溫度報警器物聯(lián)網(wǎng)全解_第2頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、日Zl旨9由£10乙:IH闢WH3»柵:MSOldZSNISzEK:號普卻44S8MWVKWU6BSOldZSNIS=EK目錄:1.引言12.利用普通二極管PN結(jié)測試環(huán)境溫度原理23.器件的選擇和芯片的介紹44.UC/OS系統(tǒng)移植65.文件系統(tǒng)的移植與文件系統(tǒng)基本函數(shù)的功能166.Uip及socket實現(xiàn)方法2721. 引言近年來隨著科技的飛速發(fā)展,嵌入式的應(yīng)用正在不斷深入,同時帶動傳統(tǒng)控制檢測技術(shù)日益更新。在實時檢測和自動控制的嵌入式應(yīng)用系統(tǒng)中,嵌入式往往作為一個核心部件來使用,僅嵌入式方面知識是不夠的,還應(yīng)根據(jù)具體硬件結(jié)構(gòu)軟硬件結(jié)合,加以完善。本系統(tǒng)使用STM32F10

2、3實現(xiàn)了接收由上位機通過TCP協(xié)議發(fā)出的溫度報警閾值信號,并存于SD片卡中。單片機利用普通二極管的PN結(jié)測試環(huán)境溫度,每30s采集一次,將采集到的溫度信息補充上時間(時、分、秒、毫秒)標(biāo)注存儲在存儲芯片中。并將報警時的溫度值與當(dāng)前時間的溫度進行比較,當(dāng)前溫度大于閥值溫度時,通過發(fā)光二極管或蜂鳴器報警。上位機通過TCP,向單片機發(fā)送Readnfo”命令后,單片機能將SD卡中存儲的所有數(shù)據(jù)發(fā)到PC機的串口助手中;數(shù)據(jù)格式美觀、易懂。本系統(tǒng)采用普通二極管PN節(jié)的溫度特性來測量環(huán)境溫度不失為一種低成本而又容易實現(xiàn)的環(huán)境溫度測量方式。使用STM32自帶的ADC模塊進一步降低了成本和設(shè)計難度。采用大容量存

3、儲芯片可以長時采集環(huán)境數(shù)據(jù),并且在采集到的溫度補充上時間信息使數(shù)據(jù)更加可信,同時移植了文件系統(tǒng)方便文件在WINDOWS下的讀取和處理。本系統(tǒng)采用了無線傳輸?shù)姆绞脚浜峡煽康碾娫丛O(shè)備或太陽能設(shè)備可以在室外持續(xù)的傳輸回溫度信息或其他的氣象數(shù)據(jù)(需配合適當(dāng)?shù)膫鞲衅鳎?,減少了人工成本,并且更加適應(yīng)于野外大規(guī)模投放接點。82. 利用普通二極管PN結(jié)測試環(huán)境溫度原理.溫度是表示物體或環(huán)境冷熱程度的一種物理量而溫度傳感器是一種能將溫度變化轉(zhuǎn)換成電量變化的元器件。由于二極管制造工藝的特殊性,我們可以利用二極管的伏安特性來測量環(huán)境的溫度,它的伏安特性如下圖0“0.24耳心啟厲出.dLJ1+np/V"J;

4、-4-b-S眾所周知,將PN結(jié)用外殼封裝起來,并加上電極引線就構(gòu)成了半導(dǎo)體二極管,即所謂的二極管。由P區(qū)引出的電極為陽極,由N區(qū)引出的電極為陰極,如下圖所示il-'H(CHW)(*橇眼眼094-3二桅管的F5E結(jié)與電路田理苻號b.)也HiRi題軒號溫度對二極管的性能有較大的影響,溫度升高時,二極管的正向壓降將減小,每增加1C,正向壓降減小約2mV,因此可以使用這一特性來測量環(huán)境溫度。由半導(dǎo)體理論可以得出,PN結(jié)所加端電壓u與流過它的電流i的關(guān)系為:/=I3-尹1/其中,Is為反向飽和電流,對于硅材料來說,Is約為10pA;q為電子的電量口=1.6*10的-9次方庫倫;k是玻耳茨曼常數(shù),

5、k=1.38*10的-23次方J/K;T為絕對溫度,kT/q可以用UT來代替,常溫下,即T=300K時,UT約為26mV。對于足夠大的電壓,二極管方程可以近似寫成那么,二極管兩端的電壓可以推導(dǎo)出為:因此溫度的公式為:3. 器件的選擇和芯片的介紹本系統(tǒng)采用了ST公司和高性能微控制一一STM32F130ZET6該微控制器具有512KROM以及62KRAM足以滿足該項目的需求。本系統(tǒng)使用到的模塊有:ENC28J60模塊,0.96'OLED模塊,SD卡模塊,以及2個無線模塊和USB-TTL模塊。為了滿足這些模塊的供電需求另外自己用洞洞板做了AMS1117的穩(wěn)壓模塊,以及采用德州儀器公司的TPS

6、7333穩(wěn)壓芯片制作了穩(wěn)壓模塊為無線模塊提供穩(wěn)定可靠的電源使數(shù)據(jù)的發(fā)送和接收更加穩(wěn)定。AMS1117系列穩(wěn)壓芯片有可調(diào)版與多種固定電壓版,設(shè)計用于提供1A輸出電流且工作壓差可低至1V。在最大輸出電流時,AMS1117器件的壓差保證最大不超過1.3V,并隨負載電流的減小而逐漸降低。本系統(tǒng)采用的是輸出3.3v的固定電壓版本。電路圖如下:TPS7333是由德州儀器公司研發(fā)生產(chǎn)的單通道線性穩(wěn)壓芯片具有單輸出LDO、500mA、固定電壓(3.3V)、集成SVS、低靜態(tài)電流,性能十分穩(wěn)定,輸出電壓紋波低。應(yīng)用電路比較簡單,電路如下:V|INRESETINSENSEINOUTENOUTGNDTPS73xxP

7、Wt893250kGCSR=1QToSystemR&s-et1ZFtTPS7325,TPS7330,TPS7333,TPS7348,TPS7350(fxed-voltageoptions)HCapacitorselectionisnontrivial.Seeapplicationinformationsectionford-etails.Figured,lypicalApplicationConfiguration4.UC/OS系統(tǒng)移植uC/OS是一個微型的實時操作系統(tǒng),包括了一個操作系統(tǒng)最基本的一些特性,如任務(wù)調(diào)度、任務(wù)通信、內(nèi)存管理、中斷管理、定時管理等。而且這是一個代碼完全開放的

8、實時操作系統(tǒng),簡單明了的結(jié)構(gòu)和嚴(yán)謹?shù)拇a風(fēng)格,非常適合初涉嵌入式操作系統(tǒng)的人士學(xué)習(xí)。很多人在學(xué)習(xí)STM32中,都想親自移植一下uC/OS,而不是總是用別人已經(jīng)移植好的。在我學(xué)習(xí)uC/OS的過程中,查找了很多資料,也看過很多關(guān)于如何移植uC/OS到STM32處理器上的教程,但都不盡人意,主要是因為是時間比較趕,無法靜下心開好房學(xué)習(xí),在一個月時間內(nèi)完成STM32的學(xué)習(xí)以及UIP、文件系統(tǒng)的移植還是比較辛苦和困難的。1首先需要從官網(wǎng)上下載UC/0S的源碼,并且選擇STM32F103ZET6,由于官方?jīng)]有公布KEIL版本的工程只有IAR版本,所以需要進行一定的修改才可用于KEIL中。UC/OS的文件結(jié)

9、構(gòu)如下圖所示:Section5pC/OS-llBookSection3pC/OS-llCortexM3PortBSPesp.cSection6QS_CPU_GtC0S_CPU_A.ASD40£_CPU.H0SDBG+CYourApplicationAPPAPP_VECT.CAPE1"CF3.fiINCLUDES.os_crG.HIJC/OS-IIOS_CORE.COSZb'LAGXos7MBOX-cOSMEM.COS_MUTEX+COSQ.COS_EM.COSJI'ASK.COSTIME,CO£_TMR.CuCOSTI.HAction2ARMCor

10、tex-M3ITargetBoardFigure1-1,Relationshipbetweenmodules.2按照下圖的文件結(jié)構(gòu)搭建uC/OS工程文件結(jié)構(gòu)$-?&XeE-:E-申會Ij-|j-:E"I由“'l由”:E'"$E"l由“i、.H-1臥jS'"j-|i-由“E-1E-?E1-STARTUPCODE圉startjp_5trn3jUSER園rnain.c鬲strn32flOK_it.iFWlib禹ttm32fl0x_rci筍5trn32flOK_g|L酉5trn32flOK_Ls國misc.c爾stmJ2fl0k_

11、dr鬲stm32F10x_fld筍5tm32flOM_5p固stm32fl0x_flasys.cenciSjGO.cip_arp_udp_t<印i_enc28J60.訓(xùn)亡1»_5亡rv亡r.tCCadusrfl.c甲”|E-目“、E-J+app.c-=®-®'-E-=-s-!®-s-iEl-0-=®-0-囪由“”龜+d5_cfg_app.cs_core.c5E_dbg.iO5_flag.cs_int.cem.cd5_Esg.cs_mirtec.c5_pend_mullos_prio.c«_qcs_s亡rn,cdE_Et3

12、t.C5._task.c5_ticlc.cs_time.cos_tmr.cO5_var.c里|ciE_cpiJ_.a.aEKr,葡os_c:pij_c.c0-、.uCVPorts.園O5_cpu_a.a5rr:由-曲O5_CpU_C,C申、.uCUE0-筍Iib_a5cii.c審蠱lib_math.c審盂|lib_mem.c囪-暫lib_?tr.c白“0uGVCPU審匡cpu_core.c爲(wèi)cpu_a.asrn1由闔cpu_c.cS-、uCCfg畝圍C5_app_hoak白.sReadme:基readrrie.tact 把LED工程所在的文件夾先改名為:STM32+UCOS 在USER文件夾下

13、新建includes.h頭文件。 按照之前給的uC/OS-II文件結(jié)構(gòu)圖,我們在工程的根目錄下建立BSP文件夾、APP文件夾和uCOS-II文件夾。BSP文件夾存放外設(shè)硬件驅(qū)動程序。APP文件夾存放應(yīng)用軟件任務(wù)uCOS-II文件夾uC/OS-II的相關(guān)代碼 把USER文件夾下的led.h和led.c文件剪切到BSP文件夾里。在BSP文件夾里新建BSPc和BSPh文件。 在APP文件夾下建立app.h、app.c和app_cfg.h文件??截恥C/OS-II源代碼附件那里的MicriumSoftwareEvalBoardsSTSTM32F103ZE-SKIAROS-Probe-LCDos_cfg

14、.h到此目錄。 把uC/OS-II源代碼附件那里的MicriumSoftwareuCOS-II下的Source文件夾復(fù)制到工程里剛才新建的uCOS-II文件夾里。把MicriumSoftwareuCOS-IIPortsarm-cortex-m3Generic'IAR下的文件復(fù)制到工程uCOS-II文件夾中新建的Ports文件夾里。復(fù)制后,選中全部文件,右鍵一一屬性去掉只讀屬性確定。如下圖添加includepatharaw血e旺嫌/0NI/BSSOM-Jap#0Nwdsogap#raw血eutlnl旺嫌/0Nulx3J.nl/rsoM-Jap#墨叢旺嫌/oNl/BI/rsofap#疑旨旺

15、題0NUJxocfiwsoM-Jap#0NUJOV1U.SOfap#KIME氷、rafinn社Ezfzs,«血eutlnlZW8IS0二.640so忌迤£I*7soCJn0M區(qū)m一lscoylIERAIAW.SCOT:iDpe-n亠-npqulxsDetugUtilitiesAsm|LinkerjiDevice|I:ai:-getOutputListing|sLxlcldn-S6r衛(wèi)3衛(wèi)瓦0i*t*1JMM-哲碼m<m0岳口63QRHMQPLJ-M5QASso£±2巴蘭旦墨cinqajo匸需匚-BJPifcMru>#defineOS_TMR_

16、EN0禁用定時器#defineOS_DEBUG_EN0禁用調(diào)試b. 修改os_cpuh注釋掉這三行voidOS_CPU_SysTickHandler(void);voidOS_CPU_SysTickInit(void);INT32UOS_CPU_SysTickClkFreq(void);c. 修改os_cpu_CC把OS_CPU_SysTickHandler(),OS_CPU_SysTickInit()及如下圖的文件注釋掉defineOSCPUCM3ITi/ICSTCTRL(才(val&tileIMT32U和gEDCiCiECi10)tfdellDe05CPUCM3r/icSTRELO

17、AD(volatileH0T32UJOxEOOOEOi)AdelineOSCPUCM3NVICSTCURRENT(*(volatiltINT32U*JOxEOOOEOie)define05QPUCM3IJICSTCAL(volatileINT32U*)OxEODDEOLC)#cLeiine05CPU_CH?_1TJICPRID_ST(*(valatilsINT8U*)OxEOOO£D23)05CPUCM35T_CTRLCOUNTOzOODlOOOOdefirieOSCPUCM3NVICSTCTRLCLKSRCoxooaaooc#defmeOSCPUCM3NVICSTCTRLINTEN

18、OXOOOODQ02#dErfiDECISCPU匚M3NVICSTCTRLENABLEOMOoaaaocicLeiine05CPUCM3IT/ICPRIOKINOxFFd修改os_cpu_a.asm由于編譯器的原因要將下面的PUBIC改為EXPORT:PUBLICOS_CPU_SR_Save;FunctionsdeclaredinthisfilePUBLICOS_CPU_SR_Restore11PUB匚COSStaHHighRdyPUB匚COSQXSWPUB匚COSIntCtxSwPUB匚CoscpupendsvHand_erp霸埒osldbgc#deAneOSCOMPPEROPTrootg#

19、deAneOSCOMPPEROPT、roof覇埒Startuplstln32floxlhd.s岡甘料%詢需酣油逮恿HSttCMSIS召sQrHUPsrm32floxhd.s齋甘DI些墾令s、併弟血igMOSICPUISysTickHand-ero刮startuplstm32floxlhd.s)<F>=l=>、PendSV召回Mffl前XpendsvHand-er、岡兵汨證CE耳血圧皆pendsvHand-erssBmBoscpupendsvHand_ers凹。菱JIflinc-udes.h#ifndefINCLUDESH#defineINCLUDESH#inc-ude=stm

20、32flox.h=12上spnpu=pnpu_#0.dsoa即®HsLUQrrDNI、七PUQ#馬岡后兇畧Lu、上P=pnpu_#檢國嫌史圧旺、上.ddppnpw#疑岡呂氷ffi豎肱fcM、上dsoauPWW#:儀水檢國塢IIso、:Dn、>lr:=lsoon=pnpu_#氷舉粘EK>P匚SAS、上§xo-c4*E0pnpu_#粘SK>P匸<s遐迪ftms屋、GLUS缶ds>D匚SO'AOUnbLL.E2SAS)6匸uco>p匸<s)(po>七u>p匸<spo>亠>ms懸口曙qlui*、o6匸U

21、GOOIdoQ'LUl>粘直骰芳匸Ms遐迪ftm喪懸*、o七u>p匸Ms>乏CN卜只-H-營塢張鱗區(qū)*、O七UIEZSAS)(po>七UIds8po>Bsp.h#ifndefBspH#defineBspHvoidsysTicklinit(void)voidBSPIInit(void)j#endif、BSPH菱JIflmain.c#inc-ude=inc-udes.h=sQrricOSSTKsQrHUPQrsksHSTARTUPTASKSTKSIZEb冷kintmain(void)亠BspInitoOSInsjOSTaskcreatecrasklLEDAVO

22、id*)0、p?sErHUPErsksHSTARTUPTASKSTKsNElLSTARTUPTASKPRIO)osstartoreturno至此,UC/OS的移植已經(jīng)完成,運行多任務(wù)只需在APP.C里修改即可。限于篇幅,一下不再贅述,詳情請看源碼。235.文件系統(tǒng)的移植與文件系統(tǒng)基本函數(shù)的功能1)SDIO配置與SD卡實現(xiàn):a. SDIO接線如下圖所示:0»114,124,124r124,124,12IfiKnhm1f'Kahrn10Kohm1CKohun10KohmPC10-a1PC111h*2-PD23V4PC125EPCS7.b8PC10VPG11Y沖?3V3O切履pea

23、VDATA2CD/DATA3CMDVDDCLKVSSDATA0DATA1J2b.SDIO時鐘設(shè)置:SDIO_CK時鐘是通過PC12引腳連接到SD卡的是SDIO接口與SD卡用于同步的時鐘。SDIO選配器掛載到AHB總線上,通過HCLK二分頻輸入到適配器得到SDIO_CK的時鐘,這時SDIO_CK=HCLK/(2+CLKDIV)。其中CLKDIV是SDIO_CLK(寄存器)中的CLKDIV位。另外,SDIO_CK也可以由SDIOCLK通過設(shè)置bypass模式直接得到這時SDIO_CK=SDIOCLK二HCLK??梢酝ㄟ^以下函數(shù)進行時鐘配置SDIO_Init(&SDIO_InitStruct

24、ure);對SD卡的操作一般是大吞吐量的數(shù)據(jù)傳輸,所以采用DMA來提高效率,SDIO采用的是DMA2中的通道4。在數(shù)據(jù)傳輸?shù)臅r候SDIO可向DMA發(fā)出請求。c.SDIO協(xié)議驅(qū)動聲明:由于原來沒有了解過SD協(xié)議,又看到SDIO的驅(qū)動有2000多行,時間緊迫,感覺無從下手。故采用ST公司官方驅(qū)動。以下簡要介紹所用到的函數(shù)的功能SDIO_SendCommand(&SDIO_CmdInitStructure);/配置和發(fā)送命令SDIO通過CMD接收到響應(yīng)后,硬件去除頭尾的信息,把commandindex保存到SDIO_RESPCMD寄存器,把argumentfield內(nèi)容保存存儲到SDIO_R

25、ESPx寄存器中。這兩個值可以分別通過下面的庫函數(shù)得到。SDIO_GetCommandResponse();/卡返回接收到的命令SDIO_GetResponse(SDIO_RESP1);卡返回的argumentfield內(nèi)容FromhoctSDE的多決寫人片序囲CMD-DATFigure3-4:(MultipleBlockWriteOporationd. SDIO_Init()函數(shù):1) 用GPIO_Configuration()進行SDIO的端口底層配置2) 分別調(diào)用了SD_PowerON()和口SD_InitializeCards()函數(shù),這兩個函數(shù)共同實現(xiàn)了上面提到的卡檢測、識別流程。3

26、) 調(diào)用SDIO_Init(&SDIO_InitStructure)庫函數(shù)配置SDIO的時鐘,數(shù)據(jù)線寬度,硬件流(在讀寫數(shù)據(jù)的時候,開啟硬件流是和很必要的,可以減少出錯)4) 調(diào)用SD_GetCardInfo(&SDCardInfo)獲取sd卡的CSD寄存器中的內(nèi)容,在main函數(shù)里輸出到串口的數(shù)據(jù)就是這個時候從卡讀取得到的。5) 調(diào)用SD_SelectDeselect()選定后面即將要操作的卡。6) 調(diào)用SD_EnableWideBusOperation(SDIO_BusWide_4b)開啟4bit數(shù)據(jù)線模式如果SD_Init()函數(shù)能夠執(zhí)行完整個流程,并且返回值是SD_OK

27、的話則說明初始化成功,就可以開始進行擦除、讀寫的操作了。下面進入SD_PowerON()函數(shù),分析完這個函數(shù)大家就能了解SDIO如何接收、發(fā)送命令了。e.SDIOIint()中使用的函數(shù):SD_PowerON函數(shù):確保SD卡的工作電壓和配置控制時鐘SD_InitializeCards:初始化所有的卡或者單個卡進入就緒狀態(tài)2)FATFS文件系統(tǒng)的移植FATFS是面向小型嵌入式系統(tǒng)的一種通用的FAT文件系統(tǒng)。FATFS完全是由AISIC語言編寫并且完全獨立于底層的I/O介質(zhì)。因此它可以很容易地不加修改地移植到其他的處理器當(dāng)中,如8051、PIC、AVR、SH、Z80、H&ARM等。FATF

28、S支持FAT12FAT16FAT32等格式,利用前面寫好的SDIO驅(qū)動,把FATFS文件系統(tǒng)代碼移植到工程之中,就可以利用文件系統(tǒng)的各種函數(shù),對已格式化的SD卡進行讀寫文件了。首先從官網(wǎng)下載FATFS源碼,然后解壓到工程文件中,并添加到工程中星t白已USERHSDtO-DEMO由:由'3-S-;S-:3-田mam.c固Ftm32fl0x_Ft.匚蠱usarti.c固sdcardx總diskla.c下面對FATFS的文件做說明:integer.h:是一些數(shù)值類型定義diskio.c:底層磁盤的操作函數(shù),函數(shù)需要用戶自己實現(xiàn)ff.c:獨立于底層介質(zhì)操作文件的函數(shù),完全由ANSIC編寫CC9

29、36.C:簡體中文支持所需要添加的文件,包含了簡體中文的GBK和轉(zhuǎn)換函數(shù)。ffconf.h:這個頭文件包含了對文件系統(tǒng)的各種配置如需要支持簡體中文要把_CODE_PAGE的宏改成936并把上面的CC936.C文件加入到工程之中移植過程中要修改的文件1、將integer.h中有關(guān)BOOL的那句注釋掉/BOOLassign_dr£ves(intchsr*strgv);/*addbyEire*/樣:2、在ff.c文件的開頭重新定義一個布爾變量,取名為bool,與stm32f10x.h中的名字一/#includeTlstm32f1Jx.hr,/'*addbyfire*/'ty

30、pedefenum:=0,'1RLE=!?ALbE-joao.;/*addbyfire*/sta-ticFRESUITair_rLext二R-dj7/也/BOOLstreachboolstretch同時在ff.c的第585行做如下修改:(/*FR_QK:Succeeded,FRNOPointertodirectoryobject/*FALSE:Donotstreachtai/*=addbyfire+/文件系統(tǒng)移植成功!卜面介紹文件系統(tǒng)中的幾個底層函數(shù):a.文件系統(tǒng)初始化函數(shù)接口的實現(xiàn)DSTATUSdisknitialize(BYTEdrv/*Physicaldrivenmuber(0.

31、)*/)SD_ErrorStatus;/*Supportsonlysingledrive*/if(drv)returnSTA_NOINIT;/*SDInit*/Status=SD_Init();if(Status!=SD_OK)returnSTA_NOINIT;elsereturnRES_OK;這個函數(shù)調(diào)用了SDIO的SD_Init()函數(shù),返回成功或失敗的參數(shù),當(dāng)文件系統(tǒng)調(diào)用到這個函數(shù)的時候,實際上是調(diào)用了SD_Init()對SD卡進行初始化。b. 扇區(qū)讀取函數(shù)的實現(xiàn):DRESULTdisk_read(BYTEdrv,/*Physicaldrivenmuber(0.)*/BYTE*buff,

32、/*Databuffertostorereaddata*/DWORDsector,/*Sectoraddress(LBA)*/BYTEcount/*Numberofsectorstoread(1.255)*/)if(count>1)SD_ReadMultiBlocks(buff,sector*BLOCK_SIZE,BLOCK_SIZE,count);/*CheckiftheTransferisfinished*/SD_WaitReadOperation();循環(huán)查詢dma傳輸是否結(jié)束/*WaituntilendofDMAtransfer*/while(SD_GetStatus()!=SD

33、_TRANSFER_OK);elseSD_ReadBlock(buff,sector*BLOCK_SIZE,BLOCK_SIZE);/*CheckiftheTransferisfinished*/SD_WaitReadOperation();循環(huán)查詢dma傳輸是否結(jié)束/*WaituntilendofDMAtransfer*/while(SD_GetStatus()!=SD_TRANSFER_OK);returnRES_OK;此函數(shù)分為了2個部分,分為單塊讀取和多塊讀取數(shù)據(jù),因為使用SD_ReadMultiBlocks比SD_ReadBlock(速度要快所以加入了一個判斷函數(shù)來區(qū)分以增加系統(tǒng)的效

34、率。由于文件系統(tǒng)都是以塊(512字節(jié))為單位讀寫的所以只要提供512字節(jié)或者512*N字節(jié)的SD卡驅(qū)動即可。c. 扇區(qū)寫入函數(shù)的實現(xiàn):DRESULTdisk_write(BYTEdrv,/*Physicaldrivenmuber(0.)*/constBYTE*buff,/*Datatobewritten*/DWORDsector,/*Sectoraddress(LBA)*/聯(lián)祖1遁gp第二ouo電do七M七pmq's>p一ISC匸s-Q4sueJ_一R4一>PQLD*、i?unooL1JZIS>DO8LlJZIS>DOoa-Lot;sitnq(*81us)s&g

35、t;po_oaQ_n乏七MQ'S)(t人lunoo)七>(SSCN:<I)七m2sot;s40QqlunN*、lunooLU1A8OSIJJM三己亠聯(lián)坡録地平ps麗OPS期她、bo缶ll-snvmiq's丄OSEES環(huán)OQ'S)壬M聯(lián)祖1遁gp期枷、ouo甩do七M七pmq's>p一ISC匸s-Q4sueJ_一R4一>PQLD*、aluzis>do8LlJZIS>DOoa-Lot;sitnq(*181US)>PO_8七MQ'S)s-亠聯(lián)坡録地平ps麗OPS期她、bo缶ll-snvmiq's丄OSEES環(huán)O

36、Q'S)壬M#endif/*_READONLY*/*/*/*/*MiscellaneousFunctionsDRESULTdisk_ioctl(BYTEdrv,/*Physicaldrivenmuber(0.)*/BYTEctrl,/*Controlcode*/void*buff/*Buffertosend/receivecontroldata*/)returnRES_OK;扇區(qū)寫入函數(shù)與扇區(qū)讀取函數(shù)十分相似,也是根據(jù)寫入扇區(qū)的數(shù)目是一個還是多個來分別調(diào)用不同的SD數(shù)據(jù)塊寫入函數(shù)。d. 時間接口函數(shù)DWORDget_fattime(void)return0;這個函數(shù)在本系統(tǒng)中意義不大,

37、所以并未添加實際功能。到這里fatfs的移植與文件系統(tǒng)的基本函數(shù)介紹已經(jīng)完成。下面將介紹Uip及socket實現(xiàn)方法.266.Uip及socket實現(xiàn)方法ENC28J60模塊與STM32F103ZET6連接PB13:ENC28J60-INTPA6-SPI1-MISO:ENC28J60-SOPA7-SPI1-MOSI:ENC28J60-SIPA5-SPI1-SCK:ENC28J60-SCKPA4-SPI1-NSS:ENC28J60-CSPE1:ENC28J60-RSTENC28J60模塊電路圖:4PE4PA6<斗耐朋PAT4.5,5.7.6.9PAX5辭IPjM4,7PE1"|O

38、ohmR242畑lwr)7B¥h'HuF竝SV'SIri工忤SiphrnTPl蘭VCAPVQDVSELEDACLKOU7LEDBINIVCOOSCNCSG?5051OSC1vssoscSCKUSSPLLcs仙口PLLRESETVDDRX.VS&RXVSSTXIPTN-TPOUT*iPlNi-TROUT-RAIA®VDQTXU13ENC2BJ50礙17L16O1VJO3V3ihnleoaHELEDBTPDUTiR32Sldhrti亠L(fēng)DuH,回TPnUT-對3碣匸T刀20pFoac2cL=20pFOSC1DUl|ENC28J60簡介ENC28J60是帶

39、有行業(yè)標(biāo)準(zhǔn)串行外設(shè)接口(SerialPeripheralInterface,SPI)的獨立以太網(wǎng)控制器。它可作為任何配備有SPI的控制器的以太網(wǎng)接口。ENC28J60符合IEEE802.3的全部規(guī)范,采用了一系列包過濾機制以對傳入數(shù)據(jù)包進行限制。它還提供了一個內(nèi)部DMA模塊,以實現(xiàn)快速數(shù)據(jù)吞吐和硬件支持的IP校驗和計算。與主控制器的通信通過兩個中斷引腳和SPI實現(xiàn),數(shù)據(jù)傳輸速率高達10Mb/s。兩個專用的引腳用于連接LED,進行網(wǎng)絡(luò)活動狀態(tài)指示。ENC28J60由七個主要功能模塊組成:1. SPI接口一一充當(dāng)主控制器和ENC28J60之間通信通道。2. 控制寄存一一用于控制和監(jiān)視ENC28J60。3. 雙端口RAM緩沖一用于接收和發(fā)送數(shù)據(jù)包。4. 判優(yōu)一一當(dāng)DMA、發(fā)送和接收模塊發(fā)出請求時對RAM緩沖器的訪問進行控制。

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論