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

STM32的USB例程JoyStickMouse代码分析(12)

STM32的USB例程JoyStickMouse代码分析(12)

3JoyStick_Reset()函数的处理。

这里将一句句来分析:

void Joystick_Reset(void)

{


pInformation->Current_Configuration = 0;
//
当前配置为0


pInformation->Current_Interface = 0;/
当前接口为0


pInformation->Current_Feature = Joystick_ConfigDescriptor[7];



//
需要总线供电


SetBTABLE(BTABLE_ADDRESS);
//设置包缓冲区地址。


SetEPType(ENDP0, EP_CONTROL);
//
端点0为控制端点


SetEPTxStatus(ENDP0, EP_TX_STALL);
//
端点状态为发送无效,也就是主机IN令牌包来的时候,回送一个STALL



SetEPRxAddr(ENDP0, ENDP0_RXADDR); //
设置端点0描述符表,包括接收缓冲区地址、最大允许接收的字节数、发送缓冲区地址三个量。


SetEPTxAddr(ENDP0, ENDP0_TXADDR); //
这是发送缓冲区地址


Clear_Status_Out(ENDP0);
//
清除EP_KINDSTATUS_OUT位,如果改位被设置,在控制模式下只对0字节数据包相应。其它的都返回STALL。主要用于控制传输的状态过程。


SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); //
接收缓冲区支持64个字节。


SetEPRxValid(ENDP0);
//
使能端点0的接收,因为很快就要接收SETUP令牌包后面跟着的数据包了。


SetEPType(ENDP1, EP_INTERRUPT);
/
/端点1为中断端点


SetEPTxAddr(ENDP1, ENDP1_TXADDR); //
设置发送缓冲区地址


SetEPTxCount(ENDP1, 4);
//
每次发送四个字节


SetEPRxStatus(ENDP1, EP_RX_DIS);
//
接收禁止,只发送Mouse信息,而不从主机接收。


SetEPTxStatus(ENDP1, EP_TX_NAK); /
/现在发送端点还不允许发送数据。


bDeviceState = ATTACHED;
//
连接状态改为已经连接,默认地址状态。


SetDeviceAddress(0); //
地址默认为0.

}

复位中断执行完成后,开发板的USB接口能够以默认地址对主机来的数据包进行响应了。这个阶段的分析到此结束,下一个阶段就是正式分析代码实现的枚举过程了。

继承事业,薪火相传
返回列表