迅维网

查看: 1043|回复: 0
打印 上一主题 下一主题

stm32f103 usb库函数的一点见解

[复制链接]
跳转到指定楼层
1#
发表于 2016-2-22 20:06:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: 山东青岛 来自 山东青岛

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x
在stm32f103 usbcdc库函数中有这样一段代码:
void SOF_Callback(void)
{
       static uint32_t FrameCount = 0;
        if(bDeviceState == CONFIGURED)
       {
              if (FrameCount++ == VCOMPORT_IN_FRAME_INTERVAL)
              {

                  FrameCount = 0;

                    EP1_IN_Callback();
                   //Handle_USBAsynchXfer();
               }
       }
}
SOF,其实是START OFFRAME的简写,就是帧首的意思,全速设备,主机5ms会发送一次,当然这个5ms并不是固定的,与你的描述符有关:例如,我的描述符定义如下:
const uint8_t Virtual_Com_Port_ConfigDescriptor[] =
{
0x09,
USB_CONFIGURATION_DESCRIPTOR_TYPE,
VIRTUAL_COM_PORT_SIZ_CONFIG_DESC,
0x00,
0x02,
0x01,
0x00,
0xC0,
0x32,
0x09,
USB_INTERFACE_DESCRIPTOR_TYPE,
0x00,
0x00,
0x01,
0x02,
0x02,
0x01,
0x00,
0x05,
0x24,
0x00,
0x10,
0x01,
0x05,
0x24,
0x01,
0x00,
0x01,
0x04,
0x24,
0x02,
0x02,
0x05,
0x24,
0x06,
0x00,
0x01,
0x07,
USB_ENDPOINT_DESCRIPTOR_TYPE,
0x82,
0x03,
VIRTUAL_COM_PORT_INT_SIZE,
0x00,
0xFF,
0x09,
USB_INTERFACE_DESCRIPTOR_TYPE,
0x01,
0x00,
0x02,
0x0A,
0x00,
0x00,
0x00,
0x07,
USB_ENDPOINT_DESCRIPTOR_TYPE,
0x03,
0x02,
VIRTUAL_COM_PORT_DATA_SIZE,
0x00,
0x00,
0x07,
USB_ENDPOINT_DESCRIPTOR_TYPE,
0x81,
0x02,
VIRTUAL_COM_PORT_DATA_SIZE,
0x00,
0x00
};
就是配置描述符里红色字体部分,这个确定了主机每次发送SOF帧的间隔时间,所以我们在使用usb往主机上推送数据时,可以直接调用这个函数:
EP1_IN_Callback();在EP1_IN_Callback()函数里写入响应的代码,另外一种就是调用
下面这个函数直接发送
void usb_SendBuf(uint8_t *_pTxBuf, uint8_t _ucLen)
{
     UserToPMABufferCopy(_pTxBuf, ENDP1_TXADDR, _ucLen);
     SetEPTxCount(ENDP1, _ucLen);
      SetEPTxValid(ENDP1);
}

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图


芯片搜索

快速回复