<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于STM32的USB設計 (單片機程序篇)

基于STM32的USB設計 (單片機程序篇)

作者: 時(shí)間:2012-10-14 來(lái)源:網(wǎng)絡(luò ) 收藏

首先,我們來(lái)看看usb的工作過(guò)程。

本文引用地址:http://dyxdggzs.com/article/170775.htm

當usb設備接入到主機時(shí),主機開(kāi)始枚舉usb設備,并向usb設備發(fā)出指令要求獲取usb設備的相關(guān)描述信息,其中包括設備描述(device descriptor)、配置描述(configuration descriptor)、接口描述(interface descriptor)、端點(diǎn)描述(endpoint descriptor)等。這些信息是通過(guò)端點(diǎn)0(endpoint 0)傳送到主機的。獲取各種描述信息后,操作系統會(huì )為其配置相應的資源。這樣主機就可以與設備之間進(jìn)行通信了。

usb通訊有四種通訊方式控制(control)、中斷(interrupt)、批量(bulk)和同步( synchronous)。usb通訊是通過(guò)管道(pipe)實(shí)現的。管道是一個(gè)抽象的概念,指的是主機與設備之間通訊的虛擬鏈路。不如說(shuō)一個(gè)usb通訊 主機A和設備B,其中有bulk in(批量輸入)、bulk out(批量輸出)、control out(控制輸出)三種通訊方式,那么A與B之間的通訊管道就有三個(gè)。(這里明確一個(gè)概念,在usb通信中數據流向都是相對設備來(lái)說(shuō)的,in表示設備向主 機傳送數據,out表示表示主機箱設備傳輸數據)。在設備一端,每個(gè)管道對應一個(gè)端點(diǎn),端點(diǎn)配置相關(guān)的寄存器和緩沖區。在通訊之前需對端點(diǎn)進(jìn)行相關(guān)設置。 在通信中,只需向緩沖寫(xiě)或讀數據,并置位相關(guān)比特位即可。

下面具體從usb的中斷輸入輸出來(lái)講述keil C mdk開(kāi)發(fā)環(huán)境的stm32的接口。值得一提的是,st或相關(guān)公司給我們提供許多封裝函數和相關(guān)例子,我們可以根據其中的例子并進(jìn)行修改即可實(shí)現我們自己需要的usb通訊。

1.usb描述符配置

從上面的講述可以看出,usb描述符是usb通訊的前提。主機必須先了解設備后才能與其進(jìn)行通訊。在st提供的例子中,描述符都在usb_des.c文件進(jìn)行定義,下面就其中的Joystick例子說(shuō)明usb描述負的配置。

1.1設備描述符

const u8 Joystick_DeviceDescriptor[JOYSTICK_SIZ_DEVICE_DESC] =

{

0x12, /*本描述長(cháng)度*/

_DEVICE_DESCRIPTOR_TYPE, /*指明為設備描述符*/

0x00,

0x02,

0x00,

0x00,

0x00,

0x40, /*最大數據包大小為64字節(對于端點(diǎn)0而言)*/

0x84, /*生產(chǎn)商ID*/

0x19,

0x06, /*產(chǎn)品ID*/

0x04,

0x00,

0x02,

1,

2,

3,

0x01 /*配置描述符數目*/

}

設備描述符兩個(gè)重要參數是生產(chǎn)商ID和產(chǎn)品ID,主機將根據以上兩個(gè)ID為設備選擇相應驅動(dòng)。在我們的應用中,我們一般只需修改例子中的這兒兩個(gè)參數即可完成設備描述符的設置。

1.2配置描述符

const u8 Joystick_ConfigDescriptor[JOYSTICK_SIZ_CONFIG_DESC] =

{

0x09,

_CONFIGURATION_DESCRIPTOR_TYPE,

JOYSTICK_SIZ_CONFIG_DESC,

0x00,

0x01, /*接口數目*/

0x01, /*Set_Configuration命令所需要的參數值*/

0x00, /*描述該配置的字符串的索引值*/

0xE0, /*供電模式的選擇,bus供電、自供電、支持wakeup*/

0x32, /*最大供電電流*/

/************** 接口1配置****************/

0x09,

USB_INTERFACE_DESCRIPTOR_TYPE,

0x00, /*接口編號*/

0x00,

0x02, /*端點(diǎn)數*/

0x00,

0x00,

0x00,

0, /*接口描述符索引值*/

/******************** 端點(diǎn)1輸出描述********************/

0x07,

USB_ENDPOINT_DESCRIPTOR_TYPE,

0x81, /*端點(diǎn)地址,b.7表示方向(1為in,0為out)b.0-b.3為端點(diǎn)標號*/

0x03, /*端點(diǎn)數據傳輸方式*/

0x08, /*最大數據包大小*/

0x00,

0x20,

/******************** 端點(diǎn)1輸入描述********************/

0x07,

USB_ENDPOINT_DESCRIPTOR_TYPE,

0x01, /*端點(diǎn)地址*/

0x03, /*端點(diǎn)數據傳輸方式*/

0x40, /*最大數據包大小*/

0x00,

0x20,

}

配置描述符中包括了接口、端點(diǎn)的配置。如果設備為HID設備,在配置描述符中還應加入HID描述,具體描述可以參照Joystick例子的配置。

還有一些其他配置可以參可相關(guān)資料與例子加以理解。



關(guān)鍵詞: 單片機 程序 設計 USB STM32 基于

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>