基於STM32的 USB設計 --單片機程序篇

2020-12-25 電子產品世界

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

本文引用地址:http://www.eepw.com.cn/article/170827.htm

  當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例子的配置。

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

相關焦點

  • avr單片機和stm32區別與優缺點分析
    摘要:avr單片機和stm32單片機是目前使用較廣泛的單片機,那麼avr單片機和stm32單片機有什麼區別呢?有什麼優劣勢呢?   二、stm32單片機介紹   由ST廠商推出的stm32系列單片機,行業的朋友都知道,這是一款性價比超高的系列單片機,應該沒有之一,功能及其強大。
  • 51,AVR,PIC,MSP430,STM32單片機比較
    ,eeprom大,出廠時程序引導區就已經加密,並且stc解密的市面價格在1.5w到2.5w之間,可見解密難度大,在一定程度上保護了單片機工程師的利益和產品開發商的利益。生產時就已經考慮到與傳統51的兼容問題,兼容做的很好,又增加了許多功能,軟復位功能我比較喜歡。缺點:資料就是宏晶網上的資料,資料少,不適合初學者---我指學習它自己增加的功能。
  • stm32屬於arm嗎_arm和stm32的區別
    業內最強大的產品陣容,基於工業標準的處理器,大量的軟硬體開發工具,讓STM32單片機成為各類中小項目和完整平臺解決方案的理想選擇。按內核架構分為不同產品系列。   ARM本意是微處理器行業的一家知名企業,英國ARM公司是全球領先的半導體智慧財產權 (IP) 提供商。全世界超過95%的智慧型手機和平板電腦都採用ARM架構。
  • 基於STM32的Mifare IC卡讀寫卡器設計
    系統以STM32F103C8T6為主控晶片,讀寫卡晶片採用MFRC522晶片(支持14443A協議,其頻率為13.56MHz),採用SPI通訊方式實現與Mifare IC卡的通訊;利用雙線並繞的方式設計PCB天線,大幅提高了讀寫卡器的天線信號強度和生產成品率。上位機軟體基於VC6.0底層代碼編寫,方便地實現了對Mifare IC卡的讀寫。
  • 基於單片機的交通燈信號控制器設計(含源程序和電路圖)
    打開APP 基於單片機的交通燈信號控制器設計(含源程序和電路圖) 佚名 發表於 2009-05-31 15:15:37 基於單片機的交通燈信號控制器設計(含源程序和電路圖)設計一個基於單片機的交通燈信號控制器。
  • 基於MSP430單片機編程器的設計
    2.系統設計 基於MSP430的單片機編程器以MSP430F149為核心,主要由鍵盤、顯示、串口、燒寫、電平轉換、電源和存儲模塊構成。系統結構框圖如圖1所示。 MAX232晶片是依照RS-232標準串口設計的接口電路,用+5V單電源供電。MAX232接MSP430F149和上位機之間進行通訊。 3.3、存儲模塊 如圖3基於MSP430編程器的I2C存儲模塊為EEPROM存儲器,選用內存為8KB的AT24C16晶片。
  • 圖解單片機下載程序電路原理之USB轉串口線、CH340、PL2303、MAX232晶片的使用!
    單片機軟體開發裡面第一步當屬下載程序了,如果這一步都有問題,那麼後面的一切便無從談起,本人當初剛接觸單片機時,對於下載電路方法及原理也是一頭霧水。好在隨著經驗的積累以及自己的努力探求,現在對此問題算是有了點點自己的理解。故今天在此針對常用51單片機下載程序問題做下詳解,以求新手們少走彎路。當然,有誤之處還望各位指教!
  • 基於51單片機定時器的電子時鐘設計方案
    今天我們將會為大家分享一種比較基礎的電子時鐘設計方案,該方案基於51單片機定時器進行設計,精度較高,時鐘鬧鐘調節簡單。軟體設計在這種基於單片機定時器的時鐘設計方案中,本系統的軟體系統可以分為主程序、定時計數中斷程序、時間調整程序、延時程序四大模塊。軟體系統的流程圖如下圖圖6所示。
  • 基於單片機旋轉時鐘的設計
    摘要:目前,社會、家庭普遍使用的是機械錶盤時鐘,而一款打破傳統的電子旋轉時鐘如果推出就能夠以其新穎的創意來吸引人們,於是文章就研究並設計了一個基於單片機的電子旋轉時鐘。而一款旋轉時鐘不僅在創意上擺脫了傳統時鐘的設計而且也能迎合人們獵奇的心理,並且功能也可以多樣化,不僅可以顯示時間、日期,甚至連文字都能夠顯示。文章基於單片機設計了一款跟傳統機械時鐘一樣具有秒針、分針、時針和錶盤刻度的旋轉時鐘,並且具有準確顯示即時時間和校準時間功能,且均可由紅外遙控器方便完成。
  • 基於單片機與PC通信的數據採集控制系統設計研究
    從這個角度來看,基於單片機與PC 通信的數據採集控制系統設計研究具有非常重要的現實意義。     1. 系統的基本組成   1. 1 系統的基本架構   文中構建的基於單片機與PC 通信的數據採集控制系統基本架構如圖1 所示:
  • 電子類-單片機類畢業設計論文創新選題
    的自動泡茶機設計基於STM32的智能快遞空箱基於單片機的刷卡小車設計智能電錶系統中IC卡電費預存模塊的設計與實現基於STC89C52的指紋解鎖系統設計基於STC15單片機的射頻門禁系統的設計>基於單片機的室內安全裝置基於Zynq的遠程智能監控小車設計基於STC89C52單片機的電子琴基於iFIX平臺的數據採集與監視控制基於STM32的語音去噪系統設計基於EKF的UUV單信標導航定位方法研究
  • Stm32單片機開發KEIL啟動文件彙編語言詳解
    文章目錄簡介啟動文件彙編代碼相關指令堆棧空間的定義初始化中斷向量表復位中斷函數中斷函數的弱(WEAK)聲明用戶棧和堆初始化簡介我們在做單片機編程的時候,大部分都是用KEIL自帶的啟動文件來使程序進入C語言main函數,然後進行C語言編程開發的工作。那麼這個啟動文件到底做了什麼呢?
  • 基於STC單片機的智能燈控系統設計
    摘要:針對目前眾多公共場所照明用電浪費嚴重的問題,設計了一套基於STC單片機的智能燈控系統。 考慮到以上因素,按照節能、減排、智能和實用的要求,筆者針對節能滷鎢燈設計出基於STC12C5A60S2單片機的智能燈控系統,利用人體紅外熱釋傳感器和可見光照度傳感器構成環境檢測系統,大大提高了燈控系統的靈敏度、精確度和實用性。
  • 基於單片機的視力保護器設計
    針對這一問題,本文將單片機與視力保護相結合,利用單片機晶片的智能處理功能,結合超聲波測距原理,光敏電阻隨光強變化的特點,單片機定時器T0,T1的工作原理,以及LCD1602液晶顯示器的使用方法,設計了一個多功能視力保護器。
  • 基於AT89C51單片機的十進位計算器系統設計
    基於AT89C51單片機的十進位計算器系統設計
  • 基於CH371的USB接口虛擬示波器設計
    二、硬體設計 此虛擬示波器的數據採集器由以下功能模塊組成:前端信號變換模塊、高速模數轉換模塊、高速數據緩衝模塊、單片機控制模塊、USB接口模塊和電源模塊。前端信號變換、高速數據採集有成熟的方案並且可根據需要的指標,譬如採樣率、量程控制、採樣深度等進行設計,我們這裡主要討論USB接口部分的開發。
  • 基於C51單片機的遙控小車設計與製版
    手動布局、布線;二、設計思路此次試驗採用基於C51單片機的遙控小車的設計。1.1、存儲器89C51 片內有 ROM(程序存儲器,只能讀)和 RAM(數據存儲器,可讀可寫) 兩類, 他們有各自獨立的存儲地址空間, 與一般微機的存儲器配置方式很不相同。1、程序存儲器(ROM) 存放程序,一些原始數據和表格。89C51 及 8751 的片內程序存儲器容量為 4KB,地址從 0000H 開始,用於存放程序和表格常數。
  • 基於單片機設計的音樂馬桶
    畢業設計前的最後一項課程設計,班上同學每人一個題目。我的:音樂馬桶。這次程序倒是不難,也才用了51單片機的兩個I/O口,不過方案思路卻是推倒老師自立的。假如以後回看有什麼問題,加以反思。
  • 基於51單片機的電子音樂盒的課程設計
    1.設計目的和要求1.1 設計目的(1) 通過設計,查閱相關資料,掌握如何利用單片機設計產品,同時了解與單片機有關的軟體模擬器的使用及取字模塊軟體的使用方法。(2) 通過本課程設計鞏固並擴展單片機課程的基本概念、基本理論、分析方法和實現方法。
  • 基於單片機的ADC0809數字電壓表設計報告(彙編語言)
    1.2 數字電壓表基本工作原理本文介紹了一種基於單片機的簡易數字電壓表的設計。該設計主要由三個模塊組成:A/D轉換模塊,數據處理模塊及顯示模塊。A/D轉換主由晶片ADC0809來完成,它負責把採集到的模擬量轉換為相應的數字量在傳送到數據處理模塊。