本帖最后由 jery99 于 2017-6-27 12:56 编辑
大家好。我的103 代码是从 f072上移植过来的。现在出现 一帧数据 一帧空包的情况,发数据的时候。请问有人知道原因吗。我上传一个demo 大家帮我分析下 ,一起学习交流
部分配置:
1. 中断
void USB_HP_CAN1_TX_IRQHandler(void)
{
HAL_PCD_IRQHandler(&hpcd);
}
void USB_LP_CAN1_RX0_IRQHandler(void)
{
HAL_PCD_IRQHandler(&hpcd);
}
2. USB 端点配置 pmabuffer
USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev)
{
/* Set LL Driver parameters */
hpcd.Instance = USB;
hpcd.Init.dev_endpoints = 3;
hpcd.Init.ep0_mps = 0x40;
hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
hpcd.Init.speed = PCD_SPEED_FULL;
hpcd.Init.low_power_enable = 0;
/* Link The driver to the stack */
hpcd.pData = pdev;
pdev->pData = &hpcd;
/* Initialize LL Driver */
HAL_PCD_Init(&hpcd);
HAL_PCDEx_PMAConfig(pdev->pData , 0x00 , PCD_SNG_BUF, 0x18);
HAL_PCDEx_PMAConfig(pdev->pData , 0x80 , PCD_SNG_BUF, 0x58);
HAL_PCDEx_PMAConfig(pdev->pData , 0x81 , PCD_DBL_BUF, 0x009800d8); // 这里是双缓冲
return USBD_OK;
}
端点描述符配置
/* Endpoint 1 - Standard Descriptor */
USBD_AUDIO_CfgDesc[index++] = AUDIO_STANDARD_ENDPOINT_DESC_SIZE; /* bLength */
USBD_AUDIO_CfgDesc[index++] = 0x05; /* bDescriptorType */
USBD_AUDIO_CfgDesc[index++] = AUDIO_IN_EP; /* bEndpointAddress 1 in endpoint*/
USBD_AUDIO_CfgDesc[index++] = 0x05; /* bmAttributes */
USBD_AUDIO_CfgDesc[index++] = ((samplingFrequency/1000+2)*Channels*2)&0xFF; /* wMaxPacketSize */
USBD_AUDIO_CfgDesc[index++] = ((samplingFrequency/1000+2)*Channels*2)>>8;
USBD_AUDIO_CfgDesc[index++] = 0x01; /* bInterval */
USBD_AUDIO_CfgDesc[index++] = 0x00; /* bRefresh */
USBD_AUDIO_CfgDesc[index++] = 0x00; /* bSynchAddress */
出现丢包现象。 附件是图片 抓包出来的
源码我也上传了
一周热门 更多>