Problems with ST32F302 and USB
Posted: Wed Sep 23, 2020 1:17 pm
External clock 16MHz
mcuconf.h:
---
#define STM32_NO_INIT FALSE
#define STM32_PVD_ENABLE FALSE
#define STM32_PLS STM32_PLS_LEV0
#define STM32_HSI_ENABLED TRUE
#define STM32_LSI_ENABLED TRUE
#define STM32_HSE_ENABLED TRUE
#define STM32_LSE_ENABLED FALSE
#define STM32_SW STM32_SW_PLL
#define STM32_PLLSRC STM32_PLLSRC_HSE
#define STM32_PREDIV_VALUE 2 // 16MHZ HSE -> 72MHZ SYSCLK
#define STM32_PLLMUL_VALUE 9
#define STM32_HPRE STM32_HPRE_DIV1 // 72MHz AHB
#define STM32_PPRE1 STM32_PPRE1_DIV2 // 36MHz APB1
#define STM32_PPRE2 STM32_PPRE2_DIV2 // 72MHz APB2
#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
#define STM32_ADC12PRES STM32_ADC12PRES_DIV1
---
in main.c:
---
sduObjectInit(&SDU1);
sduStart(&SDU1, &serusbcfg);
usbDisconnectBus(serusbcfg.usbp);
chThdSleepMilliseconds(1500);
usbStart(serusbcfg.usbp, &usbcfg);
usbConnectBus(serusbcfg.usbp);
---
program dont leave this block:
---
while (SDU1.config->usbp->state != USB_ACTIVE) {
led_toggle(STATUS_LED);
chThdSleepMilliseconds(500);
}
---
Led blinking.
When i set brickpoint in "usb_event" function, i catch 2 or more USB_EVENT_RESET event and, after all, USB_EVENT_SUSPEND event.
OS cannot read USB device descriptor.
Electrically all correct, i can enter to USB DFU mode. I see STM32 bootloader device.
mcuconf.h:
---
#define STM32_NO_INIT FALSE
#define STM32_PVD_ENABLE FALSE
#define STM32_PLS STM32_PLS_LEV0
#define STM32_HSI_ENABLED TRUE
#define STM32_LSI_ENABLED TRUE
#define STM32_HSE_ENABLED TRUE
#define STM32_LSE_ENABLED FALSE
#define STM32_SW STM32_SW_PLL
#define STM32_PLLSRC STM32_PLLSRC_HSE
#define STM32_PREDIV_VALUE 2 // 16MHZ HSE -> 72MHZ SYSCLK
#define STM32_PLLMUL_VALUE 9
#define STM32_HPRE STM32_HPRE_DIV1 // 72MHz AHB
#define STM32_PPRE1 STM32_PPRE1_DIV2 // 36MHz APB1
#define STM32_PPRE2 STM32_PPRE2_DIV2 // 72MHz APB2
#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
#define STM32_ADC12PRES STM32_ADC12PRES_DIV1
---
in main.c:
---
sduObjectInit(&SDU1);
sduStart(&SDU1, &serusbcfg);
usbDisconnectBus(serusbcfg.usbp);
chThdSleepMilliseconds(1500);
usbStart(serusbcfg.usbp, &usbcfg);
usbConnectBus(serusbcfg.usbp);
---
program dont leave this block:
---
while (SDU1.config->usbp->state != USB_ACTIVE) {
led_toggle(STATUS_LED);
chThdSleepMilliseconds(500);
}
---
Led blinking.
When i set brickpoint in "usb_event" function, i catch 2 or more USB_EVENT_RESET event and, after all, USB_EVENT_SUSPEND event.
OS cannot read USB device descriptor.
Electrically all correct, i can enter to USB DFU mode. I see STM32 bootloader device.