USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七)

这篇具有很好参考价值的文章主要介绍了USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

链接快速定位

前沿  

1 描述符讲解

1.1 设备描述符

1.2 配置描述符

1.3 接口描述符

1.4 功能描述符

1.4.1 音频控制接口描述符(AudioControl Interface Descriptors)

1.4.2 音频流接口描述符(AudioStreaming Interface Descriptors)

1.4.3 音频流端点描述符(AudioControl Endpoint Descriptors)

1.5 端点描述符

1.6 字符串描述符

2 关键函数讲解

2.1 GPIO配置讲解

2.2 非零端点函数讲解

2.3 中断函数讲解--USB复位函数讲解

2.4 主函数讲解

3 运行演示


链接快速定位

USB -- 初识USB协议(一)

源码下载请参考链接:USB -- STM32-FS-USB-Device驱动代码简述(二)

USB -- STM32F103虚拟串口bulk传输讲解(三)

USB -- STM32F103自定义HID设备及HID上位机中断传输讲解(四)

USB -- STM32F103 U盘(MassStorage)SDIO接口SCSI协议Bulk传输讲解(五)

USB -- STM32F103 USB DFU设备固件升级(IAP)控制传输讲解(六)

audio数据手册

前沿  

        前面两节主要是对USB的基本概念做了简单讲解,学习USB的最本质目的还是要回到USB的应用方向,接下来的几章主要讲解USB的各类应用,包括:

  • 虚拟串口(环回测试)-- bulk传输(USB -- STM32F103虚拟串口bulk传输讲解(三))
  • 自定义HID -- 中断传输(USB -- STM32F103自定义HID设备及HID上位机中断传输讲解(四))
  • U盘 -- bulk传输(USB -- STM32F103 U盘(MassStorage)SDIO接口SCSI协议Bulk传输讲解(五))
  • 在线固件升级(DFU)-- 控制传输(USB -- STM32F103 USB DFU设备固件升级(IAP)控制传输讲解(六))
  • 语音录制及播放 -- 同步传输(本章讲解)
  • 照相机 -- 同步传输
  • 复合设备 -- 中断+bulk传输

        主要还是带领大家找相关的资料及相关的工具和代码。

1 描述符讲解

        描述符是USB能够正常通信的前提,没有描述符,USB就不知道当前是什么样的设备,所以描述符在USB整个通信过程中占有十分重要的地位,所以这里重点讲解一下USB的各类描述符。

        ST的例程为我们配置好了应用的描述符,我们不需要关注也能正常运行程序,但是我们这里讲解一下怎么通过查找资料来知道具体描述符的含义。

1.1 设备描述符

        以下是STM32F103系列的audio_speak的设备描述符代码(每个字节对应的含义可以在USB -- 初识USB协议(一)中查看):

const uint8_t Speaker_DeviceDescriptor[] =
  {
    SPEAKER_SIZ_DEVICE_DESC,          /* bLength */
    USB_DEVICE_DESCRIPTOR_TYPE,           /* bDescriptorType */
    0x00,          /* 2.00 */             /* bcdUSB */
    0x02,
    0x00,                                 /* bDeviceClass */
    0x00,                                 /* bDeviceSubClass */
    0x00,                                 /* bDeviceProtocol */
    0x40,                                 /* bMaxPacketSize 40 */
    0x83,                                 /* idVendor */
    0x04,
    0x30,                                 /* idProduct  = 0x5730*/
    0x57,
    0x00,          /* 2.00 */             /* bcdDevice */
    0x02,
    1,                                    /* iManufacturer */
    2,                                    /* iProduct */
    3,                                    /* iSerialNumber */
    0x01                                  /* bNumConfigurations */
  };

        设备描述符顾名思义就是描述USB设备的基本信息,主要包括以下信息:

  • USB版本号
  • USB设备类型
  • USB设备协议
  • 端点0最大传输大小(最大64byte)
  • 厂商向USBIF申请的VID(需付费,由芯片厂商提供)
  • 设备PID(厂商自定义)
  • 制造商的字符串描述符索引(描述生产这个产品的厂商)
  • 产品的字符串描述符索引(描述是什么产品)
  • 设备序号的字符串描述符索引(主要是芯片的UID)
  • 配置的数量(一般为1)

        设备类型可以通过USB官网Class查询,我们这里是CDC设备,所以bDeviceClass=0x01,其他两项任意填写。

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

        但实际这里的bDeviceClass=0x00,是因为0x00表示class可以在接口与描述符中定义。

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

        制造商的字符串描述符索引、产品的字符串描述符索引和设备序号的字符串描述符索引主要是制造商、产品和设备序列号在字符串描述符的索引位置。

        比如这里举个例子,以下三个是字符串描述符,分别是制造商描述符、产品描述符和序列号描述符:

const uint8_t Speaker_StringVendor[SPEAKER_SIZ_STRING_VENDOR] =
  {
    SPEAKER_SIZ_STRING_VENDOR, /* Size of manufacturer string */
    USB_STRING_DESCRIPTOR_TYPE,  /* bDescriptorType*/
    /* Manufacturer: "STMicroelectronics" */
    'S', 0, 'T', 0, 'M', 0, 'i', 0, 'c', 0, 'r', 0, 'o', 0, 'e', 0,
    'l', 0, 'e', 0, 'c', 0, 't', 0, 'r', 0, 'o', 0, 'n', 0, 'i', 0,
    'c', 0, 's', 0
  };

const uint8_t Speaker_StringProduct[SPEAKER_SIZ_STRING_PRODUCT] =
  {
    SPEAKER_SIZ_STRING_PRODUCT,  /* bLength */
    USB_STRING_DESCRIPTOR_TYPE,        /* bDescriptorType */
    'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0, ' ', 0,
    'S', 0, 'p', 0, 'e', 0, 'a', 0, 'k', 0, 'e', 0, 'r', 0
  };

uint8_t Speaker_StringSerial[SPEAKER_SIZ_STRING_SERIAL] =
  {
    SPEAKER_SIZ_STRING_SERIAL,  /* bLength */
    USB_STRING_DESCRIPTOR_TYPE,        /* bDescriptorType */
    'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0
  };

    由下面代码可知,他们的位置也是根据索引号排列的,所以主机请求index为1的描述符,那么设备就发送制造商描述符给主机,告诉主机USB的制造商是什么。

ONE_DESCRIPTOR String_Descriptor[4] =
  {
    {(uint8_t*)Speaker_StringLangID, SPEAKER_SIZ_STRING_LANGID},
    {(uint8_t*)Speaker_StringVendor, SPEAKER_SIZ_STRING_VENDOR},
    {(uint8_t*)Speaker_StringProduct, SPEAKER_SIZ_STRING_PRODUCT},
    {(uint8_t*)Speaker_StringSerial, SPEAKER_SIZ_STRING_SERIAL},
  };

        如果设备描述符的索引值修改了,那么String_Descriptor数组存放数据的顺序也需要相应的修改。

        VID可以通过USB官网:USB_Members查看,比如这里的是ST的VID,0x0483的10进制是1155,我们在USB官网查看,如下:

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

1.2 配置描述符

        配置描述符顾名思义就是描述USB设备的配置信息,主要包括以下信息:

  • USB接口的数量(会在接口描述符讲解)
  • USB的配置值(一般为1,根据设备描述符配置数量决定)
  • USB的供电信息
  • USB的最大电流
const uint8_t Speaker_ConfigDescriptor[] =
  {
    0x09,                                 /* bLength */
    USB_CONFIGURATION_DESCRIPTOR_TYPE,    /* bDescriptorType */
    0x6D,                                 /* wTotalLength  110 bytes*/
    0x00,
    0x02,                                 /* bNumInterfaces */
    0x01,                                 /* bConfigurationValue */
    0x00,                                 /* iConfiguration */
    0xC0,                                 /* bmAttributes Self Powered*/
    0x32,                                 /* bMaxPower = 100 mA*/
  }

1.3 接口描述符

        这里的接口描述符有两个,由配置描述符指定个数。

        第一个接口描述符是标准音频控制接口描述符(Standard AudioControl Interface Descriptors)。

        第二个接口描述符是标准音频流接口描述符(Standard AudioStreaming Interface Descriptors),它又分为两个子类:

  • 备用设置0是一个零带宽设置,用于在麦克风未使用时放弃总线上要求的带宽。这是通电后的默认设置。通过指定接口的此备用设置没有与其关联的端点(bNumEndpoints=0)来实现零带宽。此备用设置的描述符集合是为了减少标准接口描述符。
  • 备用设置1是接口的操作设置。它包含标准和类特定的接口和端点描述符。
uint8_t Speak_InterfaceDescriptor[ ] = 
{
    /* USB Speaker Standard interface descriptor */
    SPEAKER_SIZ_INTERFACE_DESC_SIZE,      /* bLength */
    USB_INTERFACE_DESCRIPTOR_TYPE,        /* bDescriptorType */
    0x00,                                 /* bInterfaceNumber */
    0x00,                                 /* bAlternateSetting */
    0x00,                                 /* bNumEndpoints */
    USB_DEVICE_CLASS_AUDIO,               /* bInterfaceClass */
    AUDIO_SUBCLASS_AUDIOCONTROL,          /* bInterfaceSubClass */
    AUDIO_PROTOCOL_UNDEFINED,             /* bInterfaceProtocol */
    0x00,                                 /* iInterface */
    。
    。
    。
    /* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwidth */
    /* Interface 1, Alternate Setting 0                                             */
    SPEAKER_SIZ_INTERFACE_DESC_SIZE,  /* bLength */
    USB_INTERFACE_DESCRIPTOR_TYPE,        /* 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                                           */
    SPEAKER_SIZ_INTERFACE_DESC_SIZE,  /* bLength */
    USB_INTERFACE_DESCRIPTOR_TYPE,        /* bDescriptorType */
    0x01,                                 /* bInterfaceNumber */
    0x01,                                 /* bAlternateSetting */
    0x01,                                 /* bNumEndpoints */
    USB_DEVICE_CLASS_AUDIO,               /* bInterfaceClass */
    AUDIO_SUBCLASS_AUDIOSTREAMING,        /* bInterfaceSubClass */
    AUDIO_PROTOCOL_UNDEFINED,             /* bInterfaceProtocol */
    0x00,                                 /* iInterface */
 }

         首先下载audio数据手册,打开《audio10.pdf》文件,找到4.3.1小节,这里有对接口描述符的全部解释,由手册可知,bInterfaceSubClass为Abstract Control Model,bInterfaceProtocol为Common AT commands,其它位也相同,查找手册,找出对应的解释.

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

1.4 功能描述符

        USB功能描述符这里分为三个部分:

  • 音频控制接口描述符(AudioControl Interface Descriptors)
  • 音频流接口描述符(AudioStreaming Interface Descriptors)
  • 音频流端点描述符(AudioControl Endpoint Descriptors)

        打开《audio10.pdf》文件,在4.3.2章节查看具体描述符的具体含义,这里不做详细说明,音频本身涉及的问题比较复杂,这里只是针对USB讲解,不过多的讲解音频的具体协议。

1.4.1 音频控制接口描述符(AudioControl Interface Descriptors)

uint8_t Speak_FunctionalDescriptor[ ] = 
{
    /* USB Speaker Class-specific AC Interface Descriptor */
    SPEAKER_SIZ_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 */
    0x02,                                 /* bUnitID */
    0x01,                                 /* bSourceID */
    0x01,                                 /* bControlSize */
    AUDIO_CONTROL_MUTE,                   /* bmaControls(0) */
    0x00,                                 /* 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*/
 }

1.4.2 音频流接口描述符(AudioStreaming Interface Descriptors)

uint8_t Speak_FunctionalDescriptor[ ] = 
{
    /* 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 */
    0x02,                                 /* wFormatTag AUDIO_FORMAT_PCM8  0x0002*/
    0x00,
    /* 07 byte*/

    /* USB Speaker Audio Type I Format Interface Descriptor */
    0x0B,                                 /* bLength */
    AUDIO_INTERFACE_DESCRIPTOR_TYPE,      /* bDescriptorType */
    AUDIO_STREAMING_FORMAT_TYPE,          /* bDescriptorSubtype */
    AUDIO_FORMAT_TYPE_I,                  /* bFormatType */
    0x01,                                 /* bNrChannels */
    0x01,                                 /* bSubFrameSize */
    8,                                    /* bBitResolution */
    0x01,                                 /* bSamFreqType */
    0xF0,                                 /* tSamFreq 22000 = 0x55F0 */
    0x55,
    0x00,
    /* 11 byte*/
 }

1.4.3 音频流端点描述符(AudioControl Endpoint Descriptors)

uint8_t Speak_FunctionalDescriptor[ ] = 
{
    /* 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*/
 }

1.5 端点描述符

        这里用到1个端点,具体的解释可参见USB -- 初识USB协议(一)。

uint8_t Speak_EndpointDescriptor[ ] = 
{
    /* Endpoint 1 - Standard Descriptor */
    AUDIO_STANDARD_ENDPOINT_DESC_SIZE,    /* bLength */
    USB_ENDPOINT_DESCRIPTOR_TYPE,         /* bDescriptorType */
    0x01,                                 /* bEndpointAddress 1 out endpoint*/
    USB_ENDPOINT_TYPE_ISOCHRONOUS,        /* bmAttributes */
    0x16,                                 /* wMaxPacketSize 22 bytes*/
    0x00,
    0x01,                                 /* bInterval */
    0x00,                                 /* bRefresh */
    0x00,                                 /* bSynchAddress */
    /* 09 byte*/
 }

1.6 字符串描述符

        在设备描述符中已经对制造商描述符、产品描述符和设备序号描述符做了说明,这里仅对语言ID描述符做简单说明。

        语言ID描述符相对很简单,就是告诉主机用的哪种语言编码,这里一般选择0x0409,使用美国的编码。一般使用最多的也是美国编码。

/* USB String Descriptor (optional) */
const uint8_t Speaker_StringLangID[SPEAKER_SIZ_STRING_LANGID] =
  {
    0x04,
    0x03,
    0x09,
    0x04
  }
  ; /* LangID = 0x0409: U.S. English */

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

2 关键函数讲解

2.1 GPIO配置讲解

        这里对USB的D+外部上拉电阻进行了配置,如果读者使用的开发板和ST官网的外部上拉不一致,需要修改这个位置的IO口定义。这里也需要注意,ST开发板使用的是PNP型三极管作为上拉电阻的使能信号,所以这里GPIO输出低D+上拉。

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

2.2 非零端点函数讲解

        非0端点传输函数主要在“usb_endp.c”文件中实现,我们打开usb_endp.c文件,看到只有1个函数,因为是Speak,所以是OUT传输,并且同步传输不回ACK,类似于UDP协议。

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

2.3 中断函数讲解--USB复位函数讲解

        USB复位函数十分的重要,因为在USB主机识别到设备的时候,首先发出复位指令,USB设备收到复位指令之后,会去初始化一些使用到的端点(端点0必须初始化),然后再通过相应的端点实现设备与主机间的通信。

        下图是利用DSVIEW抓取的USB枚举过程的波形,每次在USB设备枚举之前,都会产生一个复位信号。

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

        下面代码是USB复位信号来临之后,USB所做的一些事情,主要就是初始化了端点的状态,为后续枚举过程做准备,这里把端点1配置为双buffer模式,为了提高传输效率,后面有机会可以给大家讲解。

/*******************************************************************************
* Function Name  : Speaker_Reset.
* Description    : Speaker reset routine.
* Input          : None.
* Output         : None.
* Return         : None.
*******************************************************************************/
void Speaker_Reset()
{
  /* Set Speaker device as not configured state */
  pInformation->Current_Configuration = 0;

  /* Current Feature initialization */
  pInformation->Current_Feature = Speaker_ConfigDescriptor[7];

  SetBTABLE(BTABLE_ADDRESS);

  /* Initialize Endpoint 0 */
  SetEPType(ENDP0, EP_CONTROL);
  SetEPTxStatus(ENDP0, EP_TX_NAK);
  SetEPRxAddr(ENDP0, ENDP0_RXADDR);
  SetEPRxCount(ENDP0, Device_Property.MaxPacketSize);
  SetEPTxAddr(ENDP0, ENDP0_TXADDR);
  Clear_Status_Out(ENDP0);
  SetEPRxValid(ENDP0);

  /* Initialize Endpoint 1 */
  SetEPType(ENDP1, EP_ISOCHRONOUS);
  SetEPDblBuffAddr(ENDP1, ENDP1_BUF0Addr, ENDP1_BUF1Addr);
  SetEPDblBuffCount(ENDP1, EP_DBUF_OUT, 0x40);
  ClearDTOG_RX(ENDP1);
  ClearDTOG_TX(ENDP1);
  ToggleDTOG_TX(ENDP1);
  SetEPRxStatus(ENDP1, EP_RX_VALID);
  SetEPTxStatus(ENDP1, EP_TX_DIS);

  SetEPRxValid(ENDP0);
  /* Set this device to response on default address */
  SetDeviceAddress(0);

  bDeviceState = ATTACHED;

  In_Data_Offset = 0;
  Out_Data_Offset = 0;
}

2.4 主函数讲解

        主函数代码相对简单,就是实现了收到的数据然后发送出去和音频芯片的初始化,初始化ST已经为我们做好了,如果想进一步了解需要自行下载AK4343芯片手册,并查看相应的寄存器位的功能,并配置,音频芯片使用的是AK4343芯片。

/*******************************************************************************
* Function Name  : main.
* Description    : Main routine.
* Input          : None.
* Output         : None.
* Return         : None.
*******************************************************************************/
int main(void)
{
  Set_System();
  Set_USBClock();
  USB_Config();
  USB_Init();
  Speaker_Config();
  while (1)
  {}
}

        这里附图一张ST官网的AK4343的原理图。

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

        但是经过我们的实际测试,如果接耳机,ST官网提供的原理图是不能识别到声音的,所以需要修改一下原理图,修改的原理图如下图所示,主要修改了输出声道的串联电容,把它去掉了。

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

3 运行演示

1. 正确下载程序,能够在设备管理器查看到Speak设备。

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

2. 打开音乐播放器,并且禁止所有增强效果。

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

3. 通过声音属性查看STM32 Speak正在播放音乐,并且逻辑分析仪住区波形也有数据(注意查看这里的OUT包没有ACK应答)。

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

4. 抓取USB波形每包数据为22字节,这是因为设置的频率是22000Hz,1个SOF是1ms,22000Hz就是1ms传输22个字节,所以每个SOF传输是22字节。

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七),usb,stm32,嵌入式硬件,单片机,音视频

接下来讲解STM32 USB AUDIO Microphone同步传输(In传输)通信实验,敬请期待。。。文章来源地址https://www.toymoban.com/news/detail-765088.html

到了这里,关于USB -- STM32F103 USB AUDIO(音频)Speaker同步传输(Out传输)讲解(七)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F103C8用内部Flash做一个优盘(USB+MSC+FATFS)

    STM32F103C8用内部Flash做一个优盘(USB+MSC+FATFS),轻松实现APP升级、数据存储。 直接使用STM32CubeMX生成基本的工程,省得我们去调底层。 时钟配置为外部8MHz晶振,这个需要根据自己开发板的晶振选择。  启用SWD下载和滴答定时器  启用USB  启用FATFS,MAX_SS和MIN_SS设置为1024。  配

    2024年02月14日
    浏览(44)
  • 野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)

    MCU:STM32F103VET6 开发环境:STM32CubeMX+MDK5   实现USB的虚拟串口不需要去理解USB的底层驱动,只需要STM32CubeMX去配置生成工程即可。在野火的指南者中,是没有这一类的视频和示例的,博主使用这款开发板实现USB虚拟串口。 首先需要打开STM32CubeMX工具。输入开发板MCU对应型号,找

    2024年02月08日
    浏览(43)
  • STM32f103c8t6小白学习笔记(一)从点灯开始之USB转TTL

    步骤一:与stm32f103c8t6最小系统板接线:       一共四根,PA9,PA10分别对应连接RXD,TXD (如下图),GND连GND ,3V3连32系统板的3.3V,跳线帽将5V和VCC相连(如上图),原因 from数据手册 步骤二:跳线帽:接法如上图 BOOT0置1,BOOT1置0 ,原因from参考手册      因为我使用的是串口下载模

    2023年04月09日
    浏览(39)
  • 【正点原子STM32连载】 第六十章 USB读卡器实验摘自【正点原子】STM32F103 战舰开发指南V1.2

    1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html# 本章,我们将向大家介绍如何利用USB OTG FS在STM32F1开发板实现一个USB 读卡器。本章分为如下几个部分

    2024年02月16日
    浏览(53)
  • 基于STM32F103C8T6的高速DMA传输多通道ADC数据

    ADC在STM32系列单片机的使用中占用着很大的比例,常见的案例是通过ADC单次转换电压值,这种方式的缺陷在于转换效率不高。一般的单片机带有ADC1和ADC2两个ADC转换,单次转换需要执行一定的程序,想得到结果需要耗费一些时间在赋值,调用中断上面。在此基础上,为了提高转

    2024年02月11日
    浏览(55)
  • 使用USB转TTL下载器将固件烧写到STM32F103C8T6最小系统板中

    ch340驱动下载地址: https://www.wch.cn/download/CH341SER_EXE.html mcuisp下载地址: 百度云盘资源: 链接:https://pan.baidu.com/s/1TuecWD0T1HTMkEpobuesFw 提取码:visk Flymcu下载地址: 百度云盘资源 链接:https://pan.baidu.com/s/1VxMUZFOVvpAf-L_YbATMag 提取码:fasf usb转TTL下载器的跳线帽接3V3 开发板BOOT0跳线

    2024年01月18日
    浏览(49)
  • STM32F103C8T6使用USB转TTL程序下载与BOOT0,BOOT1设置的误区

    1.STM32F103C8T6使用 USB转TTL下载 程序 方式 烧录前的准备工作操作: (1)BOOT0置3.3V,就是将跳帽接1 (2)BOOT1置GND,就是将跳帽接0 连接好线序开始烧录工作: 1:电源---此处省略一万字--- 2:TXD接PA10,RXD接PA9 3:使用烧录软件进行程序烧录(由于软件有很多就不谈细节了,我使用

    2024年02月14日
    浏览(41)
  • 基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡

            所需设备:                 1、STM32F103C8T6;                 2、USB 转 TLL 或 ST-LINK V2 01-0;                 3、杜邦线若干;                 4、面包板1个;                 5、USB安卓数据线(使用USB 转 TLL需要用到);         1、首先需要建

    2024年02月03日
    浏览(45)
  • STM32+ESP-01s+EMQX实现单片机MQTT协议传输数据上云(二)STM32F103与ESP-01s的Usart通信,实现STM32连接上网上云

    单片机:STM32F103c8t6 WiFi模块:ESP8266-01s EMQX:自身服务器上搭载emq服务器或者借用emqx window 版本  USB TO TTL模块:CH340 因为CH340不能给ESP-01s供3.3V的电,所以测试时需要外加供电           本章中涉及到的技术原理主要为ESP01S wfi模块的AT指令通信,我在上一篇文章给大家提到了

    2024年02月16日
    浏览(52)
  • 基于STM32F103C8T6四路AD采集数据显示在oled屏上非DMA传输方式(附百度网盘下载链接)

    本文采用四路AD采集 光照强度、烟雾浓度、一氧化碳、空气质量 等四个物理量,并采用 中位值平均滤波(防脉冲干扰平均滤波法)算法 对偶然出现的脉冲性干扰,消除由其引起的采样值偏差。 STM32F103C8T6有两个ADC,12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,

    2024年02月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包