1.初始化USB,打开USB中断
ald_pmu_perh_power_config(PMU_POWER_USB, ENABLE);
ald_cmu_perh_clock_config(CMU_PERH_USB, ENABLE);
ald_cmu_perh_clock_config(CMU_PERH_GPIO, ENABLE);
ald_cmu_usb_clock_config(CMU_USB_CLOCK_SEL_HOSC, CMU_USB_DIV_1);
ald_rmu_reset_periperal(RMU_PERH_USB);
ald_mcu_irq_config(USB_INT_IRQn, 2, 2, ENABLE);
ald_mcu_irq_config(USB_DMA_IRQn, 2, 2, ENABLE);
usb_pin_init();
ald_usb_high_speed_enable(false);
ald_usb_otg_session_request(true);
usbd_hid_user_init(0, &hid_user_device);
2.发送数据
usbd_hid_user_report_send(&hid_user_device, (uint8_t*)SendRxBuf, 64);
3.接收数据(在USB中断中)
uint32_t hid_user_handle(void *data, uint32_t event, uint32_t value, void *p_data)
{
int i =0;
switch (event)
{
case USB_EVENT_CONNECTED:
printf_e("\rConnect!\n\r");
_hid_user_flag = STATE_DEVICE_CONN;
break;
case USB_EVENT_DISCONNECTED:
printf_e("\rDisconnect!\n\r");
break;
case USB_EVENT_RX_AVAILABLE:
printf_e("\rUSB_EVENT_RX_AVAILABLE !\n\r");
usbd_hid_user_report_recv(&hid_user_device, rx_buf, 64);
for(i =0;i<64;i++)
printf_e("\r rx_buf[%d] = 0x%x \n\r",i,rx_buf[i]);
break;
case USB_EVENT_ERROR:
printf_e("\rUSB_EVENT_ERROR!\n\r");
break;
case USB_EVENT_TX_COMPLETE:
printf_e("\rUSB_EVENT_TX_COMPLETE!\n\r");
break;
case USB_EVENT_SUSPEND:
printf_e("\rSuspend!\n\r");
_hid_user_flag = STATE_DEVICE_NO;
break;
case USB_EVENT_RESUME:
break;
default:
break;
}
return 0;
}