原创 USB心情日记01-迷途中的方向

2013-9-12 00:28 806 4 5 分类: MCU/ 嵌入式

最近的工作进展非常不顺利,美标的离心式榨汁机真心不好做,还要做慢加载,Delay了好多天了。

加班回来,目睹STM32那令人相当凌乱的USB库,有种想哭的感觉。前些天跟踪代码在里面跳来跳去,令人头昏眼花。

最后我下定决心,我决定简化库中那些太过复杂的调用,保留主干部分,得到一些简化的函数,以方便理清脉络。

首先来的第一个函数是main()中第一个函数Set_System(),我将其真正重要的主干部分保留,得到Set_System _Mod(),得到的函数如下:

void Set_System_Mod(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
 
  /* 使能控制上拉电阻管脚的GPIO时钟 */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_DISCONNECT, ENABLE);

  /* 配置控制上拉电阻管脚为开漏输出 */
  GPIO_InitStructure.GPIO_Pin = USB_DISCONNECT_PIN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  GPIO_Init(USB_DISCONNECT, &GPIO_InitStructure);
 
  /* 配置EXTI18号线连接到USB IP,通过该线唤醒休眠中的USB */
  EXTI_ClearITPendingBit(EXTI_Line18);
  EXTI_InitStructure.EXTI_Line = EXTI_Line18;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
}
该函数的作用是初始化控制上拉电阻的管脚,配置EXTI18号线连接到USB IP核(必须配置该EXTI18,不然是无法枚举成功的,这是为什么?应该在于USB设备的唤醒功能。USB唤醒中断在中断向量表中的位置是42。这个中断是在USB设备从暂停模式唤醒时产生,唤醒事件由USB_ISTR寄存器的WKUP位标识。),在这个函数中去掉了PWR,GPIO配置成AIN,和Joystick按键初始化等函数。

现在将该函数代替main()中的Set_System()函数后,我们就可以成功枚举USB设备了。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户403664 2013-9-12 11:33

加油啦
相关推荐阅读
用户387277 2013-08-30 00:54
USB心情日记-发现USB鼠标
2013.8.29 晴 天气炎热,离开研发岗位已1年矣。苦觅出路,重回研发! 要STM32和PC进行USB通讯,首先要让PC认出STM32是个USB设备,而且还是个FS设备。所以我们必须在...
我要评论
1
4
关闭 站长推荐上一条 /3 下一条