打印

stm32usb程序求助

[复制链接]
4523|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
haibianfeng|  楼主 | 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();
    }
  }  
}
一直不太明白是做什么用的 ,请高手帮小弟解释一下,不胜感激
沙发
vigia| | 2010-8-16 10:23 | 只看该作者
SOF是帧首,对于全速设备来说,每1毫秒有1个帧首信号,因此,每1毫秒会调用1次这个帧首中断回调函数。

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

使用特权

评论回复
板凳
haibianfeng|  楼主 | 2010-8-16 10:36 | 只看该作者
2# vigia

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

使用特权

评论回复
地板
vigia| | 2010-8-16 10:53 | 只看该作者
2# vigia  

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



USB_LP_CAN1_RX0_IRQHandler(USB中断) -> USB_Istr(中断处理函数) -> CTR_LP(CTR正确的传输中断):
根据IN/OUT的方向分别调用:
(*pEpInt_OUT[EPindex-1])();

(*pEpInt_IN[EPindex-1])();
EPindex-1指示端点号。

使用特权

评论回复
5
vigia| | 2010-8-16 10:54 | 只看该作者
中断中调用的两个回调函数数组定义:
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,
  };

使用特权

评论回复
6
haibianfeng|  楼主 | 2010-8-16 11:09 | 只看该作者
4# vigia

经你这么一指点,我明白了不少,真是太感谢你了!:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

39

帖子

1

粉丝