首先感谢网上的大神,我这篇文章也是白嫖的,如有侵权请联系,谢谢!
大神连接:参考
1、cubemx配置:
2、MDK程序添加
2.1、程序中已经有函数,只需添加数据即可
/** Usb HID report descriptor. */
__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{
/* USER CODE BEGIN 0 */
0x06, 0xFF, 0x00, /* USAGE_PAGE (Vendor Page: 0xFF00) */
0x09, 0x01, /* USAGE (Demo Kit) */
0xa1, 0x01, /* COLLECTION (Application) */
/* 6 */
// The Input report
0x09,0x03, // USAGE ID - Vendor defined
0x15,0x00, // LOGICAL_MINIMUM (0)
0x26,0x00, 0xFF, // LOGICAL_MAXIMUM (255)
0x75,0x08, // REPORT_SIZE (8)
0x95,64, // REPORT_COUNT :SendLength
0x81,0x02, // INPUT (Data,Var,Abs)
//19
// The Output report
0x09,0x04, // USAGE ID - Vendor defined
0x15,0x00, // LOGICAL_MINIMUM (0)
0x26,0x00,0xFF, // LOGICAL_MAXIMUM (255)
0x75,0x08, // REPORT_SIZE (8)
0x95,64, // REPORT_COUNT:ReceiveLength
0x91,0x02, // OUTPUT (Data,Var,Abs)
/* USER CODE END 0 */
0xC0 /* END_COLLECTION */
};
2.2、修改传输包大小。0x40为64个字节(最大)
3、数据发送:
需要添加外部申明:extern USBD_HandleTypeDef hUsbDeviceFS;
发送函数:USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, usbData.usb_txBuff,64);
4、接收数据:
4.1、STM32底层接收到数据后置位标志:usbData.usb_Event = ON; //user add
4.2、判断标志置位就获取数据;
/**
* @brief 接收从USB获取的数据
* @param data 数据存储首地址
* @param dataNum 准备读取的数据字节数
* @retval 读取的字节数
*/
uint32_t USB_GetData(uint8_t *data,uint32_t dataNum)
{
uint32_t len=0;
USBD_CUSTOM_HID_HandleTypeDef *hhid;
hhid = (USBD_CUSTOM_HID_HandleTypeDef*)hUsbDeviceFS.pClassData;//得到接收的地址
for(len=0;len<dataNum;len++){
*data=hhid->Report_buf[len];
data++;
}
return dataNum;
}
5、效果展示:
5.1、注意下载程序后需要拔掉usb线重连;
源码:https://gitee.com/My_Bulb/wl-open-projects/tree/master/STM32例程