(USB系列三)stm32 CubeMX usb音频描述符详解 usb audio UAC

2023-10-26

如果需要麦克风阵列,回声消除,声源定位,波束成形,语音对话的产品请访问我好朋友的店铺。

店铺链接:首页-智能语音开发者联盟-淘宝网

大家好我是人见人爱、花见花开的大魔王。

usb协议还是很烦的,cube很大程度上减轻了工作量。但是不灵活是个大问题。

比如我要配置一个usb接口既有虚拟串口又有usb声卡又有hid控制的设备怎么办呢?

多弄几个芯片之后加个usb hub?不存在的!成年人的世界我都要~!

下面为所有项目的规划列表~~~

虚拟串口(已完成)

usb声卡(单独播放的已经完成了)。

usb的各种控制,比如静音接打电话控制音量。

多路麦克风阵列的usb设备怎么做。

打印机设备怎么搞。

hid设备怎么弄。

u盘怎么做。。。这个应该不会去写。

怎么把这些弄到一起,一根usb线一个漂漂亮亮的挂载一大串设备,cdc设备的集成到底怎么弄!

所有所有的这些,咱们慢慢来!

这次我们来一个usb的声卡的中等意思版本。本着柿子捡软的捏的原则开撸。。。

描述符看起来很乱,一眼瞎。这些以后不再是问题~~~~~~~~~~~

先把定时器还有SAI开了

因为主要是想做验证,顺便看看usb丢包和延时时间。就把SAI的输入和输出直接连起来。

懒就是懒还找了一堆这么合理的接口。。。

干活我不行,安慰起来自己那确实是一套一套的。

这样之后用pc测试的时候播放和录音就是一样的了。

usbd_desc 初始化代码、设备描述符

usbd_audio_if 音频接口

usbd_desc.c 设备描述符

usbd_conf.c 底层

先看一下设备描述符的类型

设备描述符#define  USB_DESC_TYPE_DEVICE                           0x01U

配置描述符#define  USB_DESC_TYPE_CONFIGURATION                    0x02U

字符串描述符#define  USB_DESC_TYPE_STRING                           0x03U

接口描述符#define  USB_DESC_TYPE_INTERFACE                        0x04U

端点描述符#define  USB_DESC_TYPE_ENDPOINT                         0x05U

设备限定描述符#define  USB_DESC_TYPE_DEVICE_QUALIFIER                 0x06U

速度配置描述符#define  USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION        0x07U

#define  USB_DESC_TYPE_IAD                              0x0BU

#define  USB_DESC_TYPE_BOS                              0x0FU

这个描述符的难度确实不是很好搞。具体以配置描述符最难搞,看长度就能知道了。

柿子先捡软的捏!

 搞一搞usb描述符其中的逻辑~~~~~~~~~

咱先弄逻辑再写代码。至少要知道自己写个什么东西,才能下得去手吧!!!

黄色背影字体的部分是cube自动生成的一个立体声播放的usb设备描述符。也就是实现了一个音频设备的上报,之后注册了一个windows、linux的声卡。

多往下翻翻就看到了黄色背影字体,绝对一眼瞎,密密麻麻的一段描述符,到底是什么意思,背后隐藏着什么逻辑。咱们慢慢研究。

接下来我们看一下这个信息是怎样让windows或者linux识别的。

先捋顺一下逻辑,所有的协议在编写的时候作者都是有自己的逻辑的。只要找到这个逻辑,咱们按照这个标准叙述逻辑去说话,这个东西也就很好解释了。

下段文字中红色背景的美商都是对应上面黄色背景中的一小端。

配置描述符说我这个描述符是一个有2个接口耗电xx mA的设备。

第一个接口中众成员对话

接口描述符说我这个是第0个接口描述符,使用端点数为0(也就是不使用),接口类型是audio控制。

AC接口描述符说我这个是音频1.00规范,有一群小兄弟(就是后面跟的一些其他描述符长度)

音频类输入终端描述符说ac接口是我大哥

特征单元描述符说ac接口是我大哥

音频类输出终端描述符说ac接口是我大哥

第二个接口中众成员对话

接口描述符交替0说我跟第一个接口有点不一样,我的接口类型是音频流。有一个端点。我跟音频控制类型还有点其他区别就是老子有交替配置。

接口描述符交替1说我就是交替配置1

Audio Streaming接口描述符说我的格式是pcm

Audio Type Format接口描述符说我是48k采样率、16位

音频标准端点描述符说我使用了1端点,最大长度是xxx

音频流端点描述符说我没啥意思,就是过来看看

  从上面对话我们就可以看出,其实每个描述符都有他自己独立的想法。但是他们又分别属于各个不同的大哥。大哥靠小弟们说明事情的来龙去脉就把告诉windows和linux这个usb是什么类型的搞定了。

  之后我就解释一下什么是接口什么是端点。

  用通俗的话来讲呢,就好比我要开一家公司。这个公司卖usb声卡。这个声卡怎么卖呢。需要两个部门。一个部门有几个员工在淘宝当小二,另一个部门有几个人搞生产。

  这个公司就是配置描述符,两个部门就是对接公司业务的接口,每个部门的员工就是接口下面做各个具体事务的人。

  而端点呢?端点是这个公司的屋子。好比我一个屋子可以安排一个部门,那我这个公司现在有十个屋子是不是就可以放十个部门了?但是我现在主营业务用不了那么多屋子,怎么办。先空着呗。

万一咱哪天又想卖usb虚拟串口或者usb打印机就根据咱们的安排多安排几个部门呗。端点是由硬件决定的,每个单片机的端点数是不一样的。

  既然都说道这里了,那么咱继续深入了解一下这个妹子。。。不对是这个描述符。

  咱们增加一个功能,让它能放音也能录音。什么叫编程语音,就是把想做的通过语言描述出来。

  那马上开始用描述符的语言描述一下这个公司怎么对话吧~~~~~

配置描述符说我这个描述符是一个有3个接口耗电xx mA的设备。因为功能多了嘛,增加一个部门不过分吧

第一个接口中众成员对话

接口描述符说我这个是第0个接口描述符,使用端点数为0(也就是不使用),接口类型是audio控制。

AC接口描述符说我这个是音频1.00规范,有一群小兄弟(就是后面跟的一些其他描述符长度)

音频类输入终端描述符说ac接口是我大哥,不过我是负责干播放端的

特征单元描述符说ac接口是我大哥,不过我是负责干播放端的

音频类输出终端描述符说ac接口是我大哥,不过我是负责干播放端的

音频类输入终端描述符说ac接口是我大哥,不过我是负责干录音端的

特征单元描述符说ac接口是我大哥,不过我是负责干录音端的

音频类输出终端描述符说ac接口是我大哥,不过我是负责干录音端的

第二个接口中众成员对话

接口描述符交替0说我跟第一个接口有点不一样,我的接口类型是音频流。有一个端点。我跟音频控制类型还有点其他区别就是老子有交替配置(因为上一端对话中是播放,所以这个还是播放)。

接口描述符交替1说我就是交替配置1

Audio Streaming接口描述符说我的格式是pcm

Audio Type Format接口描述符说我是48k采样率、16位

音频标准端点描述符说我使用了1端点,最大长度是xxx

音频流端点描述符说我没啥意思,就是过来看看

第三个接口中众成员对话

接口描述符交替0说我跟第一个接口有点不一样,我的接口类型是音频流。有一个端点。我跟音频控制类型还有点其他区别就是老子有交替配置。最重要的是老子是新部门,负责录音的。

接口描述符交替1说我就是交替配置1

Audio Streaming接口描述符说我的格式是pcm

Audio Type Format接口描述符说我是48k采样率、16位

音频标准端点描述符说我使用了1端点,最大长度是xxx

音频流端点描述符说我没啥意思,就是过来看看

对,就这样。这个公司的所有部门安排和人员安排就已经完事了。。。

惊不惊喜,意不意外。如果你按照上述对话的每一行去配置相应的描述符,肯定是可以识别的。

所以只要掌握核心逻辑,这些就都不是问题。

/****************************************************此区间查看如果犯困可以往下翻*******************************************************/

设备描述符(不重要看看就得了)

__ALIGN_BEGIN uint8_t USBD_FS_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END =

{

  0x12,                       /*bLength */

  USB_DESC_TYPE_DEVICE,       /*bDescriptorType*/

#if (USBD_LPM_ENABLED == 1)

  0x01,                       /*bcdUSB */ /* changed to USB version 2.01

                                             in order to support LPM L1 suspend

                                             resume test of USBCV3.0*/

#else

  0x00,                       /*bcdUSB */

#endif /* (USBD_LPM_ENABLED == 1) */

  0x02,

  0x00,                       /*bDeviceClass*/

  0x00,                       /*bDeviceSubClass*/

  0x00,                       /*bDeviceProtocol*/

  USB_MAX_EP0_SIZE,           /*bMaxPacketSize*/

  LOBYTE(USBD_VID),           /*idVendor*/

  HIBYTE(USBD_VID),           /*idVendor*/

  LOBYTE(USBD_PID_FS),        /*idProduct*/

  HIBYTE(USBD_PID_FS),        /*idProduct*/

  0x00,                       /*bcdDevice rel. 2.00*/

  0x02,

  USBD_IDX_MFC_STR,           /*Index of manufacturer  string*/

  USBD_IDX_PRODUCT_STR,       /*Index of product string*/

  USBD_IDX_SERIAL_STR,        /*Index of serial number string*/

  USBD_MAX_NUM_CONFIGURATION  /*bNumConfigurations*/

};

设备描述符就不多说了,随便找找资料就应该差不多了。

字符串描述符(不重要看看就得了)

__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] __ALIGN_END =

{

     USB_LEN_LANGID_STR_DESC,

     USB_DESC_TYPE_STRING,

     LOBYTE(USBD_LANGID_STRING),

     HIBYTE(USBD_LANGID_STRING)

};

这个没啥东西就是电脑上显示的的一段字符串,跟具体应用实现关系不大。过~~~

设备限定描述符(不重要看看就得了)

主要是描述有关高速设备的信息。如果设备是高速状态运行则直接返回。

/* USB Standard Device Descriptor */

__ALIGN_BEGIN static uint8_t USBD_AUDIO_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END =

{

  USB_LEN_DEV_QUALIFIER_DESC,

  USB_DESC_TYPE_DEVICE_QUALIFIER,

  0x00,

  0x02,

  0x00,

  0x00,

  0x00,

  0x40,

  0x01,

  0x00,

};

bos描述符(不重要看看就得了)

/* USB_DeviceDescriptor */

/** BOS descriptor. */

#if (USBD_LPM_ENABLED == 1)

#if defined ( __ICCARM__ ) /* IAR Compiler */

  #pragma data_alignment=4

#endif /* defined ( __ICCARM__ ) */

__ALIGN_BEGIN uint8_t USBD_FS_BOSDesc[USB_SIZ_BOS_DESC] __ALIGN_END =

{

  0x5,

  USB_DESC_TYPE_BOS,

  0xC,

  0x0,

  0x1,  /* 1 device capability*/

        /* device capability*/

  0x7,

  USB_DEVICE_CAPABITY_TYPE,

  0x2,

  0x2,  /* LPM capability bit set*/

  0x0,

  0x0,

  0x0

};

重头戏来了,从配置描述符开始(别闭眼)。

__ALIGN_BEGIN static uint8_t USBD_AUDIO_CfgDesc[USB_AUDIO_CONFIG_DESC_SIZ] __ALIGN_END =

{

  /* Configuration 1 */

  0x09,                                 /* bLength */

  USB_DESC_TYPE_CONFIGURATION,          /* bDescriptorType */

  LOBYTE(USB_AUDIO_CONFIG_DESC_SIZ),    /* wTotalLength  109 bytes*/

  HIBYTE(USB_AUDIO_CONFIG_DESC_SIZ),

  0x02,                                 /* bNumInterfaces */

  0x01,                                 /* bConfigurationValue */

  0x00,                                 /* iConfiguration */

#if (USBD_SELF_POWERED == 1U)

  0xC0,                                 /* bmAttributes: Bus Powered according to user configuration */

#else

  0x80,                                 /* bmAttributes: Bus Powered according to user configuration */

#endif

  USBD_MAX_POWER,                       /* bMaxPower = 100 mA */

  /* 09 byte*/

  /* USB Speaker Standard interface descriptor */

  AUDIO_INTERFACE_DESC_SIZE,            /* bLength */

  USB_DESC_TYPE_INTERFACE,              /* bDescriptorType */

  0x00,                                 /* bInterfaceNumber */

  0x00,                                 /* bAlternateSetting */

  0x00,                                 /* bNumEndpoints */

  USB_DEVICE_CLASS_AUDIO,               /* bInterfaceClass */

  AUDIO_SUBCLASS_AUDIOCONTROL,          /* bInterfaceSubClass */

  AUDIO_PROTOCOL_UNDEFINED,             /* bInterfaceProtocol */

  0x00,                                 /* iInterface */

  /* 09 byte*/

  /* USB Speaker Class-specific AC Interface Descriptor */

  AUDIO_INTERFACE_DESC_SIZE,            /* bLength */

  AUDIO_INTERFACE_DESCRIPTOR_TYPE,      /* bDescriptorType */

  AUDIO_CONTROL_HEADER,                 /* bDescriptorSubtype */

  0x00,          /* 1.00 */             /* bcdADC */

  0x01,

  0x27,                                 /* wTotalLength = 39*/

  0x00,

  0x01,                                 /* bInCollection */

  0x01,                                 /* baInterfaceNr */

  /* 09 byte*/

  /* USB Speaker Input Terminal Descriptor */

  AUDIO_INPUT_TERMINAL_DESC_SIZE,       /* bLength */

  AUDIO_INTERFACE_DESCRIPTOR_TYPE,      /* bDescriptorType */

  AUDIO_CONTROL_INPUT_TERMINAL,         /* bDescriptorSubtype */

  0x01,                                 /* bTerminalID */

  0x01,                                 /* wTerminalType AUDIO_TERMINAL_USB_STREAMING   0x0101 */

  0x01,

  0x00,                                 /* bAssocTerminal */

  0x01,                                 /* bNrChannels */

  0x00,                                 /* wChannelConfig 0x0000  Mono */

  0x00,

  0x00,                                 /* iChannelNames */

  0x00,                                 /* iTerminal */

  /* 12 byte*/

  /* USB Speaker Audio Feature Unit Descriptor */

  0x09,                                 /* bLength */

  AUDIO_INTERFACE_DESCRIPTOR_TYPE,      /* bDescriptorType */

  AUDIO_CONTROL_FEATURE_UNIT,           /* bDescriptorSubtype */

  AUDIO_OUT_STREAMING_CTRL,             /* bUnitID */

  0x01,                                 /* bSourceID */

  0x01,                                 /* bControlSize */

  AUDIO_CONTROL_MUTE,                   /* bmaControls(0) */

  0,                                    /* bmaControls(1) */

  0x00,                                 /* iTerminal */

  /* 09 byte*/

  /*USB Speaker Output Terminal Descriptor */

  0x09,      /* bLength */

  AUDIO_INTERFACE_DESCRIPTOR_TYPE,      /* bDescriptorType */

  AUDIO_CONTROL_OUTPUT_TERMINAL,        /* bDescriptorSubtype */

  0x03,                                 /* bTerminalID */

  0x01,                                 /* wTerminalType  0x0301*/

  0x03,

  0x00,                                 /* bAssocTerminal */

  0x02,                                 /* bSourceID */

  0x00,                                 /* iTerminal */

  /* 09 byte*/

  /* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwidth */

  /* Interface 1, Alternate Setting 0                                             */

  AUDIO_INTERFACE_DESC_SIZE,            /* bLength */

  USB_DESC_TYPE_INTERFACE,              /* bDescriptorType */

  0x01,                                 /* bInterfaceNumber */

  0x00,                                 /* bAlternateSetting */

  0x00,                                 /* bNumEndpoints */

  USB_DEVICE_CLASS_AUDIO,               /* bInterfaceClass */

  AUDIO_SUBCLASS_AUDIOSTREAMING,        /* bInterfaceSubClass */

  AUDIO_PROTOCOL_UNDEFINED,             /* bInterfaceProtocol */

  0x00,                                 /* iInterface */

  /* 09 byte*/

  /* USB Speaker Standard AS Interface Descriptor - Audio Streaming Operational */

  /* Interface 1, Alternate Setting 1                                           */

  AUDIO_INTERFACE_DESC_SIZE,            /* bLength */

  USB_DESC_TYPE_INTERFACE,              /* bDescriptorType */

  0x01,                                 /* bInterfaceNumber */

  0x01,                                 /* bAlternateSetting */

  0x01,                                 /* bNumEndpoints */

  USB_DEVICE_CLASS_AUDIO,               /* bInterfaceClass */

  AUDIO_SUBCLASS_AUDIOSTREAMING,        /* bInterfaceSubClass */

  AUDIO_PROTOCOL_UNDEFINED,             /* bInterfaceProtocol */

  0x00,                                 /* iInterface */

  /* 09 byte*/

  /* USB Speaker Audio Streaming Interface Descriptor */

  AUDIO_STREAMING_INTERFACE_DESC_SIZE,  /* bLength */

  AUDIO_INTERFACE_DESCRIPTOR_TYPE,      /* bDescriptorType */

  AUDIO_STREAMING_GENERAL,              /* bDescriptorSubtype */

  0x01,                                 /* bTerminalLink */

  0x01,                                 /* bDelay */

  0x01,                                 /* wFormatTag AUDIO_FORMAT_PCM  0x0001 */

  0x00,

  /* 07 byte*/

  /* USB Speaker Audio Type III Format Interface Descriptor */

  0x0B,                                 /* bLength */

  AUDIO_INTERFACE_DESCRIPTOR_TYPE,      /* bDescriptorType */

  AUDIO_STREAMING_FORMAT_TYPE,          /* bDescriptorSubtype */

  AUDIO_FORMAT_TYPE_I,                  /* bFormatType */

  0x02,                                 /* bNrChannels */

  0x02,                                 /* bSubFrameSize :  2 Bytes per frame (16bits) */

  16,                                   /* bBitResolution (16-bits per sample) */

  0x01,                                 /* bSamFreqType only one frequency supported */

  AUDIO_SAMPLE_FREQ(USBD_AUDIO_FREQ),   /* Audio sampling frequency coded on 3 bytes */

  /* 11 byte*/

  /* Endpoint 1 - Standard Descriptor */

  AUDIO_STANDARD_ENDPOINT_DESC_SIZE,    /* bLength */

  USB_DESC_TYPE_ENDPOINT,               /* bDescriptorType */

  AUDIO_OUT_EP,                         /* bEndpointAddress 1 out endpoint */

  USBD_EP_TYPE_ISOC,                    /* bmAttributes */

  AUDIO_PACKET_SZE(USBD_AUDIO_FREQ),    /* wMaxPacketSize in Bytes (Freq(Samples)*2(Stereo)*2(HalfWord)) */

  AUDIO_FS_BINTERVAL,                   /* bInterval */

  0x00,                                 /* bRefresh */

  0x00,                                 /* bSynchAddress */

  /* 09 byte*/

  /* Endpoint - Audio Streaming Descriptor*/

  AUDIO_STREAMING_ENDPOINT_DESC_SIZE,   /* bLength */

  AUDIO_ENDPOINT_DESCRIPTOR_TYPE,       /* bDescriptorType */

  AUDIO_ENDPOINT_GENERAL,               /* bDescriptor */

  0x00,                                 /* bmAttributes */

  0x00,                                 /* bLockDelayUnits */

  0x00,                                 /* wLockDelay */

  0x00,

  /* 07 byte*/

} ;

/****************************************************犯困区间结束*******************************************************/

本章接下来还有,今天就更到这里。。。。。。。。。。。。。。。。。。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(USB系列三)stm32 CubeMX usb音频描述符详解 usb audio UAC 的相关文章

  • 三星 Android 手机从另一台设备上出现 USB 问题

    早上好 我有一部三星 Android 手机 我通过 USB 电缆将其连接到另一台设备 不是电脑 对于这种情况 我在 android 中启用了 USB 调试和开发人员模式 如果我使用另一台 Android 手机 它工作正常 另一台设备正在闪烁
  • 使用 DeviceWatcher 监视 USB 驱动器并检索设备信息?

    I m a WinForms开发人员和我已经知道如何使用 WMI 监视连接或断开连接的 USB 但不久前我发现了设备观察者 http msdn microsoft com en us library windows devices enum
  • python的跨平台usb模块?

    我有兴趣在 python 中使用 USB 设备进行一些跨平台工作 关于可以执行此类操作的模块有任何提示或建议吗 我浏览了 SF 和 googlecode 但运气不佳 thanks ct PyUSB http pyusb berlios de
  • 使用 C# 向 USB 连接的 GPRS 调制解调器发送 AT 命令

    任何人都可以给我一个关于如何访问连接到 USB 端口的 GPRS 调制解调器的良好指示或指南 我应该为我的程序制作一个 USB 驱动程序以将 AT 命令发送到调制解调器吗 或者就像一个路由器 我可以使用IP地址访问它 谢谢 如果 Windo
  • 是否有可通过 USB 密钥在 Mac OS X 10.6 上运行的便携式 python 解释器?

    我一直在努力寻找一个可以通过工作计算机上的 USB 密钥运行的便携式解释器 Work comp 运行的是 Mac OS X 10 6 环境相当受限 无法访问终端 无法安装应用程序 但我知道便携式应用程序可以从 USB 驱动器运行 我一直在使
  • 不支持混合类型

    请看一下下面的头文件 pragma once using namespace UsbLibrary ref class MissileLauncher public MissileLauncher void private Bytes us
  • OSX:如何从 IOUSBDeviceInterface 或位置 id 获取卷名称(或 bsd 名称)

    我正在尝试编写一个应用程序 将特定的 USB 字符串描述符 USB 大容量存储设备 与其卷或 bsd 名称相关联 因此 代码会遍历所有连接的 USB 设备 获取字符串描述符并从其中之一提取信息 我想获取这些 USB 设备的卷名 我找不到合适
  • 如何在 DriverKit 中将我的 dex 与 USB 设备匹配?

    我正在编写一个驱动程序包扩展 其目标是阻止 USB 设备 例如闪存驱动器 作为起点 我选择了示例项目https developer apple com documentation driverkit communicating Betwee
  • WriteFile 返回错误代码 87

    我正在开发一个写入 HID 设备的程序 但收到错误 87 WriteFile 函数参数无效 我从 Jan Axelson 的 USB Complete 获得了这些功能 所以我不确定为什么会收到错误 我用它来查找我的设备 private vo
  • 在 Python 中将 USB 视频捕获设备友好名称与 OpenCV 端口号相关联

    我想在 Windows 平台上使用 Python 获取外部 USB 视频捕获设备的友好名称和 USB 端口号 我正在使用 OpenCV 从 USB 捕获设备捕获视频 OpenCV 将 USB 端口称为 1 找到的第一个工作摄像头 0 对我来
  • 如何枚举所有HID设备? C#

    我需要枚举连接到我的 PC 的所有 HID 设备 我尝试使用这个答案 https stackoverflow com a 3331509 902424 但它枚举了 USBHub 设备 但我在那里找不到我的 HID 设备 EDIT 我很高兴知
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板
  • 从网络浏览器中检测和访问 USB 设备 - 即使用插件

    是否可以通过插件 activeX Java 或 Flex 编写一个能够检测从 USB 设备通道读取数据流的浏览器插件 我做了一些研究 但没有找到答案 http support microsoft com kb 832678 http sup
  • Android 版 usbmon

    我想分析我的设备的 USB 通信 SGS4 我到处都看到需要配置 usbmon 并将其编译到内核中 Afaik 这个模块没有内置在android linux系统中 我在编译内核方面没有太多经验 但如果有必要 我会这样做 您能说出这样做的步骤
  • 如何设置USB连接模式?

    我正在编写一个应用程序 该应用程序应该将数据转储到 SD 卡上 然后在 PC 上编写另一个应用程序 当设备连接到 PC 时 在光盘驱动器模式下 该应用程序应该读取数据 在我的 HTC Legend 上 有一个对话框可供选择 仅充电 HTC
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能
  • 如何将 Android USB 连接模式更改为仅充电? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • Linux 源代码中的哪个位置会识别特定的 USB 设备?

    我有一个特定的 USB 设备 我想检查其 Linux 驱动程序源代码 我的理解是 USB 驱动程序执行的第一步是注册自己能够处理具有特定供应商 ID 和产品 ID 的设备 就我而言 供应商 ID 是0BDA产品 ID 是8187 有了这些信
  • 如何在 ADB 连接期间禁用电池充电?

    问题描述 每次我在电脑和手机之间连接 USB 线时 电池都会自动充电 我想使用 ADB 协议 但我不想在 ADB 连接期间为电池充电 是否可以关闭此充电功能 当然 我该怎么做呢 环境 Android 操作系统 4 及更高版本的手机 我只需要
  • 有没有办法通过 WiFi 部署/调试 Cordova Android Ionic 应用程序? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 这是一个双胞胎this https stackoverflow com questions 46596236 is there a w

随机推荐

  • 操作符详解

    在之前的篇章说过 我们不能自己创建操作符 只能使用c语言所给的操作符 那今天就来看看操作符具体有哪些呢 目录 1 操作符分类 2 算术操作符 3 移位操作符 左移操作符 右移操作符 4 位操作符 5 赋值操作符 6 单目操作符 7 关系操作
  • 强化学习笔记------第一章----强化学习概述(超详细)

    强化学习讨论的问题是一个智能体 agent 怎么在一个复杂不确定的环境 environment 里面去极大化他能获得的奖励 首先 我们可以把强化学习和监督学习做一个对比 例如图片分类 监督学习 supervised learning 指的是
  • 一篇史上最全面的 Vue 代码风格指南,建议收藏

    作者 卡喵妹 https juejin cn post 6987349513836953607 一 命名规范 市面上常用的命名规范 camelCase 小驼峰式命名法 首字母小写 PascalCase 大驼峰式命名法 首字母大写 kebab
  • 【云原生】SpringCloud-Spring Boot Starter使用测试

    目录 Spring Boot Starter是什么 以前传统的做法 使用 Spring Boot Starter 之后 starter 的理念 starter 的实现 创建Spring Boot Starter步骤 在idea新建一个sta
  • Computer【HDU-2196】【在线LCA+树的直径】

    题目链接 include
  • PHP 自学教程之自定义函数及数组

    一 自定义函数 自定义函数就是我们自己定义的函数 在PHP中自定义函数格式如下 function funname arg1 arg2 arg3 TODO return values 下面举一个按值传递函数
  • Python 制作马赛克拼合图像

    Python 制作马赛克拼合图像 文章目录 Python 制作马赛克拼合图像 知识点 效果 环境 原理 RGB 色彩空间 HSV 色彩空间 RGB 与 HSV 色彩空间的转换 马赛克图片拼合 数据准备 导入需要的库 计算图像平均 HSV 值
  • Linux下Mysql

    1 安装查看是否已经安装了MYSQLrpm qa mysqlmysql 4 1 7 4 RHEL4 1点开add remove programe里面的mysql的detail勾上mysql server2 启动来检测mysql是否已经启动s
  • Redis系列--redis持久化

    一 为什么需要持久化 redis本身运行时数据保存在内存中 如果不进行持久化 那么在redis出现非正常原因宕机或者关闭redis的进程或者关闭计算机后数据肯定被会操作系统从内存中清掉 当然 redis本身默认采用了一种持久化方式 即RDB
  • Matlab 2021b安装教程-Matlab分析软件下载方法

    MATLAB是美国MathWorks公司出品的商业数学软件 用于算法开发 数据可视化 数据分析以及数值计算的高级技术计算语言和交互式环境 主要包括MATLAB和Simulink两大部分 下载方法 https docs qq com shee
  • 【数据分析实战】基于python对酒店预订需求进行分析

    文章目录 引言 数据加载以及基本观察 缺失值观察及处理 缺失值观察以及可视化 缺失值处理 用户数据探索 什么时间预定酒店将会更经济实惠 哪个月份的酒店预订是最繁忙的 商家数据探索 按市场细分的不同预定情况是怎样的 什么样的人更容易取消预订
  • CCNA考试题库中英文翻译版及答案11

    26 Two routers named Atlanta and Brevard are connected by their serial interfaces as shown in the exhibit but there is n
  • SpringCloud-微服务架构编码构建

    SpringCloud Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具 例如配置管理 服务发现 断路器 智能路由 微代理 控制总线 分布式系统的协调导致了样板模式 使用Spring Cloud开发人员可以快速
  • 010.CMake函数和宏(下)

    文章目录 函数和宏的根本区别 同名覆盖 总结 函数和宏的根本区别 函数和宏之间的一个根本区别 是函数引入了一个新的变量作用域 而宏没有 在函数内定义或修改的变量对函数外同名的变量没有影响 而宏与其调用者共享相同的变量范围 但是请注意 函数不
  • 我的第一个hbuilder项目,基于h5的五子棋游戏

    这是在老师的引导下完成小游戏 以下是今天学习的内容和知识分享 第一个游戏的操作思想 使用hbuilder软件 打开软件可在其帮助中 hbuilder入门 可以了解相应的软件使用方法 使用 菜鸟教程 网站 可在其中学习h5的相关知识 制作五子
  • 数据结构---堆排序

    堆排序 JAVA实现 和快速排序区别 二叉堆的构建 删除 调整是实现堆排序的基础 之前博客写了二叉堆 二叉堆 最大堆的堆顶是整个堆中的最大元素 最小堆的堆顶是整个堆中的最小元素 堆排序步骤 把无序数组构建成二叉堆 需要从小到大排序 则构建成
  • QT之模态

    模态 当一个窗口以模态显示 那么所有其他窗口的事件都被阻塞 停止运行 直到模态窗口关闭后才继续 MainWindow pMainWindow new MainWindow pMainWindow gt setWindowTitle QStr
  • Hbuilder X用不习惯?快来看看这些快捷键

    用惯了vscode Hbuilder X的使用也得熟练 快捷键如下 Ctrl N 新建文件 Ctrl W 关闭文件 Ctrl Shift W 关闭全部文件 Ctrl S 保存文件 Ctrl Shift S 保存全部文件 Alt 激活代码助手
  • C/C++的单元/集成测试工具 - VectorCAST/C++

    什么是VectorCAST C VectorCAST C 是一套集成的软件测试解决方案 能显著降低C C 测试过程中为达到安全性检测和嵌入式系统关键任务检测所必需的时间 工作量及成本 VectorCAST C 可自动实现 为单元测试和集成测
  • (USB系列三)stm32 CubeMX usb音频描述符详解 usb audio UAC

    如果需要麦克风阵列 回声消除 声源定位 波束成形 语音对话的产品请访问我好朋友的店铺 店铺链接 首页 智能语音开发者联盟 淘宝网 大家好我是人见人爱 花见花开的大魔王 usb协议还是很烦的 cube很大程度上减轻了工作量 但是不灵活是个大问