1.雅特力AT32F403A例程之-USB之HID双向通信

1.雅特力AT32F403A例程之-USB之HID双向通信


前言

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

suqingxiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值