stm32usb程序求助

williams   2010-8-16 10:11 楼主
各位高手,最近在研究stm32的usb程序,virtual com port 的DEMO程序usb_endp.c中有一段程序
void SOF_Callback(void)
{
  static uint32_t FrameCount = 0;
  
  if(bDeviceState == CONFIGURED)
  {
    if (FrameCount++ == VCOMPORT_IN_FRAME_INTERVAL)
    {
      /* Reset the frame counter */
      FrameCount = 0;
      
      /* Check the data to be sent through IN pipe */
      Handle_USBAsynchXfer();
    }
  }  
}
一直不太明白是做什么用的 ,请高手帮小弟解释一下,不胜感激

回复评论 (5)

SOF是帧首,对于全速设备来说,每1毫秒有1个帧首信号,因此,每1毫秒会调用1次这个帧首中断回调函数。

在这里,这个中断用做定时,每1毫秒×VCOMPORT_IN_FRAME_INTERVAL的间隔时间,判断下是否有从USART收到的数据要通过USB发到主机。
点赞  2010-8-16 10:23


哦,原来如此,usb协议里说的帧是这么用的,呵呵!不好意思再问一下EP1_IN_Callback,EP3_OUT_Callback这两个回调函数是怎么进去的,我怎么没找到程序中获得端点号的地方!!!
点赞  2010-8-16 10:36
2# vigia  

哦,原来如此,usb协议里说的帧是这么用的,呵呵!不好意思再问一下EP1_IN_Callback,EP3_OUT_Callback这两个回调函数是怎么进去的,我怎么没找到程序中获得端点号的地方!!! ...
USB_LP_CAN1_RX0_IRQHandler(USB中断) -> USB_Istr(中断处理函数) -> CTR_LP(CTR正确的传输中断):
根据IN/OUT的方向分别调用:
(*pEpInt_OUT[EPindex-1])();

(*pEpInt_IN[EPindex-1])();
EPindex-1指示端点号。
点赞  2010-8-16 10:53
中断中调用的两个回调函数数组定义:
void (*pEpInt_IN[7])(void) =
  {
    EP1_IN_Callback,
    EP2_IN_Callback,
    EP3_IN_Callback,
    EP4_IN_Callback,
    EP5_IN_Callback,
    EP6_IN_Callback,
    EP7_IN_Callback,
  };

void (*pEpInt_OUT[7])(void) =
  {
    EP1_OUT_Callback,
    EP2_OUT_Callback,
    EP3_OUT_Callback,
    EP4_OUT_Callback,
    EP5_OUT_Callback,
    EP6_OUT_Callback,
    EP7_OUT_Callback,
  };
点赞  2010-8-16 10:54


经你这么一指点,我明白了不少,真是太感谢你了!
点赞  2010-8-16 11:09
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复