对比了两个系列里Middlewares\ST\STM32_USB_Device_Library\Class路径下实现的代码差异,哪个系列写的更全面?像MSC的USBD_MSC_Setup函数 USB_REQ_CLEAR_FEATURE请求里 F4实现的比较简单
- case USB_REQ_CLEAR_FEATURE:
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- if (req->wValue == USB_FEATURE_EP_HALT)
- {
- /* Flush the FIFO */
- (void)USBD_LL_FlushEP(pdev, (uint8_t)req->wIndex);
- /* Handle BOT error */
- MSC_BOT_CplClrFeature(pdev, (uint8_t)req->wIndex);
- }
- }
- break;
复制代码
F3实现的比较复杂
- case USB_REQ_CLEAR_FEATURE:
- /* Flush the FIFO and Clear the stall status */
- USBD_LL_FlushEP(pdev, (uint8_t)req->wIndex);
- /* Reactivate the EP */
- USBD_LL_CloseEP(pdev, (uint8_t)req->wIndex);
- if ((((uint8_t)req->wIndex) & 0x80U) == 0x80U)
- {
- pdev->ep_in[(uint8_t)req->wIndex & 0xFU].is_used = 0U;
- if (pdev->dev_speed == USBD_SPEED_HIGH)
- {
- /* Open EP IN */
- USBD_LL_OpenEP(pdev, MSC_EPIN_ADDR, USBD_EP_TYPE_BULK,
- MSC_MAX_HS_PACKET);
- }
- else
- {
- /* Open EP IN */
- USBD_LL_OpenEP(pdev, MSC_EPIN_ADDR, USBD_EP_TYPE_BULK,
- MSC_MAX_FS_PACKET);
- }
- pdev->ep_in[MSC_EPIN_ADDR & 0xFU].is_used = 1U;
- }
- else
- {
- pdev->ep_out[(uint8_t)req->wIndex & 0xFU].is_used = 0U;
- if (pdev->dev_speed == USBD_SPEED_HIGH)
- {
- /* Open EP OUT */
- USBD_LL_OpenEP(pdev, MSC_EPOUT_ADDR, USBD_EP_TYPE_BULK,
- MSC_MAX_HS_PACKET);
- }
- else
- {
- /* Open EP OUT */
- USBD_LL_OpenEP(pdev, MSC_EPOUT_ADDR, USBD_EP_TYPE_BULK,
- MSC_MAX_FS_PACKET);
- }
- pdev->ep_out[MSC_EPOUT_ADDR & 0xFU].is_used = 1U;
- }
- /* Handle BOT error */
- MSC_BOT_CplClrFeature(pdev, (uint8_t)req->wIndex);
- break;
复制代码
另外还有MSC_BOT_Abort函数 F4实现的是:
- static void MSC_BOT_Abort(USBD_HandleTypeDef *pdev)
- {
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
- if ((hmsc->cbw.bmFlags == 0U) &&
- (hmsc->cbw.dDataLength != 0U) &&
- (hmsc->bot_status == USBD_BOT_STATUS_NORMAL))
- {
- (void)USBD_LL_StallEP(pdev, MSC_EPOUT_ADDR);
- }
- (void)USBD_LL_StallEP(pdev, MSC_EPIN_ADDR);
- if (hmsc->bot_status == USBD_BOT_STATUS_ERROR)
- {
- (void)USBD_LL_StallEP(pdev, MSC_EPIN_ADDR);
- (void)USBD_LL_StallEP(pdev, MSC_EPOUT_ADDR);
- }
- }
复制代码
F3实现的是
- static void MSC_BOT_Abort(USBD_HandleTypeDef *pdev)
- {
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
- if ((hmsc->cbw.bmFlags == 0U) &&
- (hmsc->cbw.dDataLength != 0U) &&
- (hmsc->bot_status == USBD_BOT_STATUS_NORMAL))
- {
- USBD_LL_StallEP(pdev, MSC_EPOUT_ADDR);
- }
- USBD_LL_StallEP(pdev, MSC_EPIN_ADDR);
- if (hmsc->bot_status == USBD_BOT_STATUS_ERROR)
- {
- USBD_LL_PrepareReceive(pdev, MSC_EPOUT_ADDR, (uint8_t *)(void *)&hmsc->cbw,
- USBD_BOT_CBW_LENGTH);
- }
- }
复制代码
还有其他的函数就不一一举例了,不明白为什么写的不一样? |