本文介绍了STM32Cube USB设备库运用中常见的几个问题及解决方法。
1、怎么动态地修正设备描述符或字符串描述符?
在文件usbd_desc.c里,与设备和字符串相关的描述符能够经过GetDescriptor的回调函数进行动态调整。
2、怎么让大容量存储类驱动支撑多个逻辑盘【LUN】?
在文件usbd_msc_storage_xxx.c中修正STORAGE_LUN_NBR。【xxx代表运用的存储介质】
STORAGE_Inquirydata数组里包含了每个LUN的规范查询数据【inquiry data】。
比方用到2个LUN。
constint8_t STORAGE_Inquirydata[] = {
/*LUN 0 */
0x00,
0x80,
0x02,
0x02,
(USBD_STD_INQUIRY_LENGTH- 5),
0x00,
0x00,
0x00,
‘S’,’T’, ‘M’, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, /* Manufacturer:
8bytes */
‘m’,’i’, ‘c’, ‘r’, ‘o’, ‘S’, ‘D’, ‘ ‘, /* Product:
16Bytes */
‘F’,’l’, ‘a’, ‘s’, ‘h’, ‘ ‘, ‘ ‘, ‘ ‘,
‘1’,’.’, ‘0’ ,’0′, /* Version: 4 Bytes */
/*LUN 1 */
0x00,
0x80,
0x02,
0x02,
(USBD_STD_INQUIRY_LENGTH- 5),
0x00,
0x00,
0x00,
‘S’,’T’, ‘M’, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, /* Manufacturer:8 bytes */
‘N’,’a’, ‘n’, ‘d’, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, /* Product:16 Bytes */
‘F’,’l’, ‘a’, ‘s’, ‘h’, ‘ ‘, ‘ ‘, ‘ ‘,
‘1’,’.’, ‘0’ ,’0′, /* Version: 4 Bytes */
};
3、端点的地址在哪里界说?
端点地址一般在各个类驱动的头文件里界说。
比方MSC类的端点界说就在 usbd_msc.h界说如下:
#define MSC_EPIN_ADDR 0x81 //For Endpoint 1 IN
#defineMSC_EPOUT_ADDR 0x01 // For Endpoint 1 OUT
4、USB设备库是否能够恣意运行在FULL SPEED或HIGH SPEED形式?
是的,该库支撑USB OTG FS和USBOTG HS形式。其间,USB OTG FS内核仅支撑FS形式,USB OTG HS内核既支撑FS形式也支撑HS形式。
用户经过如下宏挑选适宜的USB核:
USE_USB_HS// USB High Speed (HS) Core
USE_USB_FS// USB Full Speed (FS) Core
USE_USB_HSand USE_USB_HS_IN_FS // USBHigh Speed (HS) Core in FS mode
5、怎么在USB设备类驱动里边修正或添加端点?
a.运用USBD_LL_OpenEP()进行端点的初始化。
b.在usb_conf.c里为新界说的端点装备发送或接纳FIFO。
以STM32F2、STM32F4等支撑OTG功用的MCU为例。
用到HAL_PCD_SetRxFiFo()和HAL_PCD_SetTxFiFo()装备TX/RX的FIFO。
留意装备TX和RX FIFO的大小时不得超越对应的USB核所具有的悉数FIFO.
USBOTG FS core的FIFO 为320 x 32 bits(1.25 Kbytes)
USBOTG HS core的FIFO 为1024 x 32bits (4 Kbytes)
关于仅支撑FS核的STM32F0,STM32L0, STM32F1 and STM32F3系列,
运用HAL_PCD_PMA_Config() 进行PMA的装备。
6. USB设备库与实时操作系统兼容吗?
是的,该USB 设备库能够合作RTOS运用。其间CMSIS RTOS的封装器完成对OS内核的笼统。
- STM32单片机中文官网
- STM32单片机官方开发工具
- STM32单片机参阅规划