前面时钟啥的不管了,USB 48Mhz时钟
USB选择Device USB_FS 设置参数,34是配置HID作为电脑识别用的,必须是34 64是数据收发用的,HID最大一次64,可以自定义 这两个是电脑识别之后的硬件ID,不知道什么讲究,不用改
这样就可以生成了 最后是usbd_custom_hid_if.c文件里,这里就是上面的34,数组长度是34 这个数组只要修改对了,电脑就能识别出来,不然会带叹号,没数据
__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{
0x06, 0xFF, 0x00,
0x09, 0x01,
0xa1, 0x01,
0x09,0x03,
0x15,0x00,
0x26,0x00, 0xFF,
0x75,0x08,
0x95,64,
0x81,0x02,
0x09,0x04,
0x15,0x00,
0x26,0x00,0xFF,
0x75,0x08,
0x95,64,
0x91,0x02,
0xC0
};
描述符定义了usb传输数据的格式。
usbd_customhid.h文件中,更改收发数据长度和延时 因为这里自己就有宏定义判断,且不属于用户可更改的区域,因此直接在main.h修改
#define CUSTOM_HID_EPIN_SIZE 0x40
#define CUSTOM_HID_HS_BINTERVAL 0x01U
#define CUSTOM_HID_EPOUT_SIZE 0x40
设备管理器里 然后做个简单的数据发送
unsigned char usb_rx_data[64]={0};
unsigned char usb_tx_data[64]={0};
unsigned char usb_rx_flag=0;
while (1)
{
usb_tx_data[0]++;
usb_tx_data[63]++;
if(USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, usb_tx_data, 64) == USBD_OK)
{
PB_T(0);
}
}
打开Bus Hound 看一下数据 首先打开 Devices ,勾选,可以插拔一下看看是几号 勾选之后点Capture,点开RUN,数据就出来了 接收: 会调用usbd_custom_hid_if.c的回调函数 CUSTOM_HID_OutEvent_FS
static int8_t CUSTOM_HID_OutEvent_FS(uint8_t event_idx, uint8_t state)
{
extern unsigned char usb_rx_data[];
extern unsigned char usb_rx_flag;
USBD_CUSTOM_HID_HandleTypeDef *hhid;
hhid = (USBD_CUSTOM_HID_HandleTypeDef *)hUsbDeviceFS.pClassData;
strncpy(usb_rx_data,hhid->Report_buf,64);
usb_rx_flag = 1;
return (USBD_OK);
}
主函数添加
if(usb_rx_flag>0)
{
PB_T(0);
usb_rx_flag=0;
strncpy(usb_rx_data,usb_tx_data,64);
USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, usb_tx_data, 64);
}
选择 interrupt Out 写入数据长度 写入数据 点击Run Capture能看到数据
但是这里我只有第一次有数据,后面收不到了,不知道为啥
|