打印
[STM32F1]

圈圈书上的例子在STM32上移植的问题

[复制链接]
1140|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我想把圈圈大哥书上的例子:带鼠标功能的USB键盘(方法二)
移植到STM32上。可是经过一番折腾,只成功了一半。
如图:

键盘好了,鼠标不成功。
附上源码,大神给看看,哪里有问题?谢谢!
KEYBOARD_MOUSE(TwoInterfaces).rar (1.52 MB)
沙发
IversonCar| | 2016-3-7 20:55 | 只看该作者
网上有现成的鼠标和键盘的复合的例子,你不妨下载下来对比试试

使用特权

评论回复
板凳
JY-DX-JY|  楼主 | 2016-3-8 08:46 | 只看该作者
不知道是不是方法二。

使用特权

评论回复
地板
JY-DX-JY|  楼主 | 2016-3-8 10:45 | 只看该作者
找到一个例子,反复对过了,还是不行。

使用特权

评论回复
5
JY-DX-JY|  楼主 | 2016-3-8 11:01 | 只看该作者
本帖最后由 JY-DX-JY 于 2016-3-8 11:05 编辑

我把我的代码贴出来,大伙看看,有什么问题?
void Joystick_Reset(void)
{
  /* Set Joystick_DEVICE as not configured */
  pInformation->Current_Configuration = 0;
  pInformation->Current_Interface = 0;/*the default Interface*/

  /* Current Feature initialization */
  pInformation->Current_Feature = Joystick_ConfigDescriptor[7];

  SetBTABLE(BTABLE_ADDRESS);

  /* Initialize Endpoint 0 */
  SetEPType(ENDP0, EP_CONTROL);
  SetEPTxStatus(ENDP0, EP_TX_STALL);
  SetEPRxAddr(ENDP0, ENDP0_RXADDR);
  SetEPTxAddr(ENDP0, ENDP0_TXADDR);
  Clear_Status_Out(ENDP0);
  SetEPRxCount(ENDP0, Device_Property.MaxPacketSize);
  SetEPRxValid(ENDP0);

  /* Initialize Endpoint 1 */
  SetEPType(ENDP1, EP_INTERRUPT);
  SetEPTxAddr(ENDP1, ENDP1_TXADDR);
  SetEPTxCount(ENDP1, 5);
  //SetEPRxStatus(ENDP1, EP_RX_DIS);
  SetEPTxStatus(ENDP1, EP_TX_NAK);
         /* Initialize Endpoint Out 1 */
  SetEPRxAddr(ENDP1, ENDP1_RXADDR); //设置接收数据的地址
  SetEPRxCount(ENDP1, 2);  //设置接收长度
  SetEPRxStatus(ENDP1, EP_RX_VALID); //设置端点有效,可以接收数据
        
        /* Initialize Endpoint 2 */
  SetEPType(ENDP2, EP_INTERRUPT);
        
  SetEPTxAddr(ENDP2, ENDP2_TXADDR);
  SetEPTxCount(ENDP2, 5);
  //SetEPRxStatus(ENDP1, EP_RX_DIS);
  SetEPTxStatus(ENDP2, EP_TX_NAK);
        
//拷贝用户数据到端点2的发送缓存区

  bDeviceState = ATTACHED;

  /* Set this device to response on default address */
  SetDeviceAddress(0);
}RESULT Joystick_Data_Setup(u8 RequestNo)
{
  u8 *(*CopyRoutine)(u16);

  CopyRoutine = NULL;
  if ((RequestNo == GET_DESCRIPTOR)
      && (Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT))
      && (pInformation->USBwIndex0 <2))
  {

    if (pInformation->USBwValue1 == REPORT_DESCRIPTOR)
    {
      if (pInformation->USBwIndex0 == 0)
                                CopyRoutine = Keyboard_GetReportDescriptor;
                        else
                                CopyRoutine = Mouse_GetReportDescriptor;
    }
    else if (pInformation->USBwValue1 == HID_DESCRIPTOR_TYPE)
    {
                        if (pInformation->USBwIndex0 == 0)
                                CopyRoutine = Joystick_GetHIDDescriptor;
                        else
                                CopyRoutine = Joystick_GetHIDDescriptor1;
    }

  } /* End of GET_DESCRIPTOR */

  /*** GET_PROTOCOL ***/
  else if ((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
           && RequestNo == GET_PROTOCOL)
  {
    CopyRoutine = Joystick_GetProtocolValue;
  }


  if (CopyRoutine == NULL)
  {
    return USB_UNSUPPORT;
  }

  pInformation->Ctrl_Info.CopyData = CopyRoutine;
  pInformation->Ctrl_Info.Usb_wOffset = 0;
  (*CopyRoutine)(0);
  return USB_SUCCESS;
}




使用特权

评论回复
6
JY-DX-JY|  楼主 | 2016-3-8 11:08 | 只看该作者
鼠标老是出不来,郁闷死了

使用特权

评论回复
7
JY-DX-JY|  楼主 | 2016-3-8 14:57 | 只看该作者
本帖最后由 JY-DX-JY 于 2016-3-8 14:59 编辑

枚举成功了,可是用bus_hound监视不对。

1.png (107.01 KB )

1.png

3.jpg (174.44 KB )

3.jpg

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:晴天响霹雳,平地一声雷。

245

主题

3351

帖子

30

粉丝