前段時間公司開發了一個安卓外設,主要是用某寶淘來的demo 在stm32F103的usb功能來和安卓設備的usb來通訊
敘述之前先來一個整體的框圖吧:
需要準備的設備有:
①.安卓手機或者安卓pad,(手機必須支持otg功能,否則就得用host功能了)
②.otg轉接線或者轉接頭
③.安卓數據線(一定要是能通訊數據的線纜,有些山寨的這個線只有2根線,沒有數據線)
④.帶有usb功能的單片機(這個usb需要能支持用戶自行定義)
接下來就開始搗鼓stm32單片機的程序了,下面是usb功能的代碼:
usb功能看了一下主要是借助hid的標準協議上衍生而來的一個usb標準設備
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
* File Name : usb_desc.c
* Author : MCD Application Team
* Version : V3.2.1
* Date : 07/05/2010
* Description : Descriptors for Mass Storage Device
********************************************************************************
* 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 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_desc.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Extern variables ----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/* USB Standard Device Descriptor */
const u8 CustomHID_DeviceDescriptor[CUSTOMHID_SIZ_DEVICE_DESC] =
{
0x12, /*bLength */
USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
0x00,0x02, /*bcdUSB */
0x00, /*bDeviceClass*/
0x00, /*bDeviceSubClass*/
0x00, /*bDeviceProtocol*/
0x08, /*bMaxPacketSize40*/
0x71,0x04, /*idVendor (0x0471)*/
0x08,0x24, /*idProduct = 0x2408*/
0x00,0x02, /*bcdDevice rel. 2.00*/
1, /*Index of string descriptor describing manufacturer */
2, /*Index of string descriptor describing product*/
3, /*Index of string descriptor describing the device serial number */
0x01 /*bNumConfigurations*/
}
; /* CustomHID_DeviceDescriptor */
/* USB Configuration Descriptor */
/* All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
const u8 CustomHID_ConfigDescriptor[ENEPOINT_NUM*7+18] =
{
0x09, /* bLength: Configuation Descriptor size */
USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
ENEPOINT_NUM*7+18, /*CUSTOMHID_SIZ_CONFIG_DESC, wTotalLength: Bytes returned */
0x00,
0x01, /* bNumInterfaces: 1 interface */
0x01, /* bConfigurationValue: Configuration value */
0x00, /* iConfiguration: Index of string descriptor describing
the configuration*/
0xC0, /* bmAttributes: Bus powered */
0x32, /* MaxPower 100 mA: this current is used for detecting Vbus */
/************** Descriptor of Custom HID interface ****************/
/* 09 */
0x09, /* bLength: Interface Descriptor size */
USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: Interface descriptor type */
0x00, /* bInterfaceNumber: Number of Interface */
0x00, /* bAlternateSetting: Alternate setting */
ENEPOINT_NUM, /* bNumEndpoints */
0x00, /* bInterfaceClass: HID=0X03,其他選0 */
0x00, /* bInterfaceSubClass : 1=BOOT, 0=no boot */
0x00, /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */
0, /* iInterface: Index of string descriptor */
/********************以下只對HID的描述符 Descriptor of Custom HID HID ********************/
/* 18 */
// 0x09, /* bLength: HID Descriptor size */
// HID_DESCRIPTOR_TYPE, /* bDescriptorType: HID */
// 0x10, /* bcdHID: HID Class Spec release number */
// 0x01,
// 0x00, /* bCountryCode: Hardware target country */
// 0x01, /* bNumDescriptors: Number of HID class descriptors to follow */
// 0x22, /* bDescriptorType */
// CUSTOMHID_SIZ_REPORT_DESC,/* wItemLength: Total length of Report descriptor */
// 0x00,
/******************** Descriptor of Custom endpoints ******************/
0x07, /* bLength: Endpoint Descriptor size */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */
/* Endpoint descriptor type */
0x01, /* bEndpointAddress: */
/* Endpoint Address (OUT) */
USB_ENDPOINT_TYPE_BULK,/* bmAttributes: Interrupt endpoint */
0x10,0x00, /* wMaxPacketSize: 32 Bytes max */
0x20, /* bInterval: Polling Interval (20 ms) */
/* 27 */
0x07, /* bLength: Endpoint Descriptor size */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */
0x81, /* bEndpointAddress: Endpoint Address (IN) */
USB_ENDPOINT_TYPE_BULK, /* bmAttributes: Interrupt endpoint */
0x10, 0x00, /* wMaxPacketSize: 32 Bytes max */
0x20, /* bInterval: Polling Interval (32 ms) */
/* 34 */
0x07, /* bLength: Endpoint Descriptor size */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */
/* Endpoint descriptor type */
0x82, /* bEndpointAddress: */
/* Endpoint Address (OUT) */
USB_ENDPOINT_TYPE_BULK,/* bmAttributes: Interrupt endpoint */
0x40,0x00, /* wMaxPacketSize: 512 Bytes max */
0x20 /* bInterval: Polling Interval (20 ms) */
}
;
/* USB String Descriptors (optional) */
const u8 CustomHID_StringLangID[CUSTOMHID_SIZ_STRING_LANGID] =
{
CUSTOMHID_SIZ_STRING_LANGID,
USB_STRING_DESCRIPTOR_TYPE,
0x09,
0x04
}
; /* LangID = 0x0409: U.S. English */
const u8 CustomHID_StringVendor[CUSTOMHID_SIZ_STRING_VENDOR] =
{
CUSTOMHID_SIZ_STRING_VENDOR, /* Size of Vendor string */
USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType*/
/* Manufacturer: "STMicroelectronics" */
'O', 0,
'T', 0,
'G', 0,
};
const u8 CustomHID_StringProduct[CUSTOMHID_SIZ_STRING_PRODUCT] =
{
CUSTOMHID_SIZ_STRING_PRODUCT, /* bLength */
USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */
'S', 0,
'T', 0,
'M', 0,
'3', 0,
'2', 0,
'A',0,
'n',0,
'd',0,
'r',0,
'o',0,
'i',0,
'd',0,
' ',0,
'U',0,
'S',0,
'B',0,
' ',0,
'O', 0,
'T', 0,
'G', 0,
};
u8 CustomHID_StringSerial[CUSTOMHID_SIZ_STRING_SERIAL] =
{
CUSTOMHID_SIZ_STRING_SERIAL, /* bLength */
USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */
'T', 0,
'a', 0,
'o', 0,
'b', 0,
'a', 0,
'o', 0,
'-', 0,
'B', 0,
'e', 0,
'i', 0,
'j', 0,
'i',0,
'n',0,
'g',0,
'Y',0,
上一篇:利用樹莓派打造STM32無線在線調試器!
下一篇:stm32在linux編譯,遠程調試
推薦閱讀
史海拾趣
2005年,重慶平洋電子有限公司迎來了一個重要的合作機會。經過嚴格的篩選和談判,公司與海爾集團達成了先期采購協議,成為海爾集團在重慶市唯一一家免第三方認證的企業。這一合作不僅為公司帶來了穩定的訂單和收益,還進一步提升了公司的品牌影響力和市場競爭力。
1997年3月,德利威電子股份有限公司正式成立,標志著其進入電子行業的起點。憑借創辦人超過二十年的研發和生產經驗,德利威電子從創立之初就注重產品質量和技術創新。在創立初期,德利威電子即獲得了ISO 9002國際標準認證,顯示出其對品質管理的高度重視。同時,其各系列產品也迅速通過了美國UL及加拿大CSA產品安規認證,進一步證明了其產品的安全性和可靠性。
隨著市場的不斷變化和客戶需求的升級,安美通意識到只有不斷創新才能在競爭中立于不敗之地。因此,公司加大了對研發的投入,積極引進高端人才,并與多所高校和研究機構建立了緊密的合作關系。通過持續的技術創新,安美通成功推出了一系列具有自主知識產權的新產品,進一步鞏固了其在行業內的領先地位。
隨著公司規模的擴大和實力的增強,AND Displays開始實施國際化戰略。公司在全球范圍內設立了多個研發中心和生產基地,以便更好地滿足不同地區客戶的需求。同時,公司還加強了與國際同行的交流與合作,共同推動顯示技術的創新與發展。通過全球布局和資源整合,AND Displays逐漸成為了全球顯示行業的領軍企業之一。
以上五個故事從不同角度展示了AND Displays公司在電子行業中的發展歷程和成就。這些故事不僅反映了公司的技術實力和市場競爭力,也體現了公司對環保、可持續發展等社會責任的關注和擔當。
為了進一步擴大市場份額,Banner Engineering公司積極實施全球化戰略。公司在全球范圍內建立了多個生產基地和銷售網絡,以便更好地服務客戶。同時,公司還積極參加國際電子展會和技術交流會議,與國際同行進行合作與交流,不斷吸收新技術和新理念。這些舉措使公司的知名度和影響力得到了進一步提升,也為公司的國際化發展奠定了堅實基礎。
隨著市場的不斷變化和消費者需求的升級,E-San Electronic Co Ltd意識到技術創新是企業持續發展的關鍵。公司投入大量資金和資源,建立了自己的研發團隊,并與多所高校和研究機構建立了合作關系。經過數年的努力,公司成功研發出了一系列具有自主知識產權的核心技術,這些技術不僅提升了產品的性能和質量,也為企業贏得了更多的市場份額。
串口發送數據,long類型,四字節,范圍是0x00 ~ 0x7fffffff 每次發送1個字節,比如0x7abcdeff,第一次發送7a,第二次發送bc,第三次發送de,第四次發送ff 接收端在接收到數據后,要組合成原來的樣子。 該怎么操作?用C語言。… 查看全部問答∨ |
1、wince的backspace也就是vk_back鍵盤消息 在WINCE桌面&焦點不在任務欄上時,一發這個消息就把IE打開 請問有好的解決方法嗎? 或者微軟有明文說明這個是他的一個功能!!!??? 2、是否有人用過這 ...… 查看全部問答∨ |
小弟最近在做一個項目需要將一段結構體鏈表放入片內供程序查詢用 但是放入RAM中不太現實,我用的MSP430F149的RAM只有2K大小,但有60K的Flash存儲 如何在能將這個結構體鏈表放入Flash中呢 結構體定義如下 struct py_subnode{ uns ...… 查看全部問答∨ |
|
大神幫幫忙看看這些線要怎么接才能點亮他!!!!!!!還有這些線都有什么功用麻煩給解釋一下~~~謝謝大神們 大神幫幫忙看看這些線要怎么接才能點亮他!!!!!!!還有這些線都有什么功用怎么接麻煩給解釋一下~~~謝謝大神們… 查看全部問答∨ |