精华内容
下载资源
问答
  • 然而,不同版本的安卓手机,打开USB调试模式也有所不同,但是大致步骤是一样的,以下是如何打开手机USB调试的具体方法和操作步骤: 1.首先你需要进入手机的设置界面,然后找到关于手机,找到该手机的版本号,连续...

    在日常生活中,我们有时可能会需要将手机连接到电脑上进行文件传输或数据备份。但是,手机与电脑是通过ADB模式连接,想要将手机连接到电脑,我们需要先激活开发者选项,然后打开手机上的USB调试。然而,不同版本的安卓手机,打开USB调试模式也有所不同,但是大致步骤是一样的,以下是如何打开手机USB调试的具体方法和操作步骤:

    1.首先你需要进入手机的设置界面,然后找到关于手机,找到该手机的版本号,连续点击7次。这时,系统会提示你已激活开发者选项。

    2. 现在,你需要再次回到设置界面,选择更多,然后向下滚动屏幕,找到开发者选项(Developer Options)进入界面,找到USB调试,滑动开关,系统会弹出对话框询问你是否打开USB调试,点击确认

    Image result for å¼åèé项

    3. 接下来,拿出一根性感的数据线,检查端口,然后将手机与电脑连接。连接成功后,你就可以在手机与电脑之间进行数据传输或备份啦。

    推荐:How to Enable USB Debugging and Connect Android to PC

    展开全文
  • 1、首先打开USB2、接着把USB设置为下图HID模式3、选择外部时钟4、配置时钟树5、配置USB设置下面的USB设置就有点讲究了,6、确认后,生成代码添加报文描述符:这里只是建立了一个工程,你编译不会有错,不过PC还是...

    这里我主要说一下如何做一个USB下位机,这里主要分3部分:1、建立工程;2、添加报文描述符;3、数据的传输。这里就不讲USB的理论知识了,有想要了解的自行百度一下就可以了。

    1、首先打开USB

    2、接着把USB设置为下图HID模式

    3、选择外部时钟

    4、配置时钟树

    5、配置USB设置

    下面的USB设置就有点讲究了,

    6、确认后,生成代码

    添加报文描述符:

    这里只是建立了一个工程,你编译不会有错,不过PC还是无法识别你这个是USB设备的,因为缺少了关键的报文描述符,这里我就说一下报文描述符怎么写,这个你可以直接用HID descriptor Tool软件生成,如下图,下图就是一个报文的基本要素了,该描述符主要作用是告诉PC机一下USB的信息,简单来说就是告诉PC我有什么用。

    这里我说一下这个报文的要素,第一部分你可以理解为报文头;第二部分你可以理解为USB告诉PC机问我要做什么,这里主要告诉PC机我要做一个接收与发送的设备;第三部分是结束标志。

    ============================================================

    下面我插入一个对报文描述符进行一个简单的描述:

    标签解析举例(Usage :0x50, 0x01):

    (Usage Page标签0x0?)0x05=0000 0101 :

    0x05表示前缀,0x01为数据部分,0x05转换成二进制,就是0000 01 01,按照HID类协议5.3 generic item format的定义,这个字节被分成3个部分:

    bit0~bit1代表的是这个前缀后面跟的数据长度,这里就是后面0x01的长度,两位可以表示最大4字节的数据,即bsize

    bit2~bit3代表的是这个前缀的类型,总共可以有三种类型:0=main,1=global,2=local,3=reserved;

    bit4~bit7代表前tag,一般分为input(二进制的1000 00 nn,即bit4~bit7=1000,代表一个tag,bit2~bit3=00,代表main,bit0~bit1=nn,代表这个前缀后面还有nn所代表的数据),output(二进制的 1001 00 nn),feature(1011 00 nn),collection(1010 00 nn),end collection(1100 00 nn)

    即:

    0000:Usage Page

    01: bType,全局(bType=0:主项目;bType=1:全局项目;bType=2:区域项目)

    01:bSzie,1字节(bSzie为项目所需数据字节数目,bSzie可为1、2、4,注意bSzie不可为3)

    (Page ID)0x01: 表示该Page为Generalic Desktop Controls(Usage ID 0为保留。ID 1到0x1F为”top level” collection保留,这些ID虽然对于Application不是必须,但可以用于识别通用设备类型)

    Usage = (usage page:usage ID):其将数据的操控与它的用途作一对一的对应,所以解读报告后就可以知道每个数据作何种操作。所以“传输的数据”和“操作”只是一事件的两种描述方式。用途是以一个32位卷标(称作usage tag)来表示,高16位称作usage page(用途类页),低16位称为usage ID(用途识别名),文件universal serial Bus HID Usage Table完整列出所有的usage pages(用途类页)和usage ID(用途识别名),使用者必须遵照文件的规范来声明操作的用途。用途卷标只是报告描述符诸多标签的一个,利用这些卷标取可以清楚完整的描述符操作的用途。

    这里其实说的并不清楚,因为作者有点懒就不细说了,想了解更多的可以百度《圈圈教你玩USB》,这里说的比我好。

    ==============================================================================

    言归正传,我们生成了报文描述符后,保存为.h文件,我对这些报文做了一些很浅显的解析,可能表达不够准确,打开可以看到如下代码所示:

    char ReportDescriptor[34] ={   //这里34就是前面建立工程第五点说的,报文描述符大小0x06, 0x00, 0xff, //USAGE_PAGE (Vendor Defined Page 1) 表示一个报文标签之类的用途类页

    0x09, 0x01, //USAGE (Vendor Usage 1) 表示一个报告ID标志

    0xa1, 0x01, //COLLECTION (Application) 表示应用集合,要以下面最后的0xc0结束它

    0x09, 0x01, //USAGE (Vendor Usage 1)同下同名解析

    0x15, 0x00, //LOGICAL_MINIMUM (0) 同下同名解析

    0x26, 0xff, 0x00, //LOGICAL_MAXIMUM (255) 同下同名解析

    0x95, 0x40, //REPORT_COUNT (64)  同下REPORT_COUNT

    0x75, 0x08, //REPORT_SIZE (8)   同下REPORT_SIZE

    0x81, 0x02, //INPUT (Data,Var,Abs) 表示USB要输入数据到PC的功能

    0x09, 0x01, //USAGE (Vendor Usage 1) 每个功能的一个卷标志

    0x15, 0x00, //LOGICAL_MINIMUM (0) 表示每个传输数据限定为0

    0x26, 0xff, 0x00, //LOGICAL_MAXIMUM (255) 表示每个传输数据的最大值限定为255

    0x95, 0x40, //REPORT_COUNT (64) 每次接收的数据长度,这里是64位

    0x75, 0x08, //REPORT_SIZE (8) 传输字段的宽度为8bit,表示每个传输的数据范围为0~ffff ffff

    0x91, 0x02, //OUTPUT (Data,Var,Abs) 表示USB设备要接收PC的数据的功能

    0xc0 //END_COLLECTION  结束标志

    };

    到这里我们就可以下一步了,打开刚才建立的工程,在 usbd_custom_hid_if.c 文件里,找到 CUSTOM_HID_ReportDesc_FS 这个函数,把刚才生成的报文文件覆盖掉函数里面的文件,代码如下:

    /** Usb HID report descriptor.*/__ALIGN_BEGINstatic uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END ={0x06, 0x00, 0xff, //USAGE_PAGE (Vendor Defined Page 1)

    0x09, 0x01, //USAGE (Vendor Usage 1)

    0xa1, 0x01, //COLLECTION (Application)

    0x09, 0x01, //USAGE (Vendor Usage 1)

    0x15, 0x00, //LOGICAL_MINIMUM (0)

    0x26, 0xff, 0x00, //LOGICAL_MAXIMUM (255)

    0x95, 0x40, //REPORT_COUNT (64)

    0x75, 0x08, //REPORT_SIZE (8)

    0x81, 0x02, //INPUT (Data,Var,Abs)

    0x09, 0x01, //USAGE (Vendor Usage 1)

    0x15, 0x00, //LOGICAL_MINIMUM (0)

    0x26, 0xff, 0x00, //LOGICAL_MAXIMUM (255)

    0x95, 0x40, //REPORT_COUNT (64)

    0x75, 0x08, //REPORT_SIZE (8)

    0x91, 0x02, //OUTPUT (Data,Var,Abs)

    0xc0 //END_COLLECTION

    };

    然后再修改将usbd_conf.h做对应修改:

    #define USBD_CUSTOMHID_OUTREPORT_BUF_SIZE      64

    #define USBD_CUSTOM_HID_REPORT_DESC_SIZE       34

    同时修改usbd_customhid.h文件中的发送与接收长度为64

    #define CUSTOM_HID_EPIN_SIZE                  0x40

    #define CUSTOM_HID_EPOUT_SIZE              0x40

    到这里基本就算做出一个USB设备了,我们编译下载程序看看。

    如果电脑显示了这个USB设备,但是有黄色感叹号,说明USB枚举成功,可是驱动安装失败,这时我们可以libusb自带的inf-wizard工具生成USB驱动程序,要怎么安装驱动解决这个问题可以参考驱动安装:https://blog.csdn.net/niepangu/article/details/44984325,驱动安装成功的话,到这里我们就可以看到USB正常列举出来啦,下面我们就可以写USB数据收发代码了。

    关于数据传输,HID设备是采用轮询方式传输的,ST默认20ms速度实在不敢恭维,还得要改一下枚举时的声明,同样是usbd_customhid.c文件,

    __ALIGN_BEGIN static uint8_t USBD_CUSTOM_HID_CfgDesc[USB_CUSTOM_HID_CONFIG_DESC_SIZ] __ALIGN_END ={

    ....

    ....0x20, /*bInterval: Polling Interval (20 ms)*/

    /*34*/....

    ....0x20,/*bInterval: Polling Interval (20 ms)*/

    /*41*/}

    这两个地方随心来改,最小可以改到0x01。这就快很多啦。到这里数据传输准备工作就做好了,下面我们先来说一下USB发送:

    先定义个发送BUFF:

    uint8_t send_buf[64] = {//定义一个USB的发送BUFF

    1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64};

    再包括发送函数头文件以及声明一个外部定义:

    #include "usbd_customhid.h" //包括发送函数头文件

    extern USBD_HandleTypeDef hUsbDeviceFS; //外部声明USB发送函数

    现在可以在main函数里添加发送代码了,我这里设置按一下按键就发送一次,同时led亮1s:

    while (1)

    {

    /*USER CODE BEGIN 3*/

    if(HAL_GPIO_ReadPin(GPIOE,k1_Pin)==0)

    {//按键消抖

    while(HAL_GPIO_ReadPin(GPIOE,k1_Pin)==0);//点亮指示灯

    HAL_GPIO_WritePin(GPIOE,led1_Pin,GPIO_PIN_RESET);//USB发送数据

    USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, send_buf, sizeof(send_buf));

    //实际发送到上位机的数据有65个,一个报文ID:0 + 64个send_buf 数据,一共65个数据到上位机

    HAL_Delay(1000);//关闭指示灯

    HAL_GPIO_WritePin(GPIOE,led1_Pin,GPIO_PIN_SET);

    }

    }

    发送函数就是这么简单,接下来说接收函数了,接收函数是中断接收的,建立工程时已经默认开启了。下面就说一下USB接收:

    先在main.c定义个接收BUFF:

    unsigned char USB_Recive_Buffer[64]; //USB接收缓存

    unsigned char USB_Received_Count = 0;//USB接收数据计数

    打开usbd_custom_hid_if.c文件,添加外部声明:

    extern unsigned char USB_Recive_Buffer[64];extern unsigned char USB_Received_Count;

    接着在usbd_custom_hid_if.c文件中找到 static int8_t CUSTOM_HID_OutEvent_FS(uint8_t event_idx, uint8_t state) 函数,当USB接收完数据后,就会进入到这个函数,我们可以在这里添加接收函数,把函数修改如下:

    /**

    * @brief Manage the CUSTOM HID class events

    * @param event_idx: Event index

    * @param state: Event state

    * @retval USBD_OK if all operations are OK else USBD_FAIL*/

    //当芯片完成一组数据接收的时候,中断会调用CUSTOM_HID_OutEvent_FS这个回调函数

    staticint8_t CUSTOM_HID_OutEvent_FS(uint8_t event_idx, uint8_t state)

    {/*USER CODE BEGIN 6*/

    chari;

    HAL_GPIO_TogglePin(GPIOE,led1_Pin);/*查看接收数据长度

    USB_Received_Count = USBD_GetRxCount( &hUsbDeviceFS,CUSTOM_HID_EPOUT_ADDR );

    printf("USB_Received_Count = %d \r\n",USB_Received_Count);

    USB_Received_Count = USBD_GetRxCount( &hUsbDeviceFS,CUSTOM_HID_EPIN_ADDR );

    printf("USB_Received_Count_in = %d \r\n",USB_Received_Count);*/USBD_CUSTOM_HID_HandleTypeDef*hhid; //定义一个指向USBD_CUSTOM_HID_HandleTypeDef结构体的指针

    hhid = (USBD_CUSTOM_HID_HandleTypeDef*)hUsbDeviceFS.pClassData;//得到USB接收数据的储存地址

    for(i=0;i<64;i++)

    {

    USB_Recive_Buffer[i]=hhid->Report_buf[i]; //把接收到的数据送到自定义的缓存区保存(Report_buf[i]为USB的接收缓存区)

    //printf("USB_Recive_Buffer[%d] = 0x%x \r\n",i,USB_Recive_Buffer[i]); //打印接收到的信息,确认是否正确,调试用

    }returnUSBD_OK;/*USER CODE END 6*/}

    这样就 USB_Recive_Buffer[i] 里面就保存到接收到的数据了,用Bus Hound可以看到已经成功啦。

    展开全文
  • 这里我主要说一下如何做一个USB下位机,这里主要分3部分:1、建立工程;2、添加报文描述符;3、数据的传输。这里就不讲USB的理论知识了,有想要了解的自行百度一下就可以了。... 2、接着把USB设置为下图HID模式 ...

    这里我主要说一下如何做一个USB下位机,这里主要分3部分:1、建立工程;2、添加报文描述符;3、数据的传输。这里就不讲USB的理论知识了,有想要了解的自行百度一下就可以了。

     

    建立工程:工程建立参考:https://www.cnblogs.com/libra13179/p/7193375.html

     

      1、首先打开USB

      

      

      2、接着把USB设置为下图HID模式

      

      3、选择外部时钟

      

      4、配置时钟树

      

      5、配置USB设置

      

      

      下面的USB设置就有点讲究了,

      

    6、确认后,生成代码

      

     

    添加报文描述符:

     

      这里只是建立了一个工程,你编译不会有错,不过PC还是无法识别你这个是USB设备的,因为缺少了关键的报文描述符,这里我就说一下报文描述符怎么写,这个你可以直接用HID descriptor Tool软件生成,如下图,下图就是一个报文的基本要素了,该描述符主要作用是告诉PC机一下USB的信息,简单来说就是告诉PC我有什么用。

      

      这里我说一下这个报文的要素,第一部分你可以理解为报文头;第二部分你可以理解为USB告诉PC机问我要做什么,这里主要告诉PC机我要做一个接收与发送的设备;第三部分是结束标志。

    ============================================================

    下面我插入一个对报文描述符进行一个简单的描述:

       

    标签解析举例(Usage :0x50, 0x01):

      (Usage Page标签0x0?)0x05=0000 0101 :

      0x05表示前缀,0x01为数据部分,0x05转换成二进制,就是0000 01 01,按照HID类协议5.3 generic item format的定义,这个字节被分成3个部分:

      bit0~bit1代表的是这个前缀后面跟的数据长度,这里就是后面0x01的长度,两位可以表示最大4字节的数据,即bsize

      bit2~bit3代表的是这个前缀的类型,总共可以有三种类型:0=main,1=global,2=local,3=reserved;

      bit4~bit7代表前tag,一般分为input(二进制的1000 00 nn,即bit4~bit7=1000,代表一个tag,bit2~bit3=00,代表main,bit0~bit1=nn,代表这个前缀后面还有nn所代表的数据),output(二进制的 1001 00 nn),feature(1011 00 nn),collection(1010 00 nn),end collection(1100 00 nn)

    即:

      0000:Usage Page

      01: bType,全局(bType=0:主项目;bType=1:全局项目;bType=2:区域项目)

      01:bSzie,1字节(bSzie为项目所需数据字节数目,bSzie可为1、2、4,注意bSzie不可为3)

     (Page ID)0x01: 表示该Page为Generalic Desktop Controls(Usage ID 0为保留。ID 1到0x1F为”top level” collection保留,这些ID虽然对于Application不是必须,但可以用于识别通用设备类型)

      

      Usage = (usage page:usage ID):其将数据的操控与它的用途作一对一的对应,所以解读报告后就可以知道每个数据作何种操作。所以“传输的数据”和“操作”只是一事件的两种描述方式。用途是以一个32位卷标(称作usage tag)来表示,高16位称作usage page(用途类页),低16位称为usage ID(用途识别名),文件universal serial Bus HID Usage Table完整列出所有的usage pages(用途类页)和usage ID(用途识别名),使用者必须遵照文件的规范来声明操作的用途。用途卷标只是报告描述符诸多标签的一个,利用这些卷标取可以清楚完整的描述符操作的用途。

      这里其实说的并不清楚,因为作者有点懒就不细说了,想了解更多的可以百度《圈圈教你玩USB》,这里说的比我好。

    ==============================================================================

     

    言归正传,我们生成了报文描述符后,保存为.h文件,我对这些报文做了一些很浅显的解析,可能表达不够准确,打开可以看到如下代码所示:

    复制代码

    char ReportDescriptor[34] = 
    {                     //这里34就是前面建立工程第五点说的,报文描述符大小
        0x06, 0x00, 0xff,              // USAGE_PAGE (Vendor Defined Page 1) 表示一个报文标签之类的用途类页
        0x09, 0x01,                    // USAGE (Vendor Usage 1) 表示一个报告ID标志
        0xa1, 0x01,                    // COLLECTION (Application) 表示应用集合,要以下面最后的0xc0结束它
    
    
        0x09, 0x01,                    //   USAGE (Vendor Usage 1)同下同名解析
        0x15, 0x00,                    //   LOGICAL_MINIMUM (0)  同下同名解析
        0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255) 同下同名解析
        0x95, 0x40,                    //   REPORT_COUNT (64)  同下REPORT_COUNT
        0x75, 0x08,                    //   REPORT_SIZE (8)   同下REPORT_SIZE
        0x81, 0x02,                    //   INPUT (Data,Var,Abs) 表示USB要输入数据到PC的功能
    
    
        0x09, 0x01,                    //   USAGE (Vendor Usage 1) 每个功能的一个卷标志
        0x15, 0x00,                    //   LOGICAL_MINIMUM (0)    表示每个传输数据限定为0
        0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)    表示每个传输数据的最大值限定为255
        0x95, 0x40,                    //   REPORT_COUNT (64) 每次接收的数据长度,这里是64位
        0x75, 0x08,                    //   REPORT_SIZE (8)        传输字段的宽度为8bit,表示每个传输的数据范围为0~ffff ffff
        0x91, 0x02,                    //   OUTPUT (Data,Var,Abs) 表示USB设备要接收PC的数据的功能
        0xc0                           // END_COLLECTION  结束标志
    };
    
            

    复制代码

      到这里我们就可以下一步了,打开刚才建立的工程,在 usbd_custom_hid_if.c 文件里,找到 CUSTOM_HID_ReportDesc_FS 这个函数,把刚才生成的报文文件覆盖掉函数里面的文件,代码如下:

    复制代码

    /** Usb HID report descriptor. */
    __ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
    {
        0x06, 0x00, 0xff,              // USAGE_PAGE (Vendor Defined Page 1)
        0x09, 0x01,                    // USAGE (Vendor Usage 1)
        0xa1, 0x01,                    // COLLECTION (Application)
        0x09, 0x01,                    //   USAGE (Vendor Usage 1)
        0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
        0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)
        0x95, 0x40,                    //   REPORT_COUNT (64)
        0x75, 0x08,                    //   REPORT_SIZE (8)
        0x81, 0x02,                    //   INPUT (Data,Var,Abs)
        0x09, 0x01,                    //   USAGE (Vendor Usage 1)
        0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
        0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)
        0x95, 0x40,                    //   REPORT_COUNT (64)
        0x75, 0x08,                    //   REPORT_SIZE (8)
        0x91, 0x02,                    //   OUTPUT (Data,Var,Abs)
        0xc0                           // END_COLLECTION
    };

    复制代码

     

    然后再修改将usbd_conf.h做对应修改:

      #define USBD_CUSTOMHID_OUTREPORT_BUF_SIZE      64

      #define USBD_CUSTOM_HID_REPORT_DESC_SIZE       34

    同时修改usbd_customhid.h文件中的发送与接收长度为64

      #define CUSTOM_HID_EPIN_SIZE                  0x40

      #define CUSTOM_HID_EPOUT_SIZE              0x40

      

      到这里基本就算做出一个USB设备了,我们编译下载程序看看。

      如果电脑显示了这个USB设备,但是有黄色感叹号,说明USB枚举成功,可是驱动安装失败,这时我们可以libusb自带的inf-wizard工具生成USB驱动程序,要怎么安装驱动解决这个问题可以参考驱动安装:https://blog.csdn.net/niepangu/article/details/44984325,驱动安装成功的话,到这里我们就可以看到USB正常列举出来啦,下面我们就可以写USB数据收发代码了。

     

    USB数据传输:参考http://www.stm32cube.com/article/138

     

      关于数据传输,HID设备是采用轮询方式传输的,ST默认20ms速度实在不敢恭维,还得要改一下枚举时的声明,同样是usbd_customhid.c文件,

     

    复制代码

    __ALIGN_BEGIN static uint8_t USBD_CUSTOM_HID_CfgDesc[USB_CUSTOM_HID_CONFIG_DESC_SIZ] __ALIGN_END =
    {
     ....
     ....
    
      0x20,          /*bInterval: Polling Interval (20 ms)*/
    
      /* 34 */
    
     ....
     ....
    
      0x20,/* bInterval: Polling Interval (20 ms) */
    
      /* 41 */
    }

    复制代码

     

    这两个地方随心来改,最小可以改到0x01。这就快很多啦。到这里数据传输准备工作就做好了,下面我们先来说一下USB发送:

      先定义个发送BUFF:

    uint8_t send_buf[64] = {//定义一个USB的发送BUFF
                             1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
                             17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,
                             40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64}; 

      再包括发送函数头文件以及声明一个外部定义:

    #include "usbd_customhid.h" //包括发送函数头文件
    extern USBD_HandleTypeDef hUsbDeviceFS; //外部声明USB发送函数

      现在可以在main函数里添加发送代码了,我这里设置按一下按键就发送一次,同时led亮1s:

    复制代码

      while (1)
      {
        /* USER CODE BEGIN 3 */
            if(HAL_GPIO_ReadPin(GPIOE,k1_Pin)==0)
            {    
                //按键消抖
                while(HAL_GPIO_ReadPin(GPIOE,k1_Pin)==0);
                //点亮指示灯
                HAL_GPIO_WritePin(GPIOE,led1_Pin,GPIO_PIN_RESET);
                //USB发送数据
                USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, send_buf, sizeof(send_buf));
           //实际发送到上位机的数据有65个,一个报文ID:0 + 64个send_buf 数据,一共65个数据到上位机
                HAL_Delay(1000);
                //关闭指示灯
                HAL_GPIO_WritePin(GPIOE,led1_Pin,GPIO_PIN_SET);           
            }
      }

    复制代码

    发送函数就是这么简单,接下来说接收函数了,接收函数是中断接收的,建立工程时已经默认开启了。下面就说一下USB接收:

      先在main.c定义个接收BUFF:

    unsigned char USB_Recive_Buffer[64]; //USB接收缓存
    unsigned char USB_Received_Count = 0;//USB接收数据计数

      打开usbd_custom_hid_if.c文件,添加外部声明:

    extern unsigned char USB_Recive_Buffer[64];
    extern unsigned char USB_Received_Count;

      接着在usbd_custom_hid_if.c文件中找到 static int8_t CUSTOM_HID_OutEvent_FS(uint8_t event_idx, uint8_t state) 函数,当USB接收完数据后,就会进入到这个函数,我们可以在这里添加接收函数,把函数修改如下:

    复制代码

    /**
      * @brief  Manage the CUSTOM HID class events
      * @param  event_idx: Event index
      * @param  state: Event state
      * @retval USBD_OK if all operations are OK else USBD_FAIL
      */
    //当芯片完成一组数据接收的时候,中断会调用CUSTOM_HID_OutEvent_FS这个回调函数
    static int8_t CUSTOM_HID_OutEvent_FS(uint8_t event_idx, uint8_t state)
    {
      /* USER CODE BEGIN 6 */
         char i;
         HAL_GPIO_TogglePin(GPIOE,led1_Pin);
        
        /*查看接收数据长度
        USB_Received_Count = USBD_GetRxCount( &hUsbDeviceFS,CUSTOM_HID_EPOUT_ADDR );
        printf("USB_Received_Count = %d \r\n",USB_Received_Count);
        
        USB_Received_Count = USBD_GetRxCount( &hUsbDeviceFS,CUSTOM_HID_EPIN_ADDR  );
        printf("USB_Received_Count_in = %d \r\n",USB_Received_Count);
        */
        
      USBD_CUSTOM_HID_HandleTypeDef   *hhid; //定义一个指向USBD_CUSTOM_HID_HandleTypeDef结构体的指针
      hhid = (USBD_CUSTOM_HID_HandleTypeDef*)hUsbDeviceFS.pClassData;//得到USB接收数据的储存地址
        
        for(i=0;i<64;i++) 
        {
            USB_Recive_Buffer[i]=hhid->Report_buf[i];  //把接收到的数据送到自定义的缓存区保存(Report_buf[i]为USB的接收缓存区)
            //printf("USB_Recive_Buffer[%d] = 0x%x \r\n",i,USB_Recive_Buffer[i]); //打印接收到的信息,确认是否正确,调试用
        } 
      return USBD_OK;
      /* USER CODE END 6 */
    }

    复制代码

      这样就 USB_Recive_Buffer[i] 里面就保存到接收到的数据了,用Bus Hound可以看到已经成功啦。

      

     

    补充:上位机USB通信部分:https://www.cnblogs.com/xingboy/p/9816234.html 这里的上位机是用C#编写的窗体程序

    展开全文
  • 7.1基于FX3内部DMA的USB传输loopback实例 7.1.1功能概述 7.1.2固件编译与固化文件生成 7.1.3硬件连接与设备识别 7.1.4FX3的USB Boot加载 7.1.5板级调试 7.2FX3的SPI Flash代码固化 7.2.1启动...
  • 一、前言 本次测试所使用的是正点...什么是透传模式,简单的讲就是,ESP8266将通过串口接收到的数据,直接进行转发到所设置的目标服务器的端口上,而我们不需要关心WIFI协议是如何来实现数据的传输。只需要在ESP8266

    一、前言

    本次测试所使用的是正点原子的ATK-ESP8266 WIFI模块。直接使用官方提供的固件使用AT指令来配置模块并使用。

    模块默认为AT指令状态,模拟波特率为115200(8bit数据位,1bit停止位)。

    硬件连接

    使用USB转TTL方式(电脑需要安装CH340驱动)连接ESP8266,接线图如下。
    在这里插入图片描述

    二、透传模式

    什么是透传模式,简单的讲就是,ESP8266将通过串口接收到的数据,直接进行转发到所设置的目标服务器的端口上,而我们不需要关心WIFI协议是如何来实现数据的传输。只需要在ESP8266上设置好服务器地址即可。

    ATK_ESP8266 模块仅在 TCP Client 和 和 UDP ,支持透传模式。

    三、ESP8266的三种工作模式

    ESP8266支持 STA / AP / STA+AP 这三种工作模式。

    • STA模式:ESP8266模块通过路由器连接互联网,可以通过互联网实现对设备的远程控制。类似于无线网卡。
    • AP模式:ESP8266模块作为热点,可以实现手机或者其他联网设备通过WIFI直接与模块进行通信,实现局域网无线控制。类似于路由或者网桥。
    • STA+AP模式:两种模式都支持。

    通俗来讲,STA模式就是一个联网设备,需要通过wifi连接在其他的无线路由器上。AP模式就是一个无线路由器,其他联网设备可以通过wifi接入。

    四、ESP8266的基本常用AT指令集

    在这里只列出几个常用的基本的AT指令集。

    AT指令 功能
    AT 测试指令
    AT+RST 重启模块
    AT+GMR 查看版本信息
    ATE 开关回显功能
    AT+RESTORE 恢复出厂设置
    AT+UART 设置串口配置参数

    *关于回显功能就是在使用AT指令对ESP8266进行配置的时候,ESP8266是否将收到的AT指令通过串口发回。

    在这里主要说一下串口参数配置这个AT指令。

    AT+UART=<baudrate>,<databits>,<stopbits>,<parity>,<flow control>
    

    参数说明:

    • < baudrate > 串口波特率

    波特率支持范围: 110~4608000

    • < databits> 数据位

    5:5 bit 数据位
    6:6 bit 数据位
    7:7 bit 数据位
    8:8 bit 数据位

    • < parity> 校验位

    0: None
    1: Odd
    2: EVEN

    • < flow control> 流控

    0:不使能流控
    1:使能 RTS
    2:使能 CTS
    3:同时使能 RTS 和 CTS

    比如我需要设置串口波特率为256000bit/s,8bit数据位,1bit停止位,无校验位,需要发送

    AT+UART=256000,8,1,0,0
    

    注:本设置将保存在 Flash user parameter 区,重新上电后 仍生效。

    五、WIFI功能的AT指令

    指令 描述
    AT+CWMODE 选择 WIFI 应用模式
    AT+CWJAP 加入 AP
    AT+CWLAP 列出当前可用 AP
    AT+CWQAP 退出与 AP 的连接
    AT+CWSAP 设置 AP 模式下的参数
    AT+CWLIF 查看已接入设备的 IP
    AT+CWDHCP 设置 DHCP 开关
    AT+CWAUTOCONN 设置 STA 开机自动连接到 wifi
    AT+CIPSTAMAC 设置 STA 的 MAC 地址
    AT+CIPAPMAC 设置 AP 的 MAC 地址
    AT+CIPSTA 设置 STA 的 IP 地址
    AT+CIPAP 设置 AP 的 IP 地址
    AT+CWSTARTSMART 启动智能连接
    AT+CWSTOPSMART 停止智能连接
    AT+WPS 设置 WPS 功能
    AT+MDNS 设置 MDNS 功能
    AT+CWHOSTNAME 设置 ATK-ESP-01 Station 的主机名字

    六、TCP/IP相关AT指令

    指令 描述
    AT+CIPSTATUS 获得连接状态
    AT+CIPDOMAIN 域名解析功能
    AT+CIPSTART 建立 TCP 连接或注册 UDP 端口号
    AT+CIPSSLSIZE 设置 SSL Buffer 容量
    AT+CIPSEND 发送数据
    AT+CIPCLOSE 关闭 TCP 或 UDP
    AT+CIFSR 获取本地 IP 地址
    AT+CIPMUX 启动多连接
    AT+CIPSERVER 配置为服务器
    AT+CIPMODE 设置模块传输模式
    AT+SAVETRANSLINK 保存透传到 Flash
    AT+CIPSTO 设置服务器超时时间
    AT+CIPDINFO 接收网络数据时是否提示对端 IP 和端口
    AT+CIPSNTPCFG 设置时域和 SNTP 服务器
    AT+CIPSNTPTIME 查询 NTP 时间
    AT+PING PING 命令
    AT+ATKCLDSTA 连接到原子云服务器
    AT+ATKCLDCLS 关闭原子云服务器连接

    七、TCP Client透传模式

    首先测试ESP8266模块在STA模式下的透传。

    在PC端使用网络调试助手创建一个TCP服务器,设置好主机地址以及主机端口。

    在这里插入图片描述
    然后使用串口助手连接ESP8266,通过AT指令对其进行配置。

    1、将ESP8266设置为STA模式。

    AT+CWMODE=1 //设置为 STA 模式

    响应:OK

    在这里插入图片描述

    2、重启ESP8266,使设置生效

    AT+RST

    响应:OK

    3、连接路由器

    AT+CWJAP=“LAB411”,“lab411411”

    响应:OK
    注意这里,前面是wifi的ssid,后面是password。仅支持2.4GHzwifi。
    在这里插入图片描述

    4、将模块连接到刚刚所创建的TCP server

    AT+CIPSTART=“TCP”,“192.168.1.35”,1125

    响应:CONNECT OK

    在这里插入图片描述

    5、开启透传模式

    AT+CIPMODE=1

    响应:OK
    在这里插入图片描述

    6、开始透传

    AT+CIPSEND

    响应:OK >

    在这里插入图片描述
    此时,我们就可以在串口助手和网络调试助手中进行数据传输了。

    在这里插入图片描述

    7、退出透传模式

    一旦进入了透传模式,再发送AT指令是不会回复的,所发送的AT指令会当做消息发送。

    在透传模式中,若识别到单独的一包数据“ +++”,则退出透传模式。

    +++

    8、开机自动进入透传模式

    如果需要模块上电自动个连接到某个 IP 并进入透传模式,这个时候需要在模块连接路由器wifi热点之后,发送以下命令设置模块为上电自动到连接到 TCP Server:192.168.1.35,1125,并进入透传模式。

    AT+SAVETRANSLINK=1,"192.168.1.35",1125,"TCP"
    

    当发送AT+SAVETRANSLINK 指令后,模块断电再上电会自动进入透传模式,此时发送, 指令模块是不会回复的(即使透传的服务器不存在, 模块也会进入透传模到式的)。要退出开机自动进入透传模式,需要先退出透传模式,再发送“AT+SAVETRANSLINK=0 ”,这样上电模块就不会再上电进入透传了。

    展开全文
  • bios的设置,,,,,

    2010-04-23 19:39:52
    设置为PS/2、EPP或ECP模式时并口可以输入、输出数据。这三种模式所用协议和最大数据传输率不同。最大传输速率PS/2。另外,ECP还可以设计DMA通道,进一步改进输出量。 I/O Address 输入/输出地址 DMA Channel DMA...
  • 本文阐述了如何多看电纸书安装微信读书、梅糖桌面、Eink桌面。...将电纸书设备连接至电脑,此时电纸书设备提示需要选择USB传输模式,请选择充电模式。 第二步 准备好要安装的apk文件,最好放到电脑桌面上,这里推.
  • 每个手机打开开发者模式的姿势不一样,如OPPO的就需要先找到“关于手机”,然后在版本号上连点几次,然后再退出来点开“其他设置”,才能出现开发者选项,然后打开USB调试,记住,打开usb调试后一定不要选择只进行...
  • 操作步骤: ...3、手机通过USB连接到电脑上,将充电模式改为文件传输模式 (注意:可能有些手机还需要打开开发者模式中的bugging选项) 4、点击应用宝左上角连接设备,连接成功即可 4、点...
  • ** 如何连接安卓手机与AndroidStudio(并查看手机日志) ** 1.手机Redmi K30 Pro 2.安装AndroidStudio 1.手机设置 (1).设置—》我的设备—》全部...使用数据线连接电脑,选择传输文件模式 2.Android Studio 下载Andr
  • Android Studio如何进行真机调试

    千次阅读 2020-05-24 18:25:16
    不要选择充电模式,确保电脑和手机可以进行传输 AS部分 此时切换到AS,即可看到自己的手机设备,点击运行,在手机上安装APP,即可运行 有人说连接手机之后还需要在AS进行一些配置操作,但我在调试的时候,直接显示...
  • 问题:电脑与平板数据线连接好后,平板已经出现“USB调试设置”,已选择“传输文件”此选项。电脑却一直无法出现此图标。  无法进行把电脑文件复制到平板上的操作。 经过多次尝试与信息搜索,最终找到解决方案...
  • 如何让电脑连接上手机的无线网

    千次阅读 2018-11-27 21:57:49
    第一步: 将手机,电脑用数据线连接上,并将手机调成“传输文件”模式。 前提:以荣耀9作为示范手机 第二步:“设置”---&gt;"无线和网络"---&gt;"移动和网络共享"---&gt;打开...
  • 因为我想要快速地从我的开发板传数据到电脑,因此我尝试使用USB的视频类模式传输。 在Linux主机上,我用python的一个库pygame成功地获取到了YUV摄像头原始的数据, 但是在windows下却遇到了问题。 下面是我做过的...
  • 使用USB线把手机和电脑连接,最好是使用手机原装的线,有些线可能不支持文件传输。 确保你手机的开发者模式打开  如何打开开发者模式?  ①打开手机 设置 --> 系统 --> 关于手机 --> 找到版本号...
  • 使用USB线把手机和电脑连接,最好是使用手机原装的线,有些线可能不支持文件传输。 确保你手机的开发者模式打开  如何打开开发者模式?  ①打开手机 设置 --> 系统 --> 关于手机 --> 找到版本号...
  • 手机共享wifi给台式机

    2017-04-25 08:53:50
    嗨!我是 不同设备之间传输信息都需要有网络相连。手机和电脑之间也是如此。今天总结下手机如何共享wifi给台式机或笔记本。  1、准备 :手机和电脑一台... 2.1.1 打开手机的USB调试模式  2.1.2 打开手机的便携式网络
  • HC-05两个蓝牙模块的通信简介应用领域准备工作如何用串口进入AT指令AT指令设置过程如何进入正常模式总结 简介 BLK-MD-HC-05蓝牙模块是专为智能无线数据传输而打造,采用英国CSR公司BlueCore4-Ext 芯片,遵循V2.0+EDR...
  • 我们将基于Eclipse了解如何对应用进行调试,即debug。Android插件提供的DDMS可以给予很多帮助,包括视图(那个设备被连接)...在一个真实设备调测应用,除了将设备设置USB调测模式,还需要在AndroidManifest.xml的app
  • 我们将基于Eclipse了解如何对应用进行调试,即debug。Android插件提供的DDMS可以给予很多帮助,包括视图(那个设备被连接)...在一个真实设备调测应用,除了将设备设置USB调测模式,还需要在AndroidManifest.xml的...
  • 我们将基于Eclipse了解如何对应用进行调试,即debug。Android插件提供的DDMS可以给予很多帮助,包括视图(那个设备被连接...在一个真实设备调测应用,除了将设备设置USB调测模式,还需要在AndroidManifest.xml的appli
  • 多媒体教室

    2013-06-14 08:10:31
    模式下,屏幕广播的内容为1:1显示,窗口显示的内容能根据屏幕广播或录制时教师的鼠标移动情况而做相应滚动,这样就不会出现在自由滚动模式下有时会看不到教师的操作以及在缩放显示模式下看不清楚屏幕广播具体...
  • 这是书的光盘。共分为两个部分,这是第一部分。 本书由浅入深、循序渐进地介绍了Windows驱动程序的开发方法与调试技巧。本书共分23章,内容涵盖了 Windows操作系统的基本...后本章还介绍了如何对IRP的超时情况进行...
  • STM32F10xxx参考手册

    2012-10-17 11:38:40
    目录 1 文中的缩写 24 1.1 寄存器描述表中使用的缩写列表 24 1.2 术语表 24 1.3 可用的外设 24 2 存储器和总线构架 25 2.1 系统构架 25 2.2 存储器组织 27 ...13.4.7 TIM1和TIM8捕获/比较模式寄存器1...
  • 能够设置“始终开启”USB 限制。 能够设置“始终开启”CD/DVD 限制。 能够设置“始终开启”打印机限制。 便捷的滑块,用来重新设置缩略图大小、设置更新间隔或自动调整状态栏中的缩略图大小。 已增强的文件分发性能...
  • 迷你模式,界面大小随意设置,采用布局自使用任何分辨率。 纯数字键盘模式,自由控制弹出完整输入法面板和数字键盘面板,只需要对控件设置属性即可。例如ui->txt->setProperty("flag", "number"); 控制需要...
  • 能够设置“始终开启”USB 限制。 能够设置“始终开启”CD/DVD 限制。 能够设置“始终开启”打印机限制。 便捷的滑块,用来重新设置缩略图大小、设置更新间隔或自动调整状态栏中的缩略图大小。 已增强的文件分发性能...
  • 如果显示的不是device,请确认下您的设备是否已经安装好驱动,并且允许了USB调试,部分手机需要将连接模式设置传输图片(MTP)模式才可正常连接。 单机场景 Windows: %ANDROID_SDK%\platform-tools\adb.exe ...

空空如也

空空如也

1 2 3
收藏数 43
精华内容 17
关键字:

如何设置usb传输模式