mirror of
https://github.com/micropython/micropython.git
synced 2026-05-01 13:20:14 +02:00
stm32/usbd_conf: Fix USB VBUS sensing for newer STM32F4/F7 HAL versions.
Newer STM32F4/F7 variants (and their HAL headers) use a single USB_OTG_GCCFG_VBDEN register bit for VBUS detection instead of the older NOVBUSSENS/VBUSASEN/VBUSBSEN bits. The existing TinyUSB VBUS sensing code only handles the older register layout, so boards with the newer HAL silently skip VBUS configuration. This adds a #if defined(USB_OTG_GCCFG_VBDEN) branch that enables or disables VBUS detection via the new register bit, falling through to the existing code for older variants. Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
This commit is contained in:
committed by
Damien George
parent
d1c61ca52a
commit
9ca3b7412e
+30
-14
@@ -65,6 +65,30 @@ PCD_HandleTypeDef pcd_hs_handle;
|
||||
#define OTG_HS_IRQn USB1_OTG_HS_IRQn
|
||||
#endif
|
||||
|
||||
// Configure VBUS sensing for TinyUSB on STM32F4/F7. The DWC2 PHY init only
|
||||
// sets the PWRDWN bit but doesn't configure VBUS sensing in the GCCFG register.
|
||||
#if MICROPY_HW_TINYUSB_STACK && (defined(STM32F4) || defined(STM32F7))
|
||||
static inline void mp_usbd_configure_vbus_sensing(USB_OTG_GlobalTypeDef *USBx) {
|
||||
#if defined(USB_OTG_GCCFG_VBDEN)
|
||||
// Newer STM32F4/F7 with VBDEN register bit.
|
||||
#if defined(MICROPY_HW_USB_VBUS_DETECT_PIN)
|
||||
USBx->GCCFG |= USB_OTG_GCCFG_VBDEN;
|
||||
#else
|
||||
USBx->GCCFG &= ~USB_OTG_GCCFG_VBDEN;
|
||||
#endif
|
||||
#else
|
||||
// Older STM32F4 with separate VBUSASEN/VBUSBSEN/NOVBUSSENS register bits.
|
||||
#if defined(MICROPY_HW_USB_VBUS_DETECT_PIN)
|
||||
USBx->GCCFG &= ~USB_OTG_GCCFG_NOVBUSSENS;
|
||||
USBx->GCCFG |= USB_OTG_GCCFG_VBUSBSEN;
|
||||
#else
|
||||
USBx->GCCFG |= USB_OTG_GCCFG_NOVBUSSENS;
|
||||
USBx->GCCFG &= ~(USB_OTG_GCCFG_VBUSBSEN | USB_OTG_GCCFG_VBUSASEN);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#if MICROPY_HW_USB_FS
|
||||
static void mp_usbd_ll_init_fs(void) {
|
||||
{
|
||||
@@ -172,20 +196,8 @@ static void mp_usbd_ll_init_fs(void) {
|
||||
HAL_NVIC_EnableIRQ(OTG_FS_IRQn);
|
||||
#endif
|
||||
|
||||
#if MICROPY_HW_TINYUSB_STACK
|
||||
// Configure VBUS sensing for TinyUSB on STM32F4/F7 which have separate GCCFG register
|
||||
// The DWC2 PHY init only sets PWRDWN bit, but doesn't configure VBUS sensing
|
||||
#if defined(STM32F4) || defined(STM32F7)
|
||||
#if defined(MICROPY_HW_USB_VBUS_DETECT_PIN)
|
||||
// Enable VBUS sensing in "B device" mode (using PA9)
|
||||
USB_OTG_FS->GCCFG &= ~USB_OTG_GCCFG_NOVBUSSENS;
|
||||
USB_OTG_FS->GCCFG |= USB_OTG_GCCFG_VBUSBSEN;
|
||||
#else
|
||||
// Force VBUS valid (no VBUS detect pin configured)
|
||||
USB_OTG_FS->GCCFG |= USB_OTG_GCCFG_NOVBUSSENS;
|
||||
USB_OTG_FS->GCCFG &= ~(USB_OTG_GCCFG_VBUSBSEN | USB_OTG_GCCFG_VBUSASEN);
|
||||
#endif
|
||||
#endif
|
||||
#if MICROPY_HW_TINYUSB_STACK && (defined(STM32F4) || defined(STM32F7))
|
||||
mp_usbd_configure_vbus_sensing(USB_OTG_FS);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -306,6 +318,10 @@ static void mp_usbd_ll_init_hs(void) {
|
||||
|
||||
#endif
|
||||
|
||||
#if MICROPY_HW_TINYUSB_STACK && (defined(STM32F4) || defined(STM32F7))
|
||||
mp_usbd_configure_vbus_sensing(USB_OTG_HS);
|
||||
#endif
|
||||
|
||||
#else // !MICROPY_HW_USB_HS_IN_FS
|
||||
|
||||
// Configure USB HS GPIOs
|
||||
|
||||
Reference in New Issue
Block a user