历史上的今天
返回首页

历史上的今天

今天是:2025年03月25日(星期二)

正在发生

2020年03月25日 | stm32 usb和安卓手机的通讯过程

2020-03-25 来源:eefocus

前段时间公司开发了一个安卓外设,主要是用某宝淘来的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,

推荐阅读

史海拾趣

Component Research Co公司的发展小趣事

Component Research Co最初只是一家小型电子元件研发公司,面临着激烈的市场竞争。然而,公司研发团队在一次实验中意外发现了一种新型半导体材料,这种材料具有出色的导电性能和稳定性。公司迅速将这一发现转化为实际产品,并推向市场。新产品因其卓越性能迅速受到客户青睐,Component Research Co因此名声大噪,逐渐在电子元件市场占据一席之地。

台湾富致(FUZETEC)公司的发展小趣事

1962年,Futaba推出了无线电控制设备和冲压金属模用部件,旨在提升工业品质并缩短模具开发周期。这一举措不仅解决了当时工业控制领域中的供应商问题,还引领了模具制造行业的标准。随着技术的不断进步,Futaba开始涉足无线电传输模组(R/C)的生产和销售,并逐渐在无线遥控领域崭露头角。特别是高频无线展频通讯技术的实现,使Futaba的无线遥控技术在工业用机器人和工业控制设备上得到了广泛应用,进一步巩固了其在该领域的领先地位。

CETC公司的发展小趣事

作为一家大型国有企业,CETC始终将社会责任放在首位。公司积极参与社会公益事业,捐款捐物支持灾区重建和贫困地区的教育事业。同时,CETC还注重环保和可持续发展,在生产过程中采用环保材料和工艺,降低对环境的影响。这些举措不仅提升了公司的社会形象,也赢得了社会各界的广泛赞誉。

以上五个故事分别从科研突破、产业合作、海外市场布局、人才培养与团队建设以及社会责任等方面描述了CETC公司的发展过程。这些故事都是基于CETC在电子行业中的实际表现和公开资料进行的创作,旨在客观展现公司的发展历程和成就。当然,CETC的发展故事远不止这些,更多精彩的故事还需要我们进一步去发掘和了解。

Alpha Wire公司的发展小趣事

CETC深知人才是企业发展的根本。因此,公司一直注重人才培养和团队建设。公司设立了完善的培训体系,为员工提供各种学习和发展的机会。同时,CETC还积极引进国内外优秀人才,打造了一支高素质、专业化的团队。这支团队在公司的各个领域都发挥着重要作用,为公司的持续创新和发展提供了有力保障。

Comtech AHA Corp公司的发展小趣事

在电子行业快速发展的背景下,Comtech AHA Corp敏锐地洞察到了物联网、5G等新兴领域的市场潜力。公司及时调整战略方向,加大在这些领域的研发投入,推出了一系列符合市场需求的新产品。凭借精准的市场定位和优质的产品质量,Comtech AHA Corp成功抓住了市场机遇,实现了业务的快速增长。

FOTEK公司的发展小趣事

面对数字化时代的到来,福禄克积极拥抱变革,推动企业的数字化转型。公司不仅升级了内部管理系统,实现了生产、销售、服务等各个环节的数字化协同,还推出了多款基于大数据和人工智能技术的智能测试工具。这些智能工具不仅提高了测试效率和准确性,还为用户提供了更加便捷和个性化的服务体验。福禄克的数字化转型战略不仅增强了其市场竞争力,还为整个电子行业的数字化转型树立了标杆。

问答坊 | AI 解惑

2009年电赛设计报告模板

本帖最后由 paulhyde 于 2014-9-15 03:36 编辑 或许有用哦。    …

查看全部问答>

Windows CE.net的串口通讯类设计.pdf

Windows CE.net的串口通讯类设计.pdf…

查看全部问答>

需要远程监控的方案可以和我联系

有学校,工厂,超市,政府等方面的方案,欢迎交流!…

查看全部问答>

新手 请问这是什么意思啊?

           0  1  2  3  4  5  6  7  8  9  A  B  C  D &nb ...…

查看全部问答>

运算放大器的应用电路分析探讨

大家好 有没有好的关于集成运放的资料可以共享一下,大家一起讨论一下 电路分析的方法!…

查看全部问答>

关于S3C6410从SD"启动设置"和"操作"问题

关于S3C6410从SD\"启动设置\"和\"操作\"问题,好像三星也没有说从SD卡启动可以不要NOR FLASH和NAND FLASH, 也没有提到如何把那些*.bin和*.nb0放到SD卡中,是不是直接支持NK也放到SD卡中从SD启动。不知道大家有没有 这方便的操作文档。 编译完了 ...…

查看全部问答>

PIC的I2C接口从机通信错误,未能发出数据

1.用STM32的芯片做主机,PIC16F677作为从机作数据采集。主机用模拟方式实现IIC通信,速率是400K,从机是通过配置相关的IIC寄存器实现。 2.上电后用示波器观察,主机有发送配置地址0XF0和10连续的共10个位的数据。 3.发送的地址和677的SSPADD配置地 ...…

查看全部问答>

I2C基本问题

请问一个I2C的问题:     计算传输速率的时候:     I2SCLH = (Fpclk/fi2c+1)/2;        I2SCLL = (Fpclk/fi2c)/2;     占空比为0.5时,请问为什么这样计算?I2SCLH 计算后面括号里面为什么 ...…

查看全部问答>

华为核心网开发部 内部推荐,此次全部是华为名额!

工作地点:北京 (面试地:北京) 招聘岗位:软件工程师、高级软件工程师 职责描述 1)负责通信产品软件模块设计、开发工作,完成相关的设计文档、代码编写。 2)参与软件模块的部分测试工作,完成测试用例的设计、执行与测试报告的输出。 3) ...…

查看全部问答>

Linux内核修炼之道

有没有人看过 Linux内核修炼之道  这本书的,大家觉得怎么样…

查看全部问答>