17#include "stm32wbxx_ll_crs.h"
18#include "stm32wbxx_ll_rcc.h"
19#include "stm32wbxx_ll_hsem.h"
20#include "stm32wbxx_ll_bus.h"
28 while (LL_HSEM_1StepLock(HSEM, CFG_HW_CLK48_CONFIG_SEMID)) { }
29 while (LL_HSEM_1StepLock(HSEM, CFG_HW_RCC_SEMID)) { }
30 LL_RCC_HSI48_Enable();
31 while (!LL_RCC_HSI48_IsReady()) { }
32 LL_RCC_SetUSBClockSource(LL_RCC_USB_CLKSOURCE_HSI48);
33 LL_HSEM_ReleaseLock(HSEM, CFG_HW_RCC_SEMID, 0);
36 LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_CRS);
37 LL_CRS_SetSyncDivider(LL_CRS_SYNC_DIV_1);
38 LL_CRS_SetSyncPolarity(LL_CRS_SYNC_POLARITY_RISING);
39 LL_CRS_SetSyncSignalSource(LL_CRS_SYNC_SOURCE_USB);
40 LL_CRS_SetReloadCounter(__LL_CRS_CALC_CALCULATE_RELOADVALUE(48000000u, 1000u));
41 LL_CRS_SetFreqErrorLimit(34u);
42 LL_CRS_EnableAutoTrimming();
43 LL_CRS_EnableFreqErrorCounter();
49 if (pcd->Instance != USB)
return;
52 __HAL_RCC_USB_CLK_ENABLE();
53 HAL_PWREx_EnableVddUSB();
55 HAL_NVIC_SetPriority(USB_LP_IRQn, 6, 0);
56 HAL_NVIC_EnableIRQ(USB_LP_IRQn);
61 if (pcd->Instance != USB)
return;
62 __HAL_RCC_USB_CLK_DISABLE();
63 HAL_NVIC_DisableIRQ(USB_LP_IRQn);
70void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *pcd, uint8_t ep) { USBD_LL_DataOutStage((USBD_HandleTypeDef *)pcd->pData, ep, pcd->OUT_ep[ep].xfer_buff); }
71void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *pcd, uint8_t ep) { USBD_LL_DataInStage((USBD_HandleTypeDef *)pcd->pData, ep, pcd->IN_ep[ep].xfer_buff); }
75 USBD_LL_SetSpeed((USBD_HandleTypeDef *)pcd->pData, USBD_SPEED_FULL);
76 USBD_LL_Reset((USBD_HandleTypeDef *)pcd->pData);
86static USBD_StatusTypeDef
st(HAL_StatusTypeDef h)
88 return h == HAL_OK ? USBD_OK : (h == HAL_BUSY ? USBD_BUSY : USBD_FAIL);
102 hpcd_USB_FS.Init.battery_charging_enable = DISABLE;
103 if (HAL_PCD_Init(&
hpcd_USB_FS) != HAL_OK)
return USBD_FAIL;
106 HAL_PCDEx_PMAConfig(&
hpcd_USB_FS, 0x00, PCD_SNG_BUF, 0x18);
107 HAL_PCDEx_PMAConfig(&
hpcd_USB_FS, 0x80, PCD_SNG_BUF, 0x58);
108 HAL_PCDEx_PMAConfig(&
hpcd_USB_FS, CDC_IN_EP, PCD_SNG_BUF, 0xC0);
109 HAL_PCDEx_PMAConfig(&
hpcd_USB_FS, CDC_OUT_EP, PCD_SNG_BUF, 0x110);
110 HAL_PCDEx_PMAConfig(&
hpcd_USB_FS, CDC_CMD_EP, PCD_SNG_BUF, 0x100);
114USBD_StatusTypeDef
USBD_LL_DeInit(USBD_HandleTypeDef *pdev) {
return st(HAL_PCD_DeInit((PCD_HandleTypeDef *)pdev->pData)); }
115USBD_StatusTypeDef
USBD_LL_Start(USBD_HandleTypeDef *pdev) {
return st(HAL_PCD_Start((PCD_HandleTypeDef *)pdev->pData)); }
116USBD_StatusTypeDef
USBD_LL_Stop(USBD_HandleTypeDef *pdev) {
return st(HAL_PCD_Stop((PCD_HandleTypeDef *)pdev->pData)); }
118USBD_StatusTypeDef
USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep, uint8_t type, uint16_t mps)
120 return st(HAL_PCD_EP_Open((PCD_HandleTypeDef *)pdev->pData, ep, mps, type));
122USBD_StatusTypeDef
USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep) {
return st(HAL_PCD_EP_Close((PCD_HandleTypeDef *)pdev->pData, ep)); }
123USBD_StatusTypeDef
USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep) {
return st(HAL_PCD_EP_Flush((PCD_HandleTypeDef *)pdev->pData, ep)); }
124USBD_StatusTypeDef
USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep) {
return st(HAL_PCD_EP_SetStall((PCD_HandleTypeDef *)pdev->pData, ep)); }
125USBD_StatusTypeDef
USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep) {
return st(HAL_PCD_EP_ClrStall((PCD_HandleTypeDef *)pdev->pData, ep)); }
129 PCD_HandleTypeDef *h = (PCD_HandleTypeDef *)pdev->pData;
130 return (ep & 0x80u) ? h->IN_ep[ep & 0x7Fu].is_stall : h->OUT_ep[ep & 0x7Fu].is_stall;
135 return st(HAL_PCD_SetAddress((PCD_HandleTypeDef *)pdev->pData,
addr));
138USBD_StatusTypeDef
USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep, uint8_t *buf, uint32_t size)
140 return st(HAL_PCD_EP_Transmit((PCD_HandleTypeDef *)pdev->pData, ep, buf, size));
145 return st(HAL_PCD_EP_Receive((PCD_HandleTypeDef *)pdev->pData, ep, buf, size));
150 return HAL_PCD_EP_GetRxCount((PCD_HandleTypeDef *)pdev->pData, ep);
158 static uint32_t mem[(
sizeof(USBD_CDC_HandleTypeDef) / 4u) + 1u];
159 return size <=
sizeof mem ? mem : NULL;
static uint32_t addr(uint16_t sect)
uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep)
void HAL_PCD_MspInit(PCD_HandleTypeDef *pcd)
void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *pcd)
USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev)
void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *pcd)
void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *pcd)
uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep)
void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *pcd, uint8_t ep)
USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep, uint8_t *buf, uint32_t size)
USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep, uint8_t *buf, uint32_t size)
USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev)
USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t addr)
void HAL_PCD_SOFCallback(PCD_HandleTypeDef *pcd)
static USBD_StatusTypeDef st(HAL_StatusTypeDef h)
void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *pcd, uint8_t ep)
void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *pcd)
USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep)
void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *pcd, uint8_t ep)
USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep)
void USBD_static_free(void *p)
USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep)
USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev)
void USB_LP_IRQHandler(void)
void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *pcd)
static void clk48_on(void)
USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev)
void HAL_PCD_MspDeInit(PCD_HandleTypeDef *pcd)
void * USBD_static_malloc(uint32_t size)
void HAL_PCD_ResetCallback(PCD_HandleTypeDef *pcd)
void USBD_LL_Delay(uint32_t ms)
void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *pcd, uint8_t ep)
USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep)
USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep, uint8_t type, uint16_t mps)
PCD_HandleTypeDef hpcd_USB_FS
Configuration of the ST USB device library (third_party/st_usb) for the ACwing FC firmware: one CDC i...