官术网_书友最值得收藏!

第3章 我們將要實現什么

在簡要介紹了USB設備的開發流程之后,我們將正式進入USB設備的開發階段。首先需要明確:要實現的USB設備是什么?它有哪些功能?具體怎么操作?這些屬于系統需求分析階段,因為只有清晰認識產品最終實現的功能,才能有的放矢地進行USB接口的芯片選型及后續軟硬件的開發工作。

我們要實現的USB設備包含4個發光二極管(Light Emitting Diode, LED)與8個輕觸按鍵(其中一個具有復位功能),它們的狀態可以通過主機進行控制或讀取,其硬件模塊的大體分布如圖3.1所示(不需要很精確,只為方便后續描述)。

圖3.1 USB設備硬件模塊的大體分布

該USB設備硬件的核心是一款基于ARM Cortex-M3內核的STM32F103C8T6單片機,其內置的USB控制器的外部信號線與A型母口連接(如果自行設計硬件模塊,只要有合適的連接線纜,那么使用圖1.8中的任意一種都可以),4個LED可以根據主機發送的數據切換亮滅狀態,主機也可以讀取7個按鍵的狀態(按鍵K8為復位)。由于設備消耗的電流比較小,所以決定直接使用USB主機提供的+5V電源供電。當我們將設計好的固件下載到單片機后,將USB設備通過USB線纜與主機連接后就可以進入工作狀態了。

對USB設備的控制是通過配套的應用程序完成的,最終的界面如圖3.2所示。

圖3.2 應用程序最終的界面

在默認情況下(USB設備未與主機連接時),“控制”與“讀取”按鈕均處于灰色禁用狀態,一旦使用USB線纜將主機與USB設備連接后,主機檢測到USB設備就會首先調整“控制”與“讀取”按鈕進入可用狀態,然后可以進行如下兩種操作。

(1)控制USB設備上LED的狀態。發光二極管組合框中有4個復選框,它們分別對應USB設備上相同位號的LED(高有效,即“勾選”表示LED處于點亮狀態,“未勾選”表示LED處于熄滅狀態)。當你單擊“控制”按鈕后,USB設備上的LED就會立刻進行相應的狀態轉換。

(2)讀取輕觸按鍵的狀態。輕觸按鍵組合框中也有4個復選框,它們分別對應USB設備上相同位號的按鍵(高有效,即“勾選”表示按鍵處于按下狀態,“未勾選”表示按鍵處于彈起狀態)。當你單擊“讀取”按鈕時,應用程序會根據按鍵(K1~K4)的狀態對復選框進行相應的狀態更改。

有些讀者可能想說:這個應用也太簡單了吧!設計一個方波信號發生器或模擬電壓測量之類的應用不是更好嗎?這里的回復是:沒有必要!因為我們已經提過:本書旨在詳盡闡述USB設備的開發思路及透徹理解USB 2.0規范。如果設計一些相對復雜的應用,就意味著必須對單片機中其他與USB控制器無關的模塊做過多闡述。例如,方波信號發生器功能需要使用定時器(Timer),模擬電壓測量功能需要使用模數轉換器(Analog to Digital Converter, ADC),這些都已經偏離了本書撰寫的初衷:避免與某個開發平臺有過多的依賴。除USB控制器外,本書還詳細介紹了STM32F103C8T6單片機中最簡單的通用的輸入/輸出(General-Purpose Input/Output, GPIO)模塊,它用來控制LED與讀取按鍵的狀態,這種簡單應用對于所有平臺都是適用的,因為具體的開發平臺是多種多樣的(很可能你的開發平臺與本書并不相同),即使我們使用某款單片機設計了某些比較復雜的應用,對你也未必有多大的參考價值,而且還分散了學習USB設備開發與理解USB 2.0規范的精力。但是,只要你掌握了USB設備的開發思路,即使開發平臺完全不一樣,對USB設備開發也沒有多大影響。

USB只是一種數據傳輸方式,本質上與SPI、I2C等總線的數據傳輸方式并無不同。只要你能夠通過USB將數據發送到USB設備,或將數據從USB設備讀取出來,就已經達到了本書的目的,至于你使用這些數據做些其他什么具體應用,就不是本書關心的了。

在實際進行USB設備開發時,我們采用了3種方案(配套應用程序的界面與功能完全一樣),你不僅能夠親身體驗不同方案的開發難度,輕松掌握不同的USB設備開發流程,對USB 2.0規范也會有更深刻的理解,而且還有能力進行設備固件內核層的編程。另外,我們還會開發一些諸如USB鼠標、USB鍵盤、USB大容量存儲、USB轉串口、USB聲卡等常用設備,這些都有助于讀者透徹理解與應用USB相關的其他規范,下面就從設計USB設備的硬件電路開始吧!

主站蜘蛛池模板: 安丘市| 玛纳斯县| 永清县| 武功县| 屯门区| 读书| 镶黄旗| 开封市| 曲阳县| 林口县| 伊宁县| 沅江市| 方正县| 平山县| 马山县| 安陆市| 龙川县| 南安市| 朝阳市| 东阿县| 繁峙县| 玉树县| 南部县| 龙岩市| 鹤峰县| 杂多县| 土默特右旗| 松桃| 图木舒克市| 淮阳县| 贵州省| 山阴县| 揭西县| 平顶山市| 定远县| 景洪市| 安康市| 乳源| 泗水县| 从江县| 阿拉善右旗|