求技术解答,STM32H723的USB模拟U盘应用过程遇到了问题。
请问一下,我的nucleo板子连接usb线,找不到target,一直无法下载程序怎么回事呢?
请问一下,stm32WB有可以驱动声卡的驱动程序吗(声卡是PCM2704)?
STM32F407 USB怎么测试接口的极限速度
我的电脑识别不到STM32的ST-LINK驱动(特指针对芯片stm32wle5ccu6)
请问各位大佬,STM32F4怎么利用Typec口OTG,硬件电路怎么实现
stm32 usb复合设备支持键盘鼠标和hid串口通信可以实现吗
stm32f407 开启两路(FS和HS) Custom HID,与上位机通信偶尔中断
stm32f746g-disco开发板的串口通讯连接方式
STM32F746g-disco开发板串口配置串口助手无法接收到数据
评分
查看全部评分
当初也怀疑过这样的问题,但是换了几台苹果笔记本都是这样的问题。只要是苹果电脑装WIN10就会碰到这样的问题。别的品牌电脑在WIN10下面还没有碰到这样的问题。
可能是苹果笔记本的IOS操作系统需要另行下载针对ST-LINK的驱动。
不是苹果的系统,是改装的WIN10系统
评分
查看全部评分
USB HID 是跨平台通用的,不过苹果的 BIOS 的确对于 USB 描述符的规范度要求非常高,因此说软件里面少许问题都会被无限放大。
现在是在苹果电脑装的WIN10下面,用工具打开显示这样的,但HID发送为负1字节
下面是设备描述符代码,能帮忙看下什么问题。谢谢!现在是有时可以正常连接。但连接不上的次数占大多数。
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
* File Name : usb_desc.c
* Author : MCD Application Team
* Version : V3.2.1
* Date : 07/05/2010
* Description : Descriptors for Joystick Mouse Demo
********************************************************************************
* 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_lib.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Extern variables ----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/* USB Standard Device Descriptor */
//usb标准设备描述符
const u8 DinkUsbDeviceDescriptor[DINK_USB_SIZ_DEVICE_DESC] = {
USB_DEVICE_DESC_SIZE, //bLength字段。设备描述符的长度为18(0x12)字节
USB_DEVICE_DESCRIPTOR_TYPE, //bDescriptorType字段。设备描述符的编号为0x01
WBVAL(0x0200), //bcdUSB字段。这里设置版本为USB1.1,即0x0110。
0x00, //bDeviceClass字段。我们不在设备描述符中定义设备类,
0x00, //bDeviceSubClass字段。bDeviceClass字段为0时,该字段也为0。
0x00, //bDeviceProtocol字段。bDeviceClass字段为0时,该字段也为0。
0x40, //bMaxPacketSize0字段。端点0的最大包长度。
WBVAL(0x0483), //idVender字段。厂商ID号,我们这里取0x8888,仅供实验用。
WBVAL(0x5750), //idProduct字段。产品ID号,由于是第一个实验,我们这里取0x0001。\。
WBVAL(0x0100), // 设备的版本
0x01, //iManufacturer字段。厂商字符串的索引值,为了方便记忆和管理
0x02, //iProduct字段。产品字符串的索引值。刚刚用了1,这里就取2吧。
0x03, //iSerialNumber字段。设备的序列号字符串索引值。
0x01 //bNumConfigurations字段。该设备所具有的配置数。
};
//USB报告描述符的定义
const u8 HID_ReportDescriptor[]=
{
0x05, 0x8c, /* USAGE_PAGE用法页 (ST Page) */
0x09, 0x01, /* USAGE 用法(Demo Kit) */
0xa1, 0x01, /* COLLECTION 集合开始(Application) */
// The Input report 输入报告
0x09,0x03, // USAGE ID 用法- Vendor defined
0x15,0x00, // LOGICAL_MINIMUM 逻辑最小值(0)
0x26,0x00, 0xFF, // LOGICAL_MAXIMUM 逻辑最大值(255)
0x75,0x08, // REPORT_SIZE 报告长度(8bit)
0x95,REPORT_COUNT, // REPORT_COUNT 报告总计(64Byte)
0x81,0x02, // INPUT 输入(Data,Var,Abs)
// The Output report
0x09,0x04, // USAGE ID 用法- Vendor defined
0x15,0x00, // LOGICAL_MINIMUM 逻辑最小值(0)
0x26,0x00,0xFF, // LOGICAL_MAXIMUM 逻辑最大值(255)
0x75,0x08, // REPORT_SIZE 报告长度(8bit)
0x95,REPORT_COUNT, // REPORT_COUNT 报告总计(64Byte)
0x91,0x02, // OUTPUT输出(Data,Var,Abs)
0xc0 /* END_COLLECTION 集合结束*/
};
//通过上面的报告描述符的定义,我们知道返回的输入报告具有8字节。
//输出报告也有32字节。至于这32字节的数据是干什么用的,就要由用户
//自己来决定了。
///////////////////////////报告描述符完毕////////////////////////////
/* USB Configuration Descriptor */
/* All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
//usb配置描述符
const u8 DinkUsbConfigDescriptor[DINK_USB_SIZ_CONFIG_DESC] = {
/***************配置描述符***********************/
USB_CONFIGUARTION_DESC_SIZE, //bLength字段。配置描述符的长度为9字节。
USB_CONFIGURATION_DESCRIPTOR_TYPE, //bDescriptorType字段。配置描述符编号为0x02。
//wTotalLength字段。配置描述符集合的总长度,
//包括配置描述符本身、接口描述符、类描述符、端点描述符等。
WBVAL(
USB_CONFIGUARTION_DESC_SIZE + //配置描述符
USB_INTERFACE_DESC_SIZE + //接口1描述符
9 + //hid描述符
USB_ENDPOINT_DESC_SIZE + //端点描述符1
USB_ENDPOINT_DESC_SIZE + //端点描述符2
USB_INTERFACE_DESC_SIZE + //接口2描述符
USB_ENDPOINT_DESC_SIZE + //端点描述符1
USB_ENDPOINT_DESC_SIZE //端点描述符2
),
0x02, //bNumInterfaces字段。该配置包含的接口数,复合设备,两个接口。
0x01, //bConfiguration字段。该配置的值为1。
0x00, //iConfigurationz字段,该配置的字符串索引。这里没有,为0。
USB_CONFIG_BUS_POWERED , //bmAttributes字段,该设备的属性
USB_CONFIG_POWER_MA(500), //bMaxPower字段,该设备需要的最大电流量
/*********************第一个接口描述符,hid设备**********************/
USB_INTERFACE_DESC_SIZE, //bLength字段。接口描述符的长度为9字节。
USB_INTERFACE_DESCRIPTOR_TYPE, //bDescriptorType字段。接口描述符的编号为0x04。
0x00, //bInterfaceNumber字段。该接口的编号,第一个接口,编号为0。
0x00, //bAlternateSetting字段。该接口的备用编号,为0。
0x02, //bNumEndpoints字段。非0端点的数目。该接口有2个批量端点
USB_DEVICE_CLASS_HUMAN_INTERFACE, //bInterfaceClass字段。该接口所使用的类。大容量存储设备接口类的代码为0x08。,
0x00, //bInterfaceSubClass字段。该接口所使用的子类。在HID1.1协议中,
//只规定了一种子类:支持BIOS引导启动的子类。
//USB键盘、鼠标属于该子类,子类代码为0x01。
//但这里我们是自定义的HID设备,所以不使用子类。
0x00, //bInterfaceProtocol字段。如果子类为支持引导启动的子类,
//则协议可选择鼠标和键盘。键盘代码为0x01,鼠标代码为0x02。
//自定义的HID设备,也不使用协议。
0x00, //iConfiguration字段。该接口的字符串索引值。这里没有,为0。
/*********************HID报告描述符*************************/
//bLength字段。本HID描述符下只有一个下级描述符。所以长度为9字节。
0x09,
//bDescriptorType字段。HID描述符的编号为0x21。
0x21,
//bcdHID字段。本协议使用的HID1.1协议。注意低字节在先。
0x10,
0x01,
//bCountyCode字段。设备适用的国家代码,这里选择为美国,代码0x21。
0x00,
//bNumDescriptors字段。下级描述符的数目。我们只有一个报告描述符。
0x01,
//bDescriptorType字段。下级描述符的类型,为报告描述符,编号为0x22。
0x22,
//bDescriptorLength字段。下级描述符的长度。下级描述符为报告描述符。
sizeof(HID_ReportDescriptor)&0xFF,
(sizeof(HID_ReportDescriptor)>>8)&0xFF,
/*********************端点1描述符 **********************************/
/* 端点描述符 */
USB_ENDPOINT_DESC_SIZE, //bLength字段。端点描述符长度为7字节。
USB_ENDPOINT_DESCRIPTOR_TYPE, //bDescriptorType字段。端点描述符编号为0x05。
USB_ENDPOINT_IN(1), //bEndpointAddress字段。端点的地址。我们使用D12的输入端点1。
USB_ENDPOINT_TYPE_INTERRUPT, //bmAttributes字段。D1~D0为端点传输类型选择。
WBVAL(0x0040), //wMaxPacketSize字段。该端点的最大包长。最大包长为64字节。
0x02, //bInterval字段。端点查询的时间,端点查询的时间,此处无意义。
/*********************端点2描述符 **********************************/
/* 端点描述符 */
USB_ENDPOINT_DESC_SIZE, //bLength字段。端点描述符长度为7字节。
USB_ENDPOINT_DESCRIPTOR_TYPE, //bDescriptorType字段。端点描述符编号为0x05。
USB_ENDPOINT_OUT(1), //bEndpointAddress字段。端点的地址。我们使用D12的输入端点1。
USB_ENDPOINT_TYPE_INTERRUPT, //bmAttributes字段。D1~D0为端点传输类型选择。
WBVAL(0x0040), //wMaxPacketSize字段。该端点的最大包长。最大包长为64字节。
0x02, //bInterval字段。端点查询的时间,端点查询的时间,此处无意义。
/*******************第二个接口描述符 存储设备*********************/
USB_INTERFACE_DESC_SIZE, //bLength字段。接口描述符的长度为9字节。
USB_INTERFACE_DESCRIPTOR_TYPE, //bDescriptorType字段。接口描述符的编号为0x04。
0x01, //bInterfaceNumber字段。该接口的编号,第二个接口,编号为1。
0x00, //bAlternateSetting字段。该接口的备用编号,为0。
0x02, //bNumEndpoints字段。非0端点的数目。该接口有2个批量端点
USB_DEVICE_CLASS_STORAGE, //bInterfaceClass字段。该接口所使用的类。大容量存储设备接口类的代码为0x08。,
MSC_SUBCLASS_SCSI, //bInterfaceSubClass字段。SCSI透明命令集的子类代码为0x06。
MSC_PROTOCOL_BULK_ONLY, //bInterfaceProtocol字段。协议为仅批量传输,代码为0x50。
0x04, //iConfiguration字段。该接口的字符串索引值
/************************************* 端点描述符 1*********************************************/
USB_ENDPOINT_DESC_SIZE, //bLength字段。端点描述符长度为7字节。
USB_ENDPOINT_DESCRIPTOR_TYPE, //bDescriptorType字段。端点描述符编号为0x05。
USB_ENDPOINT_IN(2), //bEndpointAddress字段。端点的地址。我们使用D12的输入端点1。
USB_ENDPOINT_TYPE_BULK, //bmAttributes字段。D1~D0为端点传输类型选择。
WBVAL(0x0040), //wMaxPacketSize字段。该端点的最大包长。最大包长为64字节。
0x00, //bInterval字段。端点查询的时间,端点查询的时间,此处无意义。
/************************************端点描述符 2********************************************************/
USB_ENDPOINT_DESC_SIZE, //bLength字段。端点描述符长度为7字节。
USB_ENDPOINT_DESCRIPTOR_TYPE, //bDescriptorType字段。端点描述符编号为0x05。
USB_ENDPOINT_OUT(2), //bEndpointAddress字段。端点的地址。我们使用D12的输入端点1。
USB_ENDPOINT_TYPE_BULK, //bmAttributes字段。D1~D0为端点传输类型选择。
WBVAL(0x0040), //wMaxPacketSize字段。该端点的最大包长。最大包长为64字节。
0x00, //bInterval字段。端点查询的时间,端点查询的时间,此处无意义。
};
/************************语言ID的定义********************/
const u8 DinkUsbLanguageId[DINK_USB_SIZ_STRING_LANGID]=
{
0x04, //本描述符的长度
0x03, //字符串描述符
//0x0409为美式英语的ID
0x09,
0x04
};
////////////////////////语言ID完毕//////////////////////////////////
//Unicode 字符串描述符
//邓小俊的usb鼠标
const u8 DinkUsbManufacturerStringDescriptor[DINK_USB_SIZ_STRING_VENDOR]=
{
32, //该描述符的长度为32字节
0x03, //字符串描述符的类型编码为0x03
0x44, 0x00, //D
0x49, 0x00, //I
0x4e, 0x00, //N
0x4b, 0x00, //K
0x5f, 0x00, //_
0x48, 0x00, //H
0x49, 0x00, //I
0x44, 0x00, //D
0x5f, 0x00, //_
0x44, 0x00, //D
0x45, 0x00, //E
0x56, 0x00, //V
0x49, 0x00, //I
0x43, 0x00, //C
0x45, 0x00 //E
};
/////////////////////////厂商字符串结束/////////////////////////////
//产品字符串描述符
const u8 DinkUsbProductStringDescriptor[DINK_USB_SIZ_STRING_PRODUCT]=
{
32, //该描述符的长度为32字节
0x03, //字符串描述符的类型编码为0x03
0x44, 0x00, //0x5A, 0x00, //D(0x44)==>Z
0x49, 0x00, //0x4D, 0x00, //I(0x49)==>M
0x4E, 0x00, //0x5A, 0x00, //N(0x4E)==>Z
0x4B, 0x00, //0x38, 0x00, //K(0x4B)==>8
0x5f, 0x00, //_
0x48, 0x00, //H
0x49, 0x00, //I
0x44, 0x00, //D
0x5f, 0x00, //_
0x44, 0x00, //D
0x45, 0x00, //E
0x56, 0x00, //V
0x49, 0x00, //I
0x43, 0x00, //C
0x45, 0x00 //E
};
////////////////////////产品字符串结束////////////////////////////
//字符串“2008-07-07”的Unicode编码
//8位小端格式
const u8 DinkUsbSerialNumberStringDescriptor[DINK_USB_SIZ_STRING_SERIAL]={
22, //该描述符的长度为22字节
0x03, //字符串描述符的类型编码为0x03
0x32, 0x00, //2
0x30, 0x00, //0
0x31, 0x00, //1
0x35, 0x00, //5
0x2d, 0x00, //-
0x30, 0x00, //0
0x33, 0x00, //3
0x2d, 0x00, //-
0x32, 0x00, //2
0x31, 0x00 //1
};
//////////////////////产品序列号字符串结束/////////////////////////
//产品序列号
u8 DinkUsbStringSerialUniqueId[DINK_USB_SIZ_STRING_SERIAL_UNIQUE_ID] =
{
DINK_USB_SIZ_STRING_SERIAL_UNIQUE_ID, //描述符长度
0x03 //描述符类型编码
/* Serial number该编码将会在程序运行的时候用芯片唯一unique id进行填充*/
};
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/