#include "hdl_usb.h" static void USB_IRQ_Handler(void) { extern void USBD_IRQHandler(uint8_t busid); USBD_IRQHandler(0); } void hdl_usb_init(void) { stc_clock_pllx_init_t stcUpllInit; stc_gpio_init_t stcGpioCfg; stc_irq_signin_config_t stcIrqRegiConf; LL_PERIPH_WE(LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_GPIO | LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM); /* 时钟配置 */ (void)CLK_PLLxStructInit(&stcUpllInit); stcUpllInit.u8PLLState = CLK_PLLX_ON; stcUpllInit.PLLCFGR = 0UL; stcUpllInit.PLLCFGR_f.PLLM = (4UL - 1UL); stcUpllInit.PLLCFGR_f.PLLN = (84UL - 1UL); stcUpllInit.PLLCFGR_f.PLLR = (7UL - 1UL); stcUpllInit.PLLCFGR_f.PLLQ = (7UL - 1UL); stcUpllInit.PLLCFGR_f.PLLP = (7UL - 1UL); //48M (void)CLK_PLLxInit(&stcUpllInit); CLK_SetUSBClockSrc(CLK_USBCLK_PLLXP); /* 引脚配置 */ (void)GPIO_StructInit(&stcGpioCfg); stcGpioCfg.u16PinAttr = PIN_ATTR_ANALOG; (void)GPIO_Init(USB_DM_PORT, USB_DM_PIN, &stcGpioCfg); (void)GPIO_Init(USB_DP_PORT, USB_DP_PIN, &stcGpioCfg); // GPIO_SetFunc(USB_DM_PORT, USB_DM_PIN, GPIO_FUNC_10); // GPIO_SetFunc(USB_DP_PORT, USB_DP_PIN, GPIO_FUNC_10); // GPIO_SetFunc(USB_VBUS_PORT, USB_VBUS_PIN, GPIO_FUNC_10); /* VBUS */ FCG_Fcg1PeriphClockCmd(FCG1_PERIPH_USBFS, ENABLE); /* 中断配置 */ stcIrqRegiConf.enIRQn = INT030_IRQn; stcIrqRegiConf.enIntSrc = INT_SRC_USBFS_GLB; stcIrqRegiConf.pfnCallback = &USB_IRQ_Handler; // 添加中断函数 (void)INTC_IrqSignIn(&stcIrqRegiConf); NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn); NVIC_SetPriority(stcIrqRegiConf.enIRQn, DDL_IRQ_PRIO_15); NVIC_EnableIRQ(stcIrqRegiConf.enIRQn); LL_PERIPH_WP(LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_SRAM); }