版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔傾情為你奉上精選優(yōu)質(zhì)文檔傾情為你奉上專心專注專業(yè)專心專注專業(yè)精選優(yōu)質(zhì)文檔傾情為你奉上專心專注專業(yè)畢 業(yè) 設(shè) 計(jì) 論 文題 目: 基于STM32的USB簡易鼠標(biāo)設(shè)計(jì) 學(xué) 院: 電氣與信息工程學(xué)院 專 業(yè): 電子信息工程 姓 名: 學(xué) 號: 指導(dǎo)老師: 完成時(shí)間: 2015年06月01日 摘 要隨著設(shè)備的越來越智能化,嵌入式計(jì)算機(jī)大量應(yīng)用到各種電子設(shè)備中,基于嵌入式系統(tǒng)的USB鼠標(biāo)及鍵盤的應(yīng)用也變得越來越廣泛。在本次設(shè)計(jì)中,研究的是一款基于STM32的USB鼠標(biāo),即插即用,免驅(qū)動自動識別,很好的解決了鼠標(biāo)設(shè)備智能化和低延遲的設(shè)計(jì)要求。由于是基于HID的USB設(shè)備,所以編程非常方便,貼近
2、工程實(shí)踐,應(yīng)用前景廣闊。嵌入式系統(tǒng)HID,即人機(jī)接口設(shè)備,是Human Interface Device的縮寫。HID是計(jì)算機(jī)周邊設(shè)備中非常常見的設(shè)備類型,是可以直接與進(jìn)行人交互的USB設(shè)備,例如鼠標(biāo)、攝像頭、U盤等。在種類繁多USB設(shè)備中,HID類設(shè)備的成本一般情況下是比較低的。實(shí)際上,只要是符合HID標(biāo)準(zhǔn)的設(shè)備都是HID設(shè)備,不一定非要具有人機(jī)交互功能。 最早支持HID設(shè)備的計(jì)算機(jī)操作系統(tǒng)是Windows98系統(tǒng)。 HID設(shè)備的驅(qū)動程序內(nèi)置在這些系統(tǒng)中,不需要單獨(dú)開發(fā)與安裝驅(qū)動,應(yīng)用程序可以直接使用這些驅(qū)動程序來與設(shè)備通信。近年來,受計(jì)算機(jī)性能提升和游戲軟件等的影響,人們對鼠標(biāo)的要求越來越
3、高,特別是一些即時(shí)作戰(zhàn)游戲,人們希望能達(dá)到“零”延遲,這就對原來的鼠標(biāo)技術(shù)提出了挑戰(zhàn)。老式的圓孔鼠標(biāo)早已不再適用,特別是筆記本電腦根本不再設(shè)計(jì)老式插孔。隨著USB2.0以及USB3.0的不斷完善,再加上高速而價(jià)廉的單片機(jī),一款基于STM32的USB簡易鼠標(biāo)正是本課題的研究內(nèi)容。本文主要研究基于STM32的USB簡易鼠標(biāo)系統(tǒng)的功能、設(shè)計(jì)思想和實(shí)現(xiàn),以及基于STM32的USB簡易鼠標(biāo)的組成及工作原理,描述了研究該課題的意義和應(yīng)用價(jià)值。本設(shè)計(jì)的重點(diǎn)在于USB協(xié)議的HID部分,精通此協(xié)議并植入單片機(jī)才能實(shí)現(xiàn)計(jì)算機(jī)與鼠標(biāo)的溝通。關(guān)鍵詞: USB 技術(shù); HID 協(xié)議; STM32單片機(jī);鼠標(biāo)Abstra
4、ctAs more and more intelligent devices, embedded computers applied to the large variety of electronic devices, embedded systems USB mouse and keyboard applications are becoming more and more widespread. In this design, the study is a based on the STM32 USB mouse, plug and play, driver-free automatic
5、 identification, a good solution to the mouse device intelligence and low-latency design requirements. Because it is based on HID USB device, so the programming is very convenient, close to the engineering practice, the application prospects.Embedded systems HID, namely human interface devices, is a
6、n abbreviation for Human Interface Device. HID is a computer peripheral device in a very common device types, people can interact directly with the conduct of USB devices, such as a mouse,camera, U disk and so on.In a wide range of USB devices, under HID class devices generally cost is relatively lo
7、w.In fact, as long as a HID-compliant devices are HID device does not necessarily have to have interactive features.The earliest HID devices supported computer operating system is Windows98 system. HID device drivers built into these systems, the need for separate development and install the driver,
8、 an application can use these drivers to communicate with the device.In recent years, the impact of computer and game software performance by, people have become increasingly demanding of the mouse, especially some instant combat game, people want to be able to achieve zero delay, which the original
9、 mouse technology presents a challenge . Old-fashioned mouse the hole is no longer applicable, especially notebook computers designed simply no longer the old jack. With the continuous improvement USB2.0 and USB3.0, coupled with high speed and low cost microcontroller, a research based on the STM32
10、USB simple mouse precisely this topic. This article is mainly based on the STM32 USB simple mouse systems design and implementation, as well as easy on the STM32 USB mouse and work principle, it describes the subject of research and practical value. The design focuses on some USB HID protocol, profi
11、cient in this agreement and in order to achieve single-chip implanted communication computer mouse.Keywords: USB technology; HID protocol; STM32 microcontroller; mouse目錄TOC o 1-3 h u 第1章 引言1.1 課題背景USB 接口是串行總線通信端口,支持即插即用,在計(jì)算機(jī)領(lǐng)域應(yīng)用非常廣泛。HID設(shè)備是一種可以進(jìn)行人機(jī)交互操作的設(shè)備,在USB設(shè)備中占有重要地位,可以輔助計(jì)算機(jī)進(jìn)行各種操作,如常用的電腦攝像頭、手寫板等設(shè)備。
12、一般USB設(shè)備的研發(fā)非常困難,不但要嚴(yán)格遵守USB協(xié)議,還要編寫驅(qū)動程序。但HID設(shè)備使用的是操作系統(tǒng)自帶的HID 驅(qū)動程序,免去了驅(qū)動程序的編寫,加快了開發(fā)效率,因此一些簡單的USB 設(shè)備,都喜歡枚舉成HID 設(shè)備。USB接口不但具有熱插拔功能而且還是即插即用的,非常方便。USB接口在理論上最多可以同時(shí)連接127個(gè)外設(shè),如游戲手柄、手寫板、鍵盤等。USB協(xié)議最早在1996年提出,經(jīng)過多年的發(fā)展USB版本到現(xiàn)在已經(jīng)發(fā)展為3.0版本。從1975年第一個(gè)單片機(jī)產(chǎn)生后經(jīng)過四代的發(fā)展,目前單片機(jī)具有生命周期長、接口內(nèi)容豐富、運(yùn)算速度快、低電壓低功耗、價(jià)格便宜等優(yōu)點(diǎn)。本次設(shè)計(jì)中使用的STM32是一款基于
13、Cotex-M3內(nèi)核的32位處理器。這款處理器具有低成本、高性能的有點(diǎn),非常適合USB鼠標(biāo)的設(shè)計(jì)。鼠標(biāo)自從1968年美國科學(xué)家研制出來后,基于其方便快捷操作簡單等優(yōu)點(diǎn)很快成為家喻戶曉的產(chǎn)品,是現(xiàn)在每臺電腦都必須配備的電子產(chǎn)品。從有線到無線,從滾球到光電,鼠標(biāo)經(jīng)過一代代的發(fā)展可以說是品種繁多,價(jià)格也是十幾元到幾千元的都有。在選購鼠標(biāo)時(shí),我們一般會挑選外觀漂亮延遲小的產(chǎn)品,無論什么樣的鼠標(biāo),目的只有一個(gè),那就是舒適好用。所以不管計(jì)算機(jī)發(fā)展到什么程度,只要有人用鼠標(biāo),鼠標(biāo)的研制與開發(fā)都是必須的。 1.2 基于STM32的USB鼠標(biāo)的設(shè)計(jì)研究方法及目標(biāo)想讓計(jì)算機(jī)把一個(gè)HID 設(shè)備識別為鼠標(biāo)設(shè)備,要完成
14、的主要工作是修改HID 設(shè)備的標(biāo)準(zhǔn)描述符。HID 設(shè)備的描述符主要包括5 個(gè)USB 的標(biāo)準(zhǔn)描述符和3 個(gè)HID 設(shè)備類特定描述符。通過修改描述符可以將HID 設(shè)備枚舉為鼠標(biāo)。本次設(shè)計(jì)使用C語言進(jìn)行程序的編寫。本文所講述的USB鼠標(biāo)是采用STM32來實(shí)現(xiàn)的。它自身帶的USB模塊符合USB2.0規(guī)范和OTG1.3規(guī)范,支持全速12Mbps和低速1.2Mbps兩種模式。而且STM32官方封裝了很多庫函數(shù),對于編寫USB驅(qū)動節(jié)省了很多時(shí)間。本次設(shè)計(jì)通過把符合HID協(xié)議的程序燒錄到STM32開發(fā)板中,由開發(fā)板的四個(gè)按鍵控制window窗口光標(biāo)的移動。1.3 USB鼠標(biāo)國內(nèi)外研究現(xiàn)狀 從原始鼠標(biāo)、(光學(xué)鼠
15、標(biāo),)再到如今的觸控鼠標(biāo),鼠標(biāo)技術(shù)經(jīng)歷了漫漫終于修成正果。與主流PC部件相比,鼠標(biāo)的技術(shù)革新顯得非常保守,從道格拉斯博士的原始鼠標(biāo),再到后來的純機(jī)械鼠標(biāo)、光電鼠標(biāo)、光機(jī)鼠標(biāo),以及光學(xué)鼠標(biāo),鼠標(biāo)技術(shù)只經(jīng)歷寥寥幾次大變革,其中真正算得上成功的其實(shí)只有光機(jī)鼠標(biāo)和光學(xué)鼠標(biāo),它們也是當(dāng)前鼠標(biāo)技術(shù)的主流形態(tài)。其中,光機(jī)鼠標(biāo)為過去的主流,我們一般也將它俗稱作“機(jī)械鼠標(biāo)”。對于光學(xué)鼠標(biāo),則是現(xiàn)在鼠標(biāo)技術(shù)的發(fā)展方向,它已經(jīng)大面積取代過時(shí)的光機(jī)鼠標(biāo)產(chǎn)品。現(xiàn)在光學(xué)鼠標(biāo)的技術(shù)相當(dāng)完善,基本上每個(gè)人用的都是光學(xué)鼠標(biāo)。但不管是哪一種鼠標(biāo)都少不了和USB打交道,特別是USB3.0出現(xiàn)以后,基于USB的設(shè)備已經(jīng)是電子產(chǎn)品研發(fā)
16、的主流。第2章 USB協(xié)議概述2.1 USB簡介 USB是英文Universal Serial Bus(通用串行總線)的縮寫,是一個(gè)外部總線的標(biāo)準(zhǔn),用于規(guī)范電腦與外部設(shè)備的連接和通訊,是應(yīng)用在PC領(lǐng)域的接口技術(shù)。USB傳輸速度極快,使用很方便,它可以連接非常多的外設(shè),比如:手寫板、游戲手柄、U盤等?,F(xiàn)在USB設(shè)備已進(jìn)入千家萬戶,應(yīng)用之所以如此廣泛,優(yōu)點(diǎn)主要有以下幾點(diǎn): 1、支持熱插拔,也就是即插即用。這讓用戶在使用外接設(shè)備時(shí)不需要進(jìn)行關(guān)機(jī)再開機(jī)就可以完成硬件的安裝,分分鐘就可以使用,省時(shí)省力。 2、標(biāo)準(zhǔn)統(tǒng)一。常見的是IDE接口的硬盤,串口的鼠標(biāo)鍵盤,并口的打印機(jī)掃描儀,可以有了USB之后,這些
17、應(yīng)用外設(shè)統(tǒng)統(tǒng)可以用USB接口與PC連接,這時(shí)就有了USB硬盤、USB鼠標(biāo)、USB網(wǎng)卡等一系列設(shè)備。 3、可以連接多個(gè)設(shè)備。USB在PC上往往具有多個(gè)接口,可以同時(shí)連接多個(gè)外設(shè),最高可連接127個(gè)設(shè)備。 USB協(xié)議出現(xiàn)過的版本有USB1.0、USB1.1、USB2.0以及現(xiàn)在最新的USB3.0。USB的結(jié)構(gòu)是主從模式,設(shè)備與設(shè)備之間不能互連,主機(jī)與主機(jī)之間也不能互連,于是就產(chǎn)生了USB OTG。USB OTG就是讓同一個(gè)設(shè)備在不同場合下實(shí)現(xiàn)主機(jī)與從機(jī)之間的切換。在傳輸速度上,USB1.0和USB1.1版本只支持1.5Mb/s的低速模式和12Mb/s的全速模式。USB2.0中不僅支持這兩種模式,還
18、增添了速度更快的480Mb/s的高速模式。現(xiàn)在USB3.0已經(jīng)非常完善,最新發(fā)布的計(jì)算機(jī)產(chǎn)品都帶有USB3.0接口,其最大傳輸速度更是達(dá)到恐怖的5.0Gbps。2.2 USB的拓?fù)浣Y(jié)構(gòu) 前面提到,USB是一種主從結(jié)構(gòu)的系統(tǒng)。主機(jī)在一般情況下都會具有一個(gè)或多個(gè)USB主控制器(host controller)和根集線器(root hub)。主控制器下雖然只有一個(gè)根集線器,但一般情況下根集線器上都有多個(gè)USB口。USB集線器是一種特殊的USB設(shè)備,是在USB接口不夠用時(shí)擴(kuò)展USB口用的。集線器雖然可以擴(kuò)展出更多的USB口,但不能擴(kuò)展出更多的帶寬,帶寬還是共享的。所以最好不要把多個(gè)USB設(shè)備接到同一個(gè)
19、USB端口上。我們可以在電腦的設(shè)備管理器中是查看USB主控制器和USB根集線器的。對于window7系統(tǒng),右擊“計(jì)算機(jī)”,在彈出的菜單中選擇“管理”,在“計(jì)算機(jī)管理”選項(xiàng)卡中單擊“設(shè)備管理器”,就可以查看計(jì)算機(jī)設(shè)備的屬性了,在這里可以查看驅(qū)動程序信息、設(shè)備的PID和VID等。在“設(shè)備管理器”中找到“通用串行總線控制器”并把它展開,就可以看到USB主控制器和根集線器了。USB的拓?fù)浣Y(jié)構(gòu)為金字塔型,塔頂為主控制器和根集線器,下面是通過USB集線器拓展的多個(gè)USB口。在Windows中,由各種USB功能驅(qū)動程序負(fù)責(zé)產(chǎn)生和管理USB功能設(shè)備(FOD),即我們最終所看到的設(shè)備。2.3 USB的電氣特性
20、標(biāo)準(zhǔn)的USB連接線使用四芯電纜:5V電源線、差分?jǐn)?shù)據(jù)線負(fù)(D)、差分?jǐn)?shù)據(jù)線正(D+)及地(GND)。在USB OTG中又增加了一種MINI USB接頭,使用五條線,比標(biāo)準(zhǔn)USB多一條身份識別線。USB使用的是NRZI編碼方式,即數(shù)據(jù)為0時(shí)電平翻轉(zhuǎn),數(shù)據(jù)為1不翻轉(zhuǎn)。因?yàn)殡娖介L時(shí)間不發(fā)生變化會不利于時(shí)鐘信號的提取,所以要在經(jīng)過位填充處理后發(fā)送數(shù)據(jù)(當(dāng)遇到連續(xù)六個(gè)1時(shí)強(qiáng)制插入一個(gè)數(shù)據(jù)0)。USB協(xié)議規(guī)定,USB低速電纜長度不得超過3米,而全速電纜不得超過5米。USB標(biāo)準(zhǔn)還規(guī)定了信號線的顏色,其中5V電源線為紅色,D為白色,D+為綠色,GND為黑色。 插入檢測機(jī)制就是檢測到設(shè)備插入到主機(jī)的過程。在US
21、B集線器的每個(gè)端口的D+和D上,分別接了一個(gè)15k的下拉電阻到地,無設(shè)備插入時(shí)輸入端被下拉電阻拉到了低電平。在USB設(shè)備端D+或D上接1.5k的上拉電阻到3.3V電源。上拉電阻接正還是負(fù)由設(shè)備速度決定,全速和高速設(shè)備接正,低速設(shè)備接負(fù)。當(dāng)設(shè)備插入U(xiǎn)SB插座時(shí),接上拉電阻的數(shù)據(jù)線的電壓由上拉電阻和下拉電阻分壓決定,大概在3V左右。當(dāng)集線器檢測到這個(gè)高電平信號時(shí),它把信號發(fā)送到USB主控制器,就可以檢測到設(shè)備插入了。此時(shí),還可以根據(jù)被拉高的數(shù)據(jù)線是D+還是D來判斷設(shè)備的速度類型。2.4 USB描述符前面說道USB是一個(gè)總線,USB總線驅(qū)動程序也不知道設(shè)備的行為,那么主機(jī)怎么獲知設(shè)備的功能呢,這就要
22、通過描述符來實(shí)現(xiàn)了。USB1.1協(xié)議定義了五種標(biāo)準(zhǔn)描述符:設(shè)備描述符、配置描述符、接口描述符、端點(diǎn)描述符和字符串描述符。還有一些特殊的描述符,如設(shè)計(jì)中要用的HID描述符等。一個(gè)USB設(shè)備只有一個(gè)設(shè)備描述符。在設(shè)備描述符中描述了該設(shè)備的各種配置,每種配置都有一個(gè)配置描述符,定義了設(shè)備有多少個(gè)接口,接口描述符又定義了接口有多少端點(diǎn)。 USB描述符之間的關(guān)系:設(shè)備描述符包含配置描述符包含接口描述符包含端點(diǎn)描述符??偟膩碚f,由端點(diǎn)構(gòu)成接口,接口構(gòu)成配置,配置構(gòu)成設(shè)備。如果一個(gè)設(shè)備的各種描述符都成功的返回了,那么設(shè)計(jì)基本上算是成功了一大半。2.5 USB的包結(jié)構(gòu) 在USB總線上,數(shù)據(jù)是以包為單位進(jìn)行傳輸
23、的。一個(gè)包被分成不同的域,包的類型不同,所包含的域也不同。所有的包都要以同步域開始,后接一個(gè)包標(biāo)識符,最后以包結(jié)束符EOP結(jié)束。 同步域用以告訴USB串行接口數(shù)據(jù)要開始傳輸了,以便做好準(zhǔn)備。同步域還可以同步主機(jī)端和設(shè)備端的數(shù)據(jù)時(shí)鐘。同步域都是以一串0開始的,所以每個(gè)數(shù)據(jù)都會發(fā)生電平變化(0在USB總線上被編碼為電平翻轉(zhuǎn)),這樣串行接口引擎很容易恢復(fù)采樣時(shí)鐘信號。當(dāng)串行接口引擎檢測到電平?jīng)]有翻轉(zhuǎn)時(shí),就會認(rèn)為包標(biāo)識符開始了。 包標(biāo)識符PID用以表示一個(gè)包的類型,共8位,其中USB協(xié)議使用的只有PID0PID3這四位,另外四位是這四位的取反,用來校驗(yàn)PID。USB協(xié)議規(guī)定了四類包:令牌包、數(shù)據(jù)包、握
24、手包和特殊包。每種包又分成幾種具體的包。協(xié)議中對最低兩位的規(guī)定如圖2.1。包的類型令牌包數(shù)據(jù)包握手包特殊包PID1001111000圖2.1 四種包的最低兩位規(guī)定2.5.1令牌包 用來啟動一次USB傳輸。因?yàn)閁SB的拓?fù)浣Y(jié)構(gòu)是主從結(jié)構(gòu),所有數(shù)據(jù)的傳輸都是由主機(jī)發(fā)起的,設(shè)備只負(fù)責(zé)接受,所以需要主機(jī)發(fā)送一個(gè)令牌來通知需要的設(shè)備進(jìn)行相應(yīng)的操作。令牌包共四種:輸出、輸入、建立和幀起始。具體的功能還要參照USB協(xié)議。每個(gè)令牌包最后都有一個(gè)CRC5的校驗(yàn),用以校驗(yàn)PID之后的數(shù)據(jù)。四種令牌包中,只有SOF令牌包之后不跟隨數(shù)據(jù)傳輸,其他包都有數(shù)據(jù)傳輸。輸出、輸入、建立令牌包的結(jié)構(gòu)如圖2.2。它們的結(jié)構(gòu)相同,
25、而且數(shù)據(jù)在傳輸時(shí),每個(gè)域的最低位LSB在前。同步域8位包標(biāo)識符7位地址4位端點(diǎn)號5位CRC5校驗(yàn)EOP圖2.2 IN、OUT、SETUP令牌包結(jié)構(gòu)2.5.2數(shù)據(jù)包 用來傳輸數(shù)據(jù)。USB1.1協(xié)議只規(guī)定了兩種數(shù)據(jù)包DATA0和DATA1包。在USB2.0中新增了用在高速分裂事務(wù)和高速高帶寬同步傳輸中DATA2和MDATA包。不同類型的數(shù)據(jù)包是在當(dāng)握手包出錯(cuò)時(shí)糾錯(cuò)用的。不同類型的數(shù)據(jù)包是為了方便在握手包出錯(cuò)時(shí)糾錯(cuò)。主機(jī)和設(shè)備都會維護(hù)自己的一個(gè)數(shù)據(jù)包類型切換機(jī)制,即當(dāng)數(shù)據(jù)包成功發(fā)送或接收時(shí),數(shù)據(jù)包類型切換。當(dāng)檢測到對方使用的數(shù)據(jù)包類型不對時(shí),USB系統(tǒng)認(rèn)為這發(fā)生了一個(gè)錯(cuò)誤,并試圖從錯(cuò)誤中恢復(fù)。一般情
26、況下,當(dāng)握手包被損壞時(shí),會發(fā)生數(shù)據(jù)包類型不匹配的情況。如果一端成功接收數(shù)據(jù)并發(fā)送確認(rèn)信號,確認(rèn)信號在傳輸?shù)臅r(shí)候丟失或損壞,另一端就無法知道數(shù)據(jù)已經(jīng)被正確接。此時(shí)它就會保持自己的數(shù)據(jù)包類型不變,如果對方下次發(fā)送的數(shù)據(jù)包類型和自己不同,說明對方已經(jīng)成功接收數(shù)據(jù)。收數(shù)據(jù)包結(jié)構(gòu)如圖2.3所示。同步域8位PID字節(jié)0字節(jié)1字節(jié)N16位校驗(yàn)EOP圖2.3 數(shù)據(jù)包結(jié)構(gòu)2.5.3握手包 用來查看一個(gè)數(shù)據(jù)是否被對方確認(rèn)。握手包四種類型:ACK、NAK、STALL和NYET。ACK表示數(shù)據(jù)已經(jīng)被接收,空間容納也足夠。NAK表示沒有數(shù)據(jù)需要返回或已經(jīng)正確接受但沒有空間容納。STALL表示這個(gè)設(shè)備無法執(zhí)行這個(gè)請求或者
27、端點(diǎn)已經(jīng)被掛起了,表示一種錯(cuò)誤的狀態(tài)。NYET只在USB2.0的高速設(shè)備中使用,表示本次數(shù)據(jù) 成功接受但沒有空間接受下一次數(shù)據(jù)。圖2.4是握手包的結(jié)構(gòu)。同步域包標(biāo)志PIDEOP圖2.4 握手包結(jié)構(gòu)2.5.4特殊包 只在一些特殊場合使用,分PRE、ERR、SPLIT和PING四種。只有ERR是握手包,其他為令牌包。除了PRE,其他三個(gè)都是USB2.0協(xié)議新增的,不在此次設(shè)計(jì)的研究范圍。PRE是通知集線器打開其低速端口的一種前導(dǎo)包。PRE僅僅使用在全速模式中,與握手包的結(jié)構(gòu)一樣。當(dāng)傳輸模式由全速變低速時(shí),主機(jī)會在全速模式下發(fā)送一個(gè)PRE令牌包,集線器收到此令牌包后,就會打開低速設(shè)備端口,但全速設(shè)備
28、會忽略次令牌包。2.6 USB的傳輸類型 USB有四種傳輸類型:批量傳輸、同步傳輸、中斷傳輸和控制傳輸。前面提到,USB數(shù)據(jù)的基本傳輸單位是包,但在具體傳輸數(shù)據(jù)時(shí)還必須把包組織成事務(wù)。 批量傳輸:使用批量事務(wù)傳輸數(shù)據(jù)。 中斷傳輸:一種保證查詢頻率的傳輸。中斷傳輸一般用在我們所說的延遲要盡可能小的設(shè)備中。現(xiàn)在使用的鼠標(biāo)、鍵盤及其他HID都屬于這樣的設(shè)備。 同步傳輸:有些設(shè)備如音頻、視頻設(shè)備對數(shù)據(jù)的延遲很敏感,而且需要對大量數(shù)據(jù)不停的傳輸,但對數(shù)據(jù)的正確與否要求不高,此時(shí)同步傳輸是最好的選擇。 控制傳輸:分為建立過程、數(shù)據(jù)過程(可選)和狀態(tài)過程三個(gè)過程。建立過程用來輸出數(shù)據(jù),使用建立事務(wù)。建立過程
29、使用只能使用DATA0的SETUP令牌包,而且握手包也只能只用ACK應(yīng)答。數(shù)據(jù)過程可選,如果有可以包含一筆或多比數(shù)據(jù)事務(wù)。狀態(tài)過程是一筆只使用DATA1包的批量事務(wù)。其傳輸方向也就是控制讀和控制寫過程與前面批量事務(wù)相反。第3章 STM32及MDK簡介 3.1 STM32簡介 2006年ARM公司推出Cortex系列微處理器,根據(jù)不同性能的要求,分成了以公司三個(gè)字母分別命名的三個(gè)系列。本次設(shè)計(jì)使用的是M系列,因?yàn)檫@個(gè)系列成本較低,性能上也完全能夠勝任。在ARM公司和意法半導(dǎo)體ST公司合作后,2007年ST公司發(fā)布了基于Cortex-M3內(nèi)核的STM32系列處理器。 STM32系列處理器分為標(biāo)準(zhǔn)型
30、和增強(qiáng)型兩個(gè)系列,主要產(chǎn)品有標(biāo)準(zhǔn)型的STM32F101工作在36MHz,增強(qiáng)型的STM32F103工作在72MHz并擁有更大的RAM和更豐富的外設(shè)。因?yàn)镾TM32F103運(yùn)算頻率高,能實(shí)現(xiàn)更高端的運(yùn)算,而且其自帶的端口具有極好的連接能力,價(jià)格上也比較便宜,所以設(shè)計(jì)中采用這一款。圖3.1是STM32F103處理器的配置。72MHzCPU多達(dá)64K的RAM212位ADC溫度傳感器3USART2SPI多達(dá)512K的ROM USB通用I/O引腳316位定時(shí)器416MHz主振蕩器內(nèi)嵌8MHz和32kHz的RC振蕩器實(shí)時(shí)時(shí)鐘2看門狗7通道DMACAN PWM定時(shí)器圖 3.1 STM32F103處理器的配置
31、 正是由于STM32F10 x系列處理器配有眾多的外設(shè),所以它的用途非常廣泛。在工業(yè)方面,可以應(yīng)用在PLC、報(bào)警系統(tǒng)、變頻器,打印機(jī)等上面;在低功耗方面,應(yīng)用的產(chǎn)品有電表、血糖測量儀、UPS等;數(shù)碼家電方面,相應(yīng)的產(chǎn)品有電腦外設(shè)、游戲機(jī)、數(shù)碼相機(jī)等。3.2 MDK的使用 支持STM32微控制器的開發(fā)工具雖然很多,但結(jié)合中國的業(yè)內(nèi)行情及收費(fèi)情況,Keil公司的MDK是不二選擇。MDK集成了Keil的Vision IDE和ARM編譯工具RVCT的優(yōu)勢。特別是中國版MDK推出后,通過更加合理的價(jià)格和服務(wù),逐步使得MDK成為中國嵌入式工程師的最愛芯片。 使用MDK的一般開發(fā)過程: 1、新建一個(gè)工程,從
32、設(shè)備庫中選擇目標(biāo)芯片,配置編譯器環(huán)境; 2、用C/C+或匯編語言編寫源文件; 3、編譯目標(biāo)應(yīng)用程序; 4、修改源程序中的錯(cuò)誤; 5、測試連接應(yīng)用程序。 MDK的工具集默認(rèn)的是RealView編譯工具,如有特殊需要,也可以安裝使用GNU GCC編譯器。下面是此次設(shè)計(jì)中的具體操作: 在MDK主界面中選擇ProjectNew Project菜單項(xiàng),輸入工程名字即可新建一個(gè)工程。創(chuàng)建新工程時(shí)軟件會提示我們?yōu)楣こ踢x擇一款相應(yīng)的處理器,也可以通過PojectSelect Device打開此選項(xiàng)。對于大部分設(shè)備,軟件會提示是否在工程中添加CPU的啟動代碼,為了讓設(shè)備順利完成初始化工作,我們點(diǎn)擊“是”,以減少
33、編寫啟動代碼的工作量。 MDK還可以通過ProjectOptions for Target,在彈出的選項(xiàng)中對目標(biāo)硬件和設(shè)備內(nèi)組件的相關(guān)參數(shù)進(jìn)行配置。工程創(chuàng)建完了,接下來就是源程序的編寫了。點(diǎn)擊FileNew創(chuàng)建新的源文件,在編輯窗口寫完源程序后以.C為后綴保存。一般情況下會先寫一個(gè)main.c添加到工程中。一般設(shè)計(jì)人員會采用文件組來組織大的工程,將工程中同一模塊或同一類型的源文件放入一個(gè)文件組中。點(diǎn)擊ProjectConponents,Environment and BooksProject Components創(chuàng)建文件組來管理啟動代碼、源程序和配置文件。 接下來的工作就是編譯連接工程了。單擊
34、Build Target圖標(biāo)可編譯連接工程文件,出現(xiàn)錯(cuò)誤時(shí),會在Output Window的Build頁中顯示錯(cuò)誤和警告信息。也可以使用調(diào)試器來調(diào)試源程序,我們直接把程序下載到開發(fā)板中進(jìn)行目標(biāo)調(diào)試。應(yīng)用程序在調(diào)試通過后,需要生成HEX文件,用于下載到編程器或仿真器中。生成HEX文件后下載到目標(biāo)設(shè)備中,至此嵌入式開發(fā)完成。在此次設(shè)計(jì)中,我們按照流程走到最后一步,然后在MDK中點(diǎn)擊FlashDownload下載代碼到STM32F103開發(fā)板中。用USB線連接電腦,查看設(shè)備管理器,看一看設(shè)備是否識別,驅(qū)動是否自動安裝成功。如果設(shè)備已經(jīng)成功安裝,試用開發(fā)板的四個(gè)按鍵操縱鼠標(biāo)箭頭。如果可以上下左右移動,
35、就表示USB鼠標(biāo)設(shè)計(jì)成功了。第4章 USB鼠標(biāo)的實(shí)現(xiàn)4.1 USB簡易鼠標(biāo)的程序編寫 因?yàn)槲覀兊腟TM32F103開發(fā)板上只有四個(gè)按 鍵,所以只能實(shí)現(xiàn)鼠標(biāo)光標(biāo)的上下左右移動,不能實(shí)現(xiàn)鼠標(biāo)左右鍵的功能。由于USB協(xié)議及接口相當(dāng)復(fù)雜,MDK自帶的STM32F10 x的固件庫中單獨(dú)提供了USB的相關(guān)函數(shù)庫,在編寫程序代碼時(shí)需要將兩個(gè)庫函數(shù)包含到編譯路徑中。USB鼠標(biāo)的程序比較復(fù)雜,除了庫文件和USB函數(shù)庫文件之外,還包含了8個(gè)源文件,其中STM32F10 x.s是啟動代碼,這里不再多說。下面是設(shè)計(jì)中非常重要的7個(gè)源文件(具體的程序代碼見附錄):1、main.c 該文件中主要包含兩個(gè)函數(shù),其中main
36、函數(shù)初始化系統(tǒng)以及USB接口,之后不斷查詢四個(gè)按鍵是否按下。如果確定有按鍵按下則向USB緩沖器發(fā)出相關(guān)數(shù)據(jù)。Delay函數(shù)用于延遲。2、usb_desc.c該文件中沒有任何函數(shù),只是包含一些定義USB設(shè)備的描述符常數(shù),由于USB鼠標(biāo)是一個(gè)標(biāo)準(zhǔn)的USB設(shè)備,所以相關(guān)的參數(shù)也比較容易得到。如果是開發(fā)非標(biāo)準(zhǔn)的USB設(shè)備的話,則必須開發(fā)相應(yīng)的在電腦上運(yùn)行的驅(qū)動軟件。3、stm32f10 x_it.c該文件是用來控制USB中斷服務(wù)用的。USB中斷的情況分很多種,在此次設(shè)計(jì)中我們只是調(diào)用usb_istr.c文件中的中斷函數(shù)。4、usb_istr.c該文件中只有一個(gè)函數(shù),就是上面提到的用于控制USB中斷的U
37、SB_Istr函數(shù),此函數(shù)的主要作用是對各類引起USB中斷的事件作輪詢處理。5、usb_prop.c該文件用于控制USB協(xié)議在設(shè)備中的具體實(shí)現(xiàn),例如初始化、SETUP包、IN包、OUT包等等。6、usb_pwr.c該文件中包含處理上電、掉電、掛起和喚醒事件的函數(shù)。7、hw_config.c該文件包含系統(tǒng)配置的函數(shù)和處理四個(gè)按鍵動作的函數(shù)。其中Set_USBClock函數(shù)用于配置USB端口時(shí)鐘;Set_System函數(shù)用于配置時(shí)鐘、通用端口;USB_Cable_Config函數(shù)配置USB電纜狀態(tài);USB_Interrupts_Config函數(shù)用于配置USB中斷;JoyState函數(shù)用于獲取按鍵狀
38、態(tài);Joystick_Send用于向USB端口發(fā)送按鍵的事件。HID設(shè)備實(shí)現(xiàn)的重點(diǎn)在于枚舉是否成功,所以程序設(shè)計(jì)的重點(diǎn)在于標(biāo)準(zhǔn)描述符部分的編寫,因?yàn)槊杜e過程就是檢查USB設(shè)備發(fā)送的USB標(biāo)準(zhǔn)請求能否正常返回的過程。USB協(xié)議規(guī)定了標(biāo)準(zhǔn)的設(shè)備請求為八個(gè)字節(jié)。這八字節(jié)在默認(rèn)狀態(tài)下由控制端點(diǎn)零發(fā)出,用在控制傳輸?shù)慕⑦^程中。任何USB設(shè)備都要能夠接收大于八字節(jié)的數(shù)據(jù)。USB協(xié)議規(guī)定了十一個(gè)標(biāo)準(zhǔn)請求,表4.1為各種請求的名字及代碼。表4.1 標(biāo)準(zhǔn)請求及代碼標(biāo)準(zhǔn)請求值標(biāo)準(zhǔn)請求值GET_STATUS0GET_CONFIGURATION8CLEAR_FEATURE1SET_CONFIGURATION9SET
39、_FEATURE3GET_INTERFACE10SET_ADDRESS5SET_INTERFACE11GET_DISCRIPTOR6SYNCH_FRAME12SET_DISCRIPTOR7其中獲取描述符請求GET_DESCRIPTOR在枚舉過程中用的最多。主機(jī)通過發(fā)送獲取描述符的請求獲取設(shè)備的各種描述符,這樣就可以得知設(shè)備的端點(diǎn)情況、設(shè)備類型等各種信息。表4.2是獲取描述符請求的結(jié)構(gòu)。表4.2 獲取描述符請求的結(jié)構(gòu)bmRequestTypebRequestwValuewIndexwLength數(shù)據(jù)過程0 x800 x06描述符類型和索引0或語言ID描述符長度描述符 在上表中的wValue這一項(xiàng)
40、中,低字節(jié)表示索引號,其具體的作用是在相同種類的描述符中確定一個(gè)描述符。它的高字節(jié),也就是第二字節(jié),用來描述類型編號。各種描述符的類型編號如表4.3所示。設(shè)備在收到描述符請求后,就會按照描述符類型的編號,返回對應(yīng)的描述符。wIndex用在需要獲取字符串的過程中,可以用它來標(biāo)明字符串的語言ID號,其他時(shí)候?yàn)榱?。?.3 描述符類型及編號類型設(shè)備描述符配置描述符字符串描述符接口描述符端點(diǎn)描述符編號12345 對于全速模式和低速模式,只有獲取設(shè)備、配置和字符串描述符這三種。在返回配置描述符的時(shí)候,接口描述符、端點(diǎn)描述符和類特殊描述符(如HID描述符和報(bào)告描述符)要一起返回,這兩類描述符不能單獨(dú)請求返
41、回。圖4.1是HID設(shè)備描述符的結(jié)構(gòu)。字符串描符設(shè)備描述符字符串描符設(shè)備描述符 配置描述符配置描述符接口描述符接口描述符HID描符符HID描符符報(bào)告描符符物理串描符符端點(diǎn)描述符報(bào)告描符符物理串描符符端點(diǎn)描述符圖4.1 HID設(shè)備描述符結(jié)構(gòu)4.2 USB鼠標(biāo)的運(yùn)行程序采用JTAG下載,將開發(fā)板通過下載器連接到電腦,并用一根USB數(shù)據(jù)線把開發(fā)板連接到電腦的USB上。打開設(shè)計(jì)目錄下的project.uvproj文件,編譯連接工程。檢查無誤后,點(diǎn)擊“Target Option”按鈕可查看芯片類型和下載方式,點(diǎn)擊“Debug”設(shè)置完成后,在主界面點(diǎn)擊“Download”下載。重啟開發(fā)板。電腦會提示“找到
42、新的USB設(shè)備”,因?yàn)槭菢?biāo)準(zhǔn)USB設(shè)備,所電腦會自動安裝驅(qū)動。分別控制開發(fā)板上的四個(gè)鍵,觀察電腦屏幕上鼠標(biāo)光標(biāo)的變化,如果光標(biāo)隨按鍵按下移動,則表明程序運(yùn)行成功,一個(gè)USB簡易鼠標(biāo)就做好了。4.3 硬件實(shí)現(xiàn)圖4.2所示為設(shè)備管理器上顯示的已成功安裝的USB鼠標(biāo)。圖 4.2 設(shè)備管理器 圖4.3為STM32F103開發(fā)板。圖4.3 STM32F103開發(fā)板設(shè)計(jì)總結(jié) 隨著計(jì)算機(jī)技術(shù)的發(fā)展,個(gè)人電腦的價(jià)格越來越低,現(xiàn)在基本上每個(gè)家庭都有一臺電腦,而鼠標(biāo)作為與電腦配套的設(shè)備之一,正處于開發(fā)研制的高潮。通過學(xué)習(xí)設(shè)計(jì)USB鼠標(biāo),不僅與時(shí)代接軌,畢業(yè)之后可以從事相關(guān)工作,而且也為嵌入式系統(tǒng)的開發(fā)奠定了基礎(chǔ)。
43、論文研究了基于STM32的嵌入式系統(tǒng)的實(shí)現(xiàn)方案,并對HID協(xié)議和USB的標(biāo)準(zhǔn)請求進(jìn)行了深入學(xué)習(xí),最終實(shí)現(xiàn)了以STM32為核心的USB簡易鼠標(biāo)。此鼠標(biāo)屬于HID類設(shè)備,在現(xiàn)在的各種Windows系統(tǒng)中都可以即插即用,不需要再開發(fā)安裝驅(qū)動程序?,F(xiàn)在的電腦都至少配備了兩個(gè)以上的USB接口,不夠用的話,還可以用USB集線器拓展,非常方便,所以USB設(shè)備的應(yīng)用前景非常廣闊。在完全掌握設(shè)計(jì)USB鼠標(biāo)之后,設(shè)計(jì)其他的HID設(shè)備也會非常簡單。 本論文主要完成了以下工作: 1、學(xué)習(xí)了USB協(xié)議,并對HID設(shè)備進(jìn)行了深入的研究與分析; 2、了解STM32單片機(jī),熟練掌握了STM32F103開發(fā)板的使用; 3、對H
44、ID設(shè)備的開發(fā)流程開發(fā)和程序進(jìn)行分析與學(xué)習(xí); 4、編寫了程序代碼并下載驗(yàn)證,對程序中的錯(cuò)誤經(jīng)過多次的修改,最終達(dá)到理想結(jié)果。 當(dāng)然在設(shè)計(jì)過程中也出現(xiàn)了這樣那樣的問題,特別是在對USB協(xié)議的理解上,因?yàn)槲也皇菍W(xué)嵌入式的,看了一個(gè)月的書都沒弄懂USB是怎么通信的。本來選這個(gè)題目就是為了學(xué)東西,雖然我確實(shí)沒有什么天賦,但不論遇到什么困難,都不能讓我止步。最終在我看完了報(bào)告描述符的實(shí)現(xiàn)方法之后,明白了整個(gè)USB鼠標(biāo)的實(shí)現(xiàn)過程。還有就是設(shè)備有顯示但就是不能工作的問題,通過向同學(xué)和老師請教,原來是報(bào)告描述符的程序出錯(cuò),修改之后就完美運(yùn)行了。附 錄附錄A main.c/* File : main.c* Ha
45、rdware Environment: stm32f103* Build Environment : RealView MDK-ARM Version: 4.35* Version : V1.0* By : fakor*/*Includes */#include stm32f10 x.h#include usb_lib.h#include hw_config.h#include usb_pwr.h#ifdef _GNUC_ /* With GCC/RAISONANCE, small printf (option LD Linker-Libraries-Small printf set to Y
46、es) calls _io_putchar() */ #define PUTCHAR_PROTOTYPE int _io_putchar(int ch)#else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endif /* _GNUC_ */* Private function prototypes */void Delay (uint32_t nCount);/* Function Name : main* Description : Main program* Input : None* Output : None* Retu
47、rn : None* Attention: None*/int main(void)Set_System();USB_Interrupts_Config();Set_USBClock();USB_Init();while (1) if (bDeviceState = CONFIGURED) if (JoyState() != 0) Joystick_Send(JoyState(); /* Function Name : Delay* Description : Delay Time* Input : - nCount: Delay Time* Output : None* Return : N
48、one* Attention : None*/void Delay (uint32_t nCount) for(; nCount != 0; nCount-) /* Function Name : GPIO_Configuration* Description : Configure GPIO Pin* Input : None* Output : None* Return : None* Attention : None*/void GPIO_Configuration(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphCloc
49、kCmd( RCC_APB2Periph_GPIOB , ENABLE); /* * LED1 - PB15 , LED2 - PB14 , LED3 - PB13 , LED4 - PB12 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB,
50、 &GPIO_InitStructure); #ifdef USE_FULL_ASSERT/* * brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * param file: pointer to the source file name * param line: assert_param error line source number * retval None */void assert_failed(uin
51、t8_t* file, uint32_t line) /* User can add his own implementation to report the file name and line number, ex: printf(Wrong parameters value: file %s on line %drn, file, line) */ /* Infinite loop */ while (1) #endif/*END FILE*/附錄B usb_desc.c/* * File Name : usb_desc.c * Author : fakor * Version : V1
52、.1 * Date : 05/21/2015 * Description : Descriptors for Joystick Mouse Demo* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
53、DIRECT,* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.*/* Includes */#include usb_lib.h#include usb_desc.h/* Private typedef */* P
54、rivate define */* Private macro */* Private variables */* Extern variables */* Private function prototypes */* Private functions */*USB Standard Device Descriptor* 標(biāo)準(zhǔn)設(shè)備描述符*/const uint8_t Joystick_DeviceDescriptorJOYSTICK_SIZ_DEVICE_DESC = 0 x12, /*bLength 描述符長度*/USB_DEVICE_DESCRIPTOR_TYPE, /*bDescri
55、ptorType描述符類型(設(shè)備描述符 為0 x01)*/ 0 x00, /*bcdUSB USB協(xié)議版本*/ 0 x02, 0 x00, /*bDeviceClass類代碼*/ 0 x00, /*bDeviceSubClass子類代碼*/ 0 x00, /*bDeviceProtocol設(shè)備使用的協(xié)議*/ 0 x40, /*bMaxPacketSize 64端點(diǎn)0最大包長*/ 0 x83, /*idVendor (0 x0483)廠商ID*/ 0 x04, 0 x10, /*idProduct = 0 x5710產(chǎn)品ID*/ 0 x57, 0 x00, /*bcdDevice rel. 2.
56、00設(shè)備版本號*/ 0 x02, 1, /*Index of string descriptor describing Manufacturer描述廠商的字符串的索引 */ 2, /*Index of string descriptor describing product描述產(chǎn)品的字符串的索引*/3, /*Index of string descriptor describing the device serial number產(chǎn)品序列號字 符串的索引 */ 0 x01 /*bNumConfigurations可能的配置數(shù)*/ ; /* Joystick_DeviceDescriptor *
57、/* USB Configuration Descriptor*配置描述符 */* All Descriptors (Configuration配置, Interface接口, Endpoint端點(diǎn), Class類, Vendor廠商 */const uint8_t Joystick_ConfigDescriptorJOYSTICK_SIZ_CONFIG_DESC = 0 x09, /* bLength: Configuation Descriptor size */ USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configur
58、ation */ JOYSTICK_SIZ_CONFIG_DESC, /* wTotalLength: Bytes returned */ 0 x00, 0 x01, /*bNumInterfaces: 1 interface接口數(shù)*/ 0 x01, /*bConfigurationValue: Configuration value配置*/ 0 x00, /*iConfiguration: Index of string descriptor describing the configuration字符串索引號*/ 0 xE0, /*bmAttributes: bus powered總線供電
59、 */0 x32, /*MaxPower 100 mA: this current is used for detecting Vbus檢測電源*/ /*Descriptor of Joystick Mouse interface 接口*/ /* 09 */ 0 x09, /*bLength: Interface Descriptor size*/USB_INTERFACE_DESCRIPTOR_TYPE,/*bDescriptorType: Interface descriptor type*/ 0 x00, /*bInterfaceNumber: Number of Interface*/
60、 0 x00, /*bAlternateSetting: Alternate setting*/ 0 x01, /*bNumEndpoints*/ 0 x03, /*bInterfaceClass: HID*/ 0 x01, /*bInterfaceSubClass : 1=BOOT, 0=no boot*/ 0 x02, /*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/0, /*iInterface: Index of string descriptor*/* Descriptor of Joystick Mouse HID *HID描
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 常州市溧陽中學(xué)高三地理二輪復(fù)習(xí)區(qū)域地理作業(yè)
- 2026年珠寶鑒定師能力(品質(zhì)評估)考題及答案
- 2025年大學(xué)環(huán)境工程(污水處理工藝設(shè)計(jì))試題及答案
- 2026年專利代理師(專利法律知識)試題及答案
- 2026下半年托福(iBT)口語話題素材與應(yīng)答技巧
- 2025年中職水產(chǎn)養(yǎng)殖技術(shù)(成魚養(yǎng)殖)試題及答案
- 高一生物(真題演練)2027年上學(xué)期期末考核卷
- 2026年注冊公路工程師(專業(yè)考試)試題及答案
- 2025年大學(xué)自動化(機(jī)器人減排研究)試題及答案
- 金融科技 習(xí)題及答案題庫匯 - 第1-6章
- DB53∕T 1269-2024 改性磷石膏用于礦山廢棄地生態(tài)修復(fù)回填技術(shù)規(guī)范
- GB/T 43935-2024礦山土地復(fù)墾與生態(tài)修復(fù)監(jiān)測評價(jià)技術(shù)規(guī)范
- 酸棗種植知識講座
- Axure RP9 網(wǎng)站與App原型設(shè)計(jì)實(shí)戰(zhàn)案例教程PPT完整全套教學(xué)課件
- 《生于憂患死于安樂》文章結(jié)構(gòu)
- 1+X測繪地理信息智能應(yīng)用練習(xí)題(含參考答案)
- 譯林版五年級英語上冊全冊課件
- 磷石膏基公路基層材料 技術(shù)規(guī)范 編制說明
- 電大??啤豆芾碛⒄Z1》歷年期末考試試題及答案匯編
- 《非政府組織管理》教學(xué)大綱
- GB/T 19809-2005塑料管材和管件聚乙烯(PE)管材/管材或管材/管件熱熔對接組件的制備
評論
0/150
提交評論