前言
1.雅特力AT32F403A例程之-USB之HID双向通信,实现了USB的HID双向通信。
一、官方提供BSP存在的问题
说明:官方提供HID功能只实现了IN也就是发送数据到PC上,OUT也就是接收无法实现。经过多次测试,结果发现只有下面的例程可以实现。
AT32F403A\BSP\AT32F403A_407_Firmware_Library_V2.0.7\utilities、at32f403a_407_usb_iap_demo
二、USB之HID双向通信实现
1.初始化USB
代码如下(示例):
void USB_Class_Init(void)
{
/* select usb 48m clcok source */
usb_clock48m_select(USB_CLK_HEXT);
/* enable usb clock */
crm_periph_clock_enable(CRM_USB_PERIPH_CLOCK, TRUE);
/* enable usb interrupt */
nvic_irq_enable(USBFS_L_CAN1_RX0_IRQn, 0, 0);
/* usb core init */
usbd_core_init(&usb_core_dev, USB, &hid_iap_class_handler, &hid_iap_desc_handler, 0);
/* enable usb pull-up */
usbd_connect(&usb_core_dev);
}
2.IN回调函数数据发送
代码如下(示例):
static usb_sts_type class_in_handler(void *udev, uint8_t ept_num)
{
usb_sts_type status = USB_OK;
/* ...user code...
trans next packet data
*/
usbd_hid_iap_in_complete(udev);
//printf("class_in_handler\r\n");
return status;
}
3.OUT回调函数数据接收
这个数据接收回传函数在官方BSP包中的HID例程有问题,无法进入回调函数。
代码如下(示例):
static usb_sts_type class_out_handler(void *udev, uint8_t ept_num)
{
usb_sts_type status = USB_OK;
usbd_core_type *pudev = (usbd_core_type *)udev;
iap_info_type *piap = (iap_info_type *)pudev->class_handler->pdata;
/* get endpoint receive data length */
uint32_t recv_len = usbd_get_recv_len(pudev, ept_num);
//printf("class_out_handle/rrecv_len=%x\r\n",recv_len);
/* hid iap process */
usbd_hid_iap_process(udev, piap->g_rxhid_buff, recv_len);
USB_Receive_Flag =1;
/* start receive next packet */
usbd_ept_recv(pudev, USBD_HIDIAP_OUT_EPT, piap->g_rxhid_buff, USBD_HIDIAP_OUT_MAXPACKET_SIZE);
return status;
}
4.接收数据处理函数
接收数据处理函数在OUT回调函数中调用。
代码如下(示例):
void usbd_hid_iap_process(void *udev, uint8_t *pdata, uint16_t len)
{
uint8_t i;
for(i=0;i<64;i++)
{
USB_Receive_Buffer[i] = pdata[i];
}
}
5.读写数据
USB_Receive_Flag 标志位在OUT数据接收回调函数中标志。
代码如下(示例):
void USB_TxRx(void)
{
uint8_t i;
if(USB_Receive_Flag ==1)
{
USB_Receive_Flag =0;
for(i=0;i<64;i++)
{
printf(" %x",USB_Receive_Buffer[i]);
report_buf[i] = USB_Receive_Buffer[i];
}
printf(" aa\r\n");
usb_iap_class_send_report(&usb_core_dev, report_buf, USBD_HIDIAP_IN_MAXPACKET_SIZE);
}
}
该处使用的url网络请求的数据。
软件下载
1.雅特力AT32F403A例程之-USB之HID双向通信
https://download.csdn.net/download/suqingxiao/85812981