最近工作需求,要做个usb射频接收器,不太想用串口,每次还要选择串口号,有些电脑还需要装驱动,想来想去就不如用USB HID设备进行通讯。github里的不是纯净的Custom HID代码,还加载一些项目代码,比如串口、数据转化之类的。不过下面也会说一下怎么配置。
https://github.com/HaHaHaHaHaGe/custom_usbdongle
因为我的芯片是STM32F042F6P6所以需要勾选图中的按钮才可以使用USB功能,否则下面USB按钮是灰色的无法开启
USB这里保持默认就好
/** 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 */
};
修改传输包大小。0x40为64个字节(最大)
可以修改时间轮询间隔
extern USBD_HandleTypeDef hUsbDeviceFS;
USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, USB_Send,64);
直接调用这个函数就可以
接收需要在上图中使用一个变量标志着是否收到了数据,再使用下面的代码进行读取(记得清空标志)
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;
}
配合https://blog.csdn.net/weixin_41738734/article/details/103596404的上位机可以读写HID设备