4676|8

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32USB问题???? [复制链接]

请问哪位大侠有使用STM32的USB?小弟有一个问题请问:
RESULT Joystick_Data_Setup(u8 RequestNo)
{
  u8 *(*CopyRoutine)(u16);

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

    if (pInformation->USBwValue1 == REPORT_DESCRIPTOR)
    {
      CopyRoutine = Joystick_GetReportDescriptor;
    }
    else if (pInformation->USBwValue1 == HID_DESCRIPTOR_TYPE)
    {
      CopyRoutine = Joystick_GetHIDDescriptor;
    }

  } /* 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;
}
在ST提供的代码里只有,GET_DESCRIPTOR 与GET_PROTOCOL 的处理,请问SET_REPORT与GET_REPORT怎么处理呢?
此帖出自stm32/stm8论坛

最新回复

                                 请对照看Joystick这个例子中的DEVICE_PROP Device_Property这个结构体的初始化(usb_prop.c),和DEVICE_PROP结构体的定义(usb_core.h)。   详情 回复 发表于 2009-7-9 22:15
点赞 关注
 

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

很简单,这个例子中没有处理SET_REPORT与GET_REPORT

从描述符看,不会有GET_REPORT请求,因为Input Report是通过Interrupt端点送出的。

对于简单的游戏手柄,通常不会有SET_REPORT,因为不需要有PC至设备的数据输出。

虽然例子中的HID描述符中有Output Report的描述,但程序中没有处理。估计写例子的人从哪里抄了一个HID描述符,没有删掉Output Report的描述,既然用不到也就没管它,结果保留了下来。
此帖出自stm32/stm8论坛
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

STM32 USB问题????

谢谢,那请问我要处理SET_REPORT的话,是不是在这个函数里增加:
/*** SET_REPORT ***/
else if ((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
           && RequestNo == SET_REPORT)
  {
    
  }
还有一个问题,这样的话我在哪里能得到报告的资料呢?
此帖出自stm32/stm8论坛
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

5
 

STM32 USB问题????

香主,你是不是链接错了贴子呀,

4楼: 我以前有一个很详细的帖子就是讲SET_REPORT的 

 
以HID的SET REPORT为例说明如何使用STM32的USB库支持控制端点0

这是一个SD卡方面的.再帮我找找那个贴子,小弟不胜感激呀!!!

此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 

链接已经更正

                                 其实我已经给出了足够的信息,如果你会使用版面的搜索功能,很容易就找到了:
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 

STM32 USB问题????

                                 非常感谢香主的快速回答,看来我以后要经常来支持一下香主呀!
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

8
 

有进展了!!!!


RESULT HID_Data_Setup(u8 RequestNo)
{
    u8 *(*CopyRoutine)(u16 length);
    CopyRoutine = NULL;
    if (pInformation->USBbmRequestType == CLASS_REQUEST|INTERFACE_RECIPIENT
            && RequestNo == SET_REPORT)
        CopyRoutine = My_Data_Request;

    if (CopyRoutine == NULL)
        return USB_UNSUPPORT;

    pInformation->Ctrl_Info.CopyData = CopyRoutine;
    pInformation->Ctrl_Info.Usb_wOffset = 0;
    pInformation->Usb_wLength = (*CopyRoutine)(0);

    return USB_SUCCESS;
} // End of HID_Data_Setup()

u8 My_Buffer[10];
u8 *My_Data_Request(u16 length)
{
    if (length == 0)
        return (u8*)10;    // 假定你的REPORT长度和Buffer长度为10

    return My_Buffer;
}


--------------------------------------------------------------------------------
上面介绍的CopyRoutine用于把多次传输的数据包合并到一个完整的缓冲区中,因此只有到STATUS阶段才能够指导一次SETUP传输是否结束,所以用户程序需要在回调函数Process_Status_IN中处理从SET_REPORT接收到的数据。因为所有的回调函数都是USB中断处理的一部分,所以更好的办法是在Process_Status_IN中设置一个标记,然后在用户主程序中判断这个标记并做处理。


--------------------------------------------------------------------------------
注意,STM32的USB库设计成以回调函数处理用户命令请求,包含类命令请求,是为了能够清晰地区分库程序和用户程序,使这两者不会混在一起,这样的好处是非常明显的,当USB库需要更新升级时,只需替换掉相应的程序模块,而不必修改用户已经完成的程序。


香主,上面的Process_Status_IN,在USB_PROC.C里是不是对应
/*******************************************************************************
* Function Name  : Joystick_Status_In.
* Description    : Joystick status IN routine.
* Input          : None.
* Output         : None.
* Return         : None.
*******************************************************************************/
void Joystick_Status_In(void)
{}

/*******************************************************************************
* Function Name  : Joystick_Status_Out
* Description    : Joystick status OUT routine.
* Input          : None.
* Output         : None.
* Return         : None.
*******************************************************************************/
void Joystick_Status_Out (void)
{}

两个函数?

香主,我很菜的,如果问题很简单的话请不要笑话我呀!
嘿嘿......
此帖出自stm32/stm8论坛
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

9
 

是的

                                 请对照看Joystick这个例子中的DEVICE_PROP Device_Property这个结构体的初始化(usb_prop.c),和DEVICE_PROP结构体的定义(usb_core.h)。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表