408 lines
10 KiB
C
Raw Permalink Normal View History

2021-07-28 13:15:22 +08:00
#include "main.h"
#include "delay.h"
//////////////////////////////////////////////////////////////////////////////////
/*************************************************************************/
//usbd_conf <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//STM32H7<48><37><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>-HAL<41><EFBFBD><E2BAAF><EFBFBD>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
/*************************************************************************/
//////////////////////////////////////////////////////////////////////////////////
PCD_HandleTypeDef hpcd;
//<2F><>ʾUSB<53><42><EFBFBD><EFBFBD>״̬
//0,û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
//1,<2C>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>;
vu8 bDeviceState=0; //Ĭ<><C4AC>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><>ʼ<EFBFBD><CABC>PCD MSP
//hpcd:PCD<43><EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><>
void HAL_PCD_MspInit(PCD_HandleTypeDef * hpcd)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_PeriphCLKInitTypeDef USBClkInit;
//USBʱ<42><CAB1><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>ʹ<EFBFBD><CAB9>HSI48MHz
USBClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB;
USBClkInit.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
HAL_RCCEx_PeriphCLKConfig(&USBClkInit);
if(hpcd->Instance == USB2_OTG_FS)
{
__HAL_RCC_GPIOA_CLK_ENABLE(); //ʹ<><CAB9>GPIOAʱ<41><CAB1>
//<2F><><EFBFBD><EFBFBD>PA11<31><31>PA12
GPIO_InitStruct.Pin=GPIO_PIN_11|GPIO_PIN_12;
GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull=GPIO_NOPULL;
GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF10_OTG1_FS;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
__HAL_RCC_USB2_OTG_FS_CLK_ENABLE(); //ʹ<><CAB9>OTG FSʱ<53><CAB1>
HAL_NVIC_SetPriority(OTG_FS_IRQn,1,0); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>
HAL_NVIC_EnableIRQ(OTG_FS_IRQn); //ʹ<><CAB9>OTG FS<46>ж<EFBFBD>
}
else if (hpcd->Instance == USB1_OTG_HS)
{
//USB1 OTG<54><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>õ<EFBFBD>,<2C>ʲ<EFBFBD><CAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
//USB OTG <20>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>USB<53>ж<EFBFBD>
void OTG_FS_IRQHandler(void)
{
HAL_PCD_IRQHandler(&hpcd);
}
///////////////////////USBD LL PCD<43><44><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>(PCD->USB Device Library)///////////////////////
//USBD<42><44><EFBFBD>ý׶λص<CEBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
//hpcd:PCD<43><EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><>
void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef * hpcd)
{
USBD_LL_SetupStage(hpcd->pData, (uint8_t *) hpcd->Setup);
}
//USBD OUT<55>׶λص<CEBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
//hpcd:PCD<43><EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><>
void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef * hpcd, uint8_t epnum)
{
USBD_LL_DataOutStage(hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff);
}
//USBD IN<49>׶λص<CEBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
//hpcd:PCD<43><EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><>
void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef * hpcd, uint8_t epnum)
{
USBD_LL_DataInStage(hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff);
}
//USBD SOF<4F>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
//hpcd:PCD<43><EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><>
void HAL_PCD_SOFCallback(PCD_HandleTypeDef * hpcd)
{
USBD_LL_SOF(hpcd->pData);
}
//USBD <20><>λ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
//hpcd:PCD<43><EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><>
void HAL_PCD_ResetCallback(PCD_HandleTypeDef * hpcd)
{
USBD_SpeedTypeDef speed = USBD_SPEED_FULL;
/* Set USB Current Speed */
switch (hpcd->Init.speed)
{
case PCD_SPEED_HIGH:
printf("USB Device Library [HS]\r\n");
speed = USBD_SPEED_HIGH;
break;
case PCD_SPEED_FULL:
printf("USB Device Library [FS]\r\n");
speed = USBD_SPEED_FULL;
break;
default:
printf("USB Device Library [FS?]\r\n");
speed = USBD_SPEED_FULL;
break;
}
USBD_LL_Reset(hpcd->pData); //<2F><>λ<EFBFBD>
USBD_LL_SetSpeed(hpcd->pData, speed);
}
//USBD <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
//hpcd:PCD<43><EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><>
void HAL_PCD_SuspendCallback(PCD_HandleTypeDef * hpcd)
{
bDeviceState=0;
printf("Device In suspend mode.\r\n");
USBD_LL_Suspend(hpcd->pData);
}
//USBD <20>ָ<EFBFBD><D6B8>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
//hpcd:PCD<43><EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><>
void HAL_PCD_ResumeCallback(PCD_HandleTypeDef * hpcd)
{
printf("Device Resumed\r\n");
USBD_LL_Resume(hpcd->pData);
}
//USBD ISO OUT<55><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɻص<C9BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
//hpcd:PCD<43><EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
//epnum:<3A>˵<EFBFBD><CBB5><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><>
void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef * hpcd, uint8_t epnum)
{
USBD_LL_IsoOUTIncomplete(hpcd->pData, epnum);
}
//USBD ISO IN<49><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɻص<C9BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
//hpcd:PCD<43><EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
//epnum:<3A>˵<EFBFBD><CBB5><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><>
void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef * hpcd, uint8_t epnum)
{
USBD_LL_IsoINIncomplete(hpcd->pData, epnum);
}
//USBD <20><><EFBFBD>ӳɹ<D3B3><C9B9>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
//hpcd:PCD<43><EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><>
void HAL_PCD_ConnectCallback(PCD_HandleTypeDef * hpcd)
{
bDeviceState=1;
USBD_LL_DevConnected(hpcd->pData);
}
//USBD <20>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ӻص<D3BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
//hpcd:PCD<43><EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><>
void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef * hpcd)
{
bDeviceState=0;
printf("USB Device Disconnected.\r\n");
USBD_LL_DevDisconnected(hpcd->pData);
}
/*******************************************************************************
LL Driver Interface (USB Device Library --> PCD)
*******************************************************************************/
/////////////////////USBD LL <20><><EFBFBD><EFBFBD><EFBFBD>ӿں<D3BF><DABA><EFBFBD>(USB Device Library --> PCD)/////////////////////
//USBD<42>ײ<EFBFBD><D7B2><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//pdev:USBD<42><44><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>
// 1,æ
// 2,ʧ<><CAA7>
USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef * pdev)
{
#ifdef USE_USB_FS //<2F><><EFBFBD><EFBFBD>USB FS,ִ<><D6B4>FS<46>ij<EFBFBD>ʼ<EFBFBD><CABC>
//<2F><><EFBFBD><EFBFBD>LL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>
hpcd.Instance = USB2_OTG_FS; //ʹ<><CAB9>USB2 OTG
hpcd.Init.dev_endpoints = 8; //<2F>˵<EFBFBD><CBB5><EFBFBD>Ϊ8
hpcd.Init.use_dedicated_ep1 = 0; //<2F><>ֹEP1 dedicated<65>ж<EFBFBD>
hpcd.Init.ep0_mps = 0x40; //<2F><><EFBFBD>ö˵<C3B6>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>СΪ0X40(64<36>ֽ<EFBFBD>)
hpcd.Init.low_power_enable = 0; //<2F><>ʹ<EFBFBD>ܵ͹<DCB5><CDB9><EFBFBD>ģʽ
hpcd.Init.phy_itface = PCD_PHY_EMBEDDED; //ʹ<><CAB9><EFBFBD>ڲ<EFBFBD>PHY
hpcd.Init.Sof_enable = 0; //ʹ<><CAB9>SOF<4F>ж<EFBFBD>
hpcd.Init.speed = PCD_SPEED_FULL; //USBȫ<42><C8AB>(12Mbps)
hpcd.Init.vbus_sensing_enable = 0; //<2F><>ʹ<EFBFBD><CAB9>VBUS<55><53><EFBFBD><EFBFBD>
hpcd.Init.lpm_enable = 0; //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
hpcd.pData = pdev; //hpcd<63><64>pDataָ<61><D6B8>pdev
pdev->pData = &hpcd; //pdev<65><76>pDataָ<61><D6B8>hpcd
HAL_PCD_Init(&hpcd); //<2F><>ʼ<EFBFBD><CABC>LL<4C><4C><EFBFBD><EFBFBD>
HAL_PCDEx_SetRxFiFo(&hpcd, 0x80); //<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>FIFO<46><4F>СΪ0X80(128<32>ֽ<EFBFBD>)
HAL_PCDEx_SetTxFiFo(&hpcd, 0, 0x40); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>FIFO 0<>Ĵ<EFBFBD>СΪ0X40(64<36>ֽ<EFBFBD>)
HAL_PCDEx_SetTxFiFo(&hpcd, 1, 0x80); //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>FIFO 1<>Ĵ<EFBFBD>СΪ0X80(128<32>ֽ<EFBFBD>)
#endif
#ifdef USE_USB_HS//<2F><><EFBFBD><EFBFBD>USB HS,ִ<><D6B4>HS<48>ij<EFBFBD>ʼ<EFBFBD><CABC>
/δʵ<EFBFBD><EFBFBD>
#endif
return USBD_OK;
}
//USBD<42>ײ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>(<28>ظ<EFBFBD>Ĭ<EFBFBD>ϸ<EFBFBD>λ״̬)<29><><EFBFBD><EFBFBD>
//pdev:USBD<42><44><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>
// 1,æ
// 2,ʧ<><CAA7>
USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef * pdev)
{
HAL_PCD_DeInit(pdev->pData);
return USBD_OK;
}
//USBD<42>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
//pdev:USBD<42><44><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>
// 1,æ
// 2,ʧ<><CAA7>
USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef * pdev)
{
HAL_PCD_Start(pdev->pData);
return USBD_OK;
}
//USBD<42>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
//pdev:USBD<42><44><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>
// 1,æ
// 2,ʧ<><CAA7>
USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef * pdev)
{
HAL_PCD_Stop(pdev->pData);
return USBD_OK;
}
//USBD<42><44>ʼ<EFBFBD><CABC>(<28><><EFBFBD><EFBFBD><><C4B3><EFBFBD>˵<EFBFBD>
//pdev:USBD<42><44><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//ep_addr:<3A>˵<EFBFBD><CBB5><EFBFBD>
//ep_mps:<3A>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28>ֽ<EFBFBD>)
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>
// 1,æ
// 2,ʧ<><CAA7>
USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef * pdev,
uint8_t ep_addr,
uint8_t ep_type, uint16_t ep_mps)
{
HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type);
return USBD_OK;
}
//USBDȡ<44><C8A1><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>(<28>ر<EFBFBD><><C4B3><EFBFBD>˵<EFBFBD>
//pdev:USBD<42><44><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//ep_addr:<3A>˵<EFBFBD><CBB5><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>
// 1,æ
// 2,ʧ<><CAA7>
USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef * pdev, uint8_t ep_addr)
{
HAL_PCD_EP_Close(pdev->pData, ep_addr);
return USBD_OK;
}
//USBD<42><44><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//pdev:USBD<42><44><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//ep_addr:<3A>˵<EFBFBD><CBB5><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>
// 1,æ
// 2,ʧ<><CAA7>
USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef * pdev, uint8_t ep_addr)
{
HAL_PCD_EP_Flush(pdev->pData, ep_addr);
return USBD_OK;
}
//USBD<42><44>ij<EFBFBD><C4B3><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ͣ״̬
//pdev:USBD<42><44><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//ep_addr:<3A>˵<EFBFBD><CBB5><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>
// 1,æ
// 2,ʧ<><CAA7>
USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef * pdev, uint8_t ep_addr)
{
HAL_PCD_EP_SetStall(pdev->pData, ep_addr);
return USBD_OK;
}
//USBDȡ<44><C8A1>ij<EFBFBD><C4B3><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>ͣ״̬
//pdev:USBD<42><44><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//ep_addr:<3A>˵<EFBFBD><CBB5><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>
// 1,æ
// 2,ʧ<><CAA7>
USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef * pdev,
uint8_t ep_addr)
{
HAL_PCD_EP_ClrStall(pdev->pData, ep_addr);
return USBD_OK;
}
//USBD<42><44><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ״̬
//pdev:USBD<42><44><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//ep_addr:<3A>˵<EFBFBD><CBB5><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>ͣ; 1,<2C><>ͣ.
uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef * pdev, uint8_t ep_addr)
{
PCD_HandleTypeDef *hpcd = pdev->pData;
if ((ep_addr & 0x80) == 0x80)
{
return hpcd->IN_ep[ep_addr & 0x7F].is_stall;
}
else
{
return hpcd->OUT_ep[ep_addr & 0x7F].is_stall;
}
}
//USBDΪ<44>豸ָ<E8B1B8><D6B8><EFBFBD>µ<EFBFBD>USB<53><42>ַ
//pdev:USBD<42><44><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//dev_addr:<3A>µ<EFBFBD><C2B5><EFBFBD><E8B1B8>ַ,USB1_OTG_HS/USB2_OTG_HS
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>
// 1,æ
// 2,ʧ<><CAA7>
USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef * pdev,
uint8_t dev_addr)
{
bDeviceState=1; //<2F><>ִ<EFBFBD>е<EFBFBD><D0B5>ú<EFBFBD><C3BA><EFBFBD><><CBB5>USB<53><42><EFBFBD>ӳɹ<D3B3><C9B9><EFBFBD>
HAL_PCD_SetAddress(pdev->pData, dev_addr);
return USBD_OK;
}
//USBDͨ<44><CDA8><EFBFBD>˵㷢<CBB5><E3B7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//pdev:USBD<42><44><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//ep_addr:<3A>˵<EFBFBD><CBB5><EFBFBD>
//pbuf:<3A><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַ
//size:Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݴ<EFBFBD>С
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>
// 1,æ
// 2,ʧ<><CAA7>
USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef * pdev,
uint8_t ep_addr,
uint8_t * pbuf, uint16_t size)
{
HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size);
return USBD_OK;
}
//USBD׼<44><D7BC>һ<EFBFBD><D2BB><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//pdev:USBD<42><44><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//ep_addr:<3A>˵<EFBFBD><CBB5><EFBFBD>
//pbuf:<3A><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַ
//size:Ҫ<><D2AA><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݴ<EFBFBD>С
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>
// 1,æ
// 2,ʧ<><CAA7>
USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef * pdev,
uint8_t ep_addr,
uint8_t * pbuf, uint16_t size)
{
HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size);
return USBD_OK;
}
//USBD<42><44>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>С
//pdev:USBD<42><44><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//ep_addr:<3A>˵<EFBFBD><CBB5><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:<3A><><EFBFBD><EFBFBD>С
uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef * pdev, uint8_t ep_addr)
{
return HAL_PCD_EP_GetRxCount(pdev->pData, ep_addr);
}
//USBD <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>(<28><>msΪ<73><CEAA>λ)
//Delay:<3A><>ʱ<EFBFBD><CAB1>ms<6D><73>.
void USBD_LL_Delay(uint32_t Delay)
{
delay_ms(Delay);
}