首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

STM32——USB详细使用说明(4)

STM32——USB详细使用说明(4)

usb_prop.c文件里面,实现对端点的设置。
void Joystick_Reset(void)
{

pInformation->Current_Configuration =0;
   pInformation->Current_Interface =0;                                 

  

  pInformation->Current_Feature =Joystick_ConfigDescriptor[7];       //供电模式选择

#ifdefSTM32F10X_CL  
  

  OTG_DEV_EP_Init(EP1_IN, OTG_DEV_EP_TYPE_INT, 4);
#else

SetBTABLE(BTABLE_ADDRESS);                 //分组缓冲区描述表地址设置

  SetEPType(ENDP0,EP_CONTROL);              //初始化为控制端点类型
  SetEPTxStatus(ENDP0,EP_TX_STALL);       //端点以STALL分组响应所有的发送请求。

//也就是端点状态设置成发送无效,也就是主机的IN令牌包来的时候,回送一个STALL。   
  SetEPRxAddr(ENDP0,ENDP0_RXADDR);         
//设置端点0描述符的接受地址,
  SetEPTxAddr(ENDP0,ENDP0_TXADDR);          //设置端点0描述符的发送地址
Clear_Status_Out(ENDP0);                     
  //仅用于控制端点 如果STATUS_OUT位被清除,OUT分组可以包含任意长度的数据
  SetEPRxCount(ENDP0,Device_Property.MaxPacketSize);

  //设置端点0的接受字节寄存器的最大值是64
  SetEPRxValid(ENDP0);                                //设置接受端点有效


  SetEPType(ENDP1,EP_INTERRUPT);                     //初始化为中断端点类型
  SetEPTxAddr(ENDP1,ENDP1_TXADDR);                  
//设置发送数据的地址
  SetEPTxCount(ENDP1,4);                             
//设置发送的长度
  SetEPRxStatus(ENDP1,EP_RX_DIS);                    
//设置接受端点关闭
  SetEPTxStatus(ENDP1,EP_TX_NAK);                    //设置发送端点端点非应答


SetDeviceAddress(0);                                //设置设备用缺省地址相应
#endif

  bDeviceState =ATTACHED;                         //当前状态连接
}

usb_sil.c的文件里面,主要是使能了如下这些中断
CNTR_CTRM  正确传输(CTR)中断使能   CNTR_WKUPM唤醒中断使能
CNTR_SUSPM 挂起(SUSP)中断使能     CNTR_ERRM  出错中断使能
CNTR_SOFM  帧首中断使能           CNTR_ESOFM 期望帧首中断使能CNTR_RESETM设置此位将向PC主机发送唤醒请求。根据USB协议,如果此位在1ms到15ms内保持有效,主机将对USB模块实行唤醒操作。

uint32_t USB_SIL_Init(void)
{
#ifndef STM32F10X_CL


  _SetISTR(0);                             
//清除中断标志
  wInterrupt_Mask = IMR_MSK;

//这组寄存器用于定义USB模块的工作模式,中断的处理,设备的地址和读取当前帧的编号
_SetCNTR(wInterrupt_Mask);             //设置相应的控制寄存器
#else

  OTG_DEV_Init();
#endif

  return 0;
}

***************(3)**************
1.获取设备描述符

usb_int.c的文件里面
低优先级中断  在控制中断  批量传输下使用(在单缓冲模式下使用)
当一次正确的OUT,SETUP,IN数据传输完成后,硬件会自动设置此位为NAK状态,使应用程序有足够的时间处理完当前传输的数据后,响应下一个数据分组
继承事业,薪火相传
返回列表