summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hw/bsp/stm32f407g_disc1/board_stm32f407g_disc1.c15
-rw-r--r--src/portable/stm/stm32f4/dcd_stm32f4.c4
2 files changed, 13 insertions, 6 deletions
diff --git a/hw/bsp/stm32f407g_disc1/board_stm32f407g_disc1.c b/hw/bsp/stm32f407g_disc1/board_stm32f407g_disc1.c
index f08cecac8..30239de50 100644
--- a/hw/bsp/stm32f407g_disc1/board_stm32f407g_disc1.c
+++ b/hw/bsp/stm32f407g_disc1/board_stm32f407g_disc1.c
@@ -85,13 +85,18 @@ void board_init(void)
RCC->AHB2ENR |= RCC_AHB2ENR_OTGFSEN;
// USB Pin Init
- // PA10- ID, PA11- DM, PA12- DP
+ // PA9- VUSB, PA10- ID, PA11- DM, PA12- DP
// PC0- Power on
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
- GPIOD->MODER |= GPIO_MODER_MODE10_1 | GPIO_MODER_MODE11_1 | \
- GPIO_MODER_MODE12_1;
- GPIOA->AFR[1] |= (10 << GPIO_AFRH_AFSEL10_Pos) | \
- (10 << GPIO_AFRH_AFSEL11_Pos) | (10 << GPIO_AFRH_AFSEL12_Pos);
+ GPIOA->MODER |= GPIO_MODER_MODE9_1 | GPIO_MODER_MODE10_1 | \
+ GPIO_MODER_MODE11_1 | GPIO_MODER_MODE12_1;
+ GPIOA->AFR[1] |= (10 << GPIO_AFRH_AFSEL9_Pos) | \
+ (10 << GPIO_AFRH_AFSEL10_Pos) | (10 << GPIO_AFRH_AFSEL11_Pos) | \
+ (10 << GPIO_AFRH_AFSEL12_Pos);
+
+ // Pullup required on ID, despite the manual claiming there's an
+ // internal pullup already (page 1245, Rev 17)
+ GPIOA->PUPDR |= GPIO_PUPDR_PUPD10_0;
}
diff --git a/src/portable/stm/stm32f4/dcd_stm32f4.c b/src/portable/stm/stm32f4/dcd_stm32f4.c
index b87ff6597..e6849085f 100644
--- a/src/portable/stm/stm32f4/dcd_stm32f4.c
+++ b/src/portable/stm/stm32f4/dcd_stm32f4.c
@@ -78,7 +78,9 @@ bool dcd_init (uint8_t rhport)
USB_OTG_FS->GINTMSK |= USB_OTG_GINTMSK_USBRST | USB_OTG_GINTMSK_ENUMDNEM | \
USB_OTG_GINTMSK_ESUSPM | USB_OTG_GINTMSK_USBSUSPM | \
USB_OTG_GINTMSK_SOFM;
- USB_OTG_FS->GCCFG |= USB_OTG_GCCFG_VBUSBSEN; // Enable pullup.
+
+ // Enable pullup, enable peripheral.
+ USB_OTG_FS->GCCFG |= USB_OTG_GCCFG_VBUSBSEN | USB_OTG_GCCFG_PWRDWN;
return true;
}