娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年11月10日(星期日)

正在發生

2020年11月10日 | USB通訊的執行過程 - STM32 USB設計

發布者:caoda143 來源: eefocus關鍵字:USB通訊  執行過程  STM32  USB設計 手機看文章 掃描二維碼
隨時隨地手機看文章

  首先,我們來看看usb的工作過程。


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


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


  下面具體從usb的中斷輸入輸出來講述基于keil C mdk開發環境的stm32的USB接口單片機程序設計。值得一提的是,st或相關公司給我們提供許多封裝函數和相關例子,我們可以根據其中的例子并進行修改即可實現我們自己需要的usb通訊程序。


  1.usb描述符配置

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


  1.1設備描述符

  const u8 Joystick_DeviceDescriptor[JOYSTICK_SIZ_DEVICE_DESC] =

  {

  0x12, /*本描述長度*/

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

  0x00,

  0x02,

  0x00,

  0x00,

  0x00,

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

  0x84, /*生產商ID*/

  0x19,

  0x06, /*產品ID*/

  0x04,

  0x00,

  0x02,

  1,

  2,

  3,

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

  }


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


  1.2配置描述符

  const u8 Joystick_ConfigDescriptor[JOYSTICK_SIZ_CONFIG_DESC] =

  {

  0x09,

  USB_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, /*端點數*/

  0x00,

  0x00,

  0x00,

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

  /******************** 端點1輸出描述********************/

  0x07,

  USB_ENDPOINT_DESCRIPTOR_TYPE,

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

  0x03, /*端點數據傳輸方式*/

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

  0x00,

  0x20,

  /******************** 端點1輸入描述********************/

  0x07,

  USB_ENDPOINT_DESCRIPTOR_TYPE,

  0x01, /*端點地址*/

  0x03, /*端點數據傳輸方式*/

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

  0x00,

  0x20,

  }


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


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


2、USB通訊的執行過程。

  首先,當主機數據傳送到USB設備,USB怎樣接收命令和數據呢?USB首先會產生一個中斷,這個中斷在stm32fxxx_it.c文件的 USB_HP_CAN_TX_IRQHandler和USB_LP_CAN_RX0_IRQHandler中定義,一般使用 USB_LP_CAN_RX0_IRQHandler。在這個函數中繼續調用USB_Istr()函數,這個函數是usb通訊的關鍵。它接收到主機命令, 指派調度相應函數進行處理。對于這一點,詳細過程我現在還不是很明白。如果以后搞懂了再補述。


  當USB設備接入主機時,主機要枚舉該USB設備,他將要求USB設備提供自身相關信息,這是通過endpoint0實現的。endpoint0是 一個特殊的端點,每一個接口(interface)必須有endpoint0。一般情況下,我們需要使用多個端點(如前所述,配置描述符定義了端點的數 目、類型、傳輸數據大小等)。在使用端點前需對端點進行初始化。這個過程在usb_prop.c文件中的xxx_reset()函數定義。如我定義端點1 的兩種傳輸方式:

  /* Initialize Endpoint 1 */

  SetEPType(ENDP1, EP_INTERRUPT);

  SetEPRxAddr(ENDP1, ENDP1_RXADDR);

  SetEPRxCount(ENDP1, 8);

  SetEPRxStatus(ENDP1, EP_RX_VALID);

  /* Initialize Endpoint 1 */

  SetEPType(ENDP1, EP_INTERRUPT);

  SetEPTxAddr(ENDP1, ENDP1_TXADDR);

  SetEPTxCount(ENDP1, 64);

  SetEPTxStatus(ENDP1, EP_TX_NAK);

  在定義完端點后,我們就可以使用端點進行數據傳輸了。

  向主機輸入數據(in):IN傳輸過程是

  1.向緩沖區填入數據;

  2.設定USB數據計數器

  3.設置USB輸出有效。

  XXX_send()

  {

  /*copy mouse position info in ENDP1 Tx Packet Memory Area*/

  UserToPMABufferCopy(sendBuffer, ENDP1_TXADDR, 2); /*sendBuffer為要輸出的數據,ENDP1_TXADDR端點1的向外傳輸緩沖區,2為數據大小byte為單位*/

  SetEPTxCount(ENDP1, 2);

  /* enable endpoint for transmission */

  SetEPTxValid(ENDP1);

  }

  注意一般情況下,端點的輸入輸出緩沖區地址沒有定義,須在usb_conf.h中定義具體定義可以參考端點0的定義。

  讀從主機輸出的數據(out):out傳輸過程是

  1.定義out回調函數;

  2.從緩沖區讀出數據:

  3.設置USB輸入有效。

  void EP1_OUT_Callback(void)

  {

  u8 DataLen;

  DataLen = GetEPRxCount(ENDP1);

  PMAToUserBufferCopy(rcvData, ENDP1_RXADDR, DataLen);

  SetEPRxValid(ENDP1);

  }


  注意在一般情況下,EPX_OUT_Callback()回調函數的申明為空執行函數。需將usb_conf.h中#define EPX_IN_Callback NOP_Process隱掉。再在合適的地方從新定義void EP1_OUT_Callback(void)(合適的位置是指定義之后運行不會出現EP1_OUT_Callback為申明的錯誤就行)。


  總結,在此將stm32芯片的usb通訊進行了簡單的闡述。本人水平有限,以上難免會有錯誤,希望大家積極留言,共同探討,共同進步。這篇文章是斷 斷續續寫的,給大家帶來不便,在此向大家道歉了。不管怎樣希望這篇文章能夠對那些還在對stm32usb編程初步摸索的朋友有一點幫助。


關鍵字:USB通訊  執行過程  STM32  USB設計 引用地址:USB通訊的執行過程 - STM32 USB設計

上一篇:基于STM32的USB枚舉過程學習筆記
下一篇:深入解析STM32_USB-FS-Device_Lib庫V0.2

推薦閱讀

集微網消息,今天聯想發布了18/19財年Q2財報,官方稱總共有以下五大看點:①季度營收創記錄:同比增長14%至912億元,四年來新高;②盈利能力倍增:季度稅前利潤14.5億元,達到去年同期的六倍;③坐穩第一:PC市場份額24%,再奪全球無可爭議冠軍;④補齊短板:摩托羅拉手機業務實現盈虧平衡;⑤TO B轉型保持超強動能:數據中心業務營收增58%,超大規模數據中心...
(文章來源:中國機器人網) 在當今的工廠和倉庫中,經??吹綑C器人在四處亂竄,將物品或從一個站點運送到另一個站點。在大多數情況下,機器人可以在開放和已知的布局中輕松導航。但要ta們在狹窄的空間里完成任務,比如在雜亂的貨架后面伸手去拿產品,或者繞著汽車的零件去擰下機油蓋,則要困難得多。 現在,麻省理工學院的工程師已經開發出一種機器人...
空調作為汽車必備的一個配置,能夠解決在冬季和夏季因為環境問題帶來的不舒適性,有了空調無疑也能更好的駕馭車輛,無論是電動汽車還是傳統的燃油車都會搭配,針對于汽車空調傳統的燃油車是依靠內燃機來驅動空調壓縮機,從而實現車輛內部的取暖和制冷,來維護人體最舒適的溫度,隨著電動汽車的興起,在車輛的結構上面,電動汽車與燃油車不同,那么也就是意...
熱像儀是利用紅外探測器和光學成像物鏡接受被測目標的紅外輻射能量分布圖形反映到紅外探測器的光敏元件上,從而獲得紅外熱像圖,這種熱像圖與物體表面的熱分布場相對應。通俗地講熱像儀就是將物體發出的不可見紅外能量轉變為可見的熱圖像。熱圖像的上面的不同顏色代表被測物體的不同溫度。熱像儀在各個行業都有廣泛的應用,那么如何保養熱像儀呢?保養好熱...

史海拾趣

問答坊 | AI 解惑

電池修復中出現的一些問題

1 、電池的端電壓高低是否可以用來判斷電池的好壞? 答:不能。端電壓低是由于電池短路、斷路及沒有電量等原因造成的。 2 、電池修復過程是否需要打開電池? 答:需要打開電池蓋。 3 、什么情況下會出現硫化? 答:過放電,沒有及時進行 ...…

查看全部問答∨

高價求購 Tornado V 2.2.1的序列號

高價求購 Tornado V 2.2.1的序列號 聯系方式:站內消息.…

查看全部問答∨

multisim10 怎么C51寫頭文件 (轉)

要點亮LED,但出錯,認為P0沒有定義,multisim10中C51的頭文件怎么寫? void main() { /* Insert your code here. */    P0=1; } 出錯信息 Multisim  -  2008-09-23 20:49:45 -------------------------- ...…

查看全部問答∨

有人要轉讓TI的DSP和ZIGBEE開發板、開發套件的嗎

有人要轉讓TI的DSP和ZIGBEE開發板、開發套件的嗎,想買來學習一下!~有要轉讓的朋友請把照片和描述發上來,我是買來學習的,價格要便宜一些!~…

查看全部問答∨

大學畢業生反思高校教育:我們的大學怎么了

1 大學畢業生反思高校教育:我們的大學怎么了 目錄  大學畢業生反思高校教育:我們的大學怎么了.................................................... 2  現實的教育是自欺欺人.............................................. ...…

查看全部問答∨

關于LSD-TEST430F22X4學習套件

我最近用LSD-TEST430F22X4學習套件,該套件沒有外部晶振,然后就接了一個普通的32K晶振,感覺晶振沒起振,想請教一下關于該套件的外部晶振問題…

查看全部問答∨

MSP-430具體功能

話說我們這個板子具體可以做什么喲…

查看全部問答∨

開關系統配置——選擇合適的開關矩陣卡路由相關信號尤為重要

選擇合適的開關矩陣卡路由相關信號是獲得理想的測量精度和分辨率的關鍵。如果這些信號是通過一個偏置電流指標為1nA和帶寬為100kHz的開關路由的,那么使用皮安以下的測量儀器和10MHz的C-V測試[1]儀就顯得浪費了。進行交流和直流測量時都必須將開關 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 罗源县| 隆德县| 广宁县| 江西省| 新丰县| 广汉市| 杨浦区| 宣威市| 娱乐| 祁门县| 呈贡县| 平谷区| 灌阳县| 府谷县| 东丽区| 金山区| 东港市| 乐平市| 杨浦区| 石家庄市| 广饶县| 都江堰市| 石泉县| 天峨县| 江北区| 岳池县| 钟山县| 江山市| 天长市| 宁城县| 抚松县| 河间市| 河西区| 平昌县| 洞口县| 夏津县| 宿松县| 康平县| 广宗县| 旬阳县| 南平市|