#include "stm32f3xx_hal.h" #include "aioc.h" #include "led.h" #include "ptt.h" #include "usb.h" #include #include static void SystemClock_Config(void) { HAL_StatusTypeDef status; /* Enable external oscillator and configure PLL: 8 MHz (HSE) / 1 * 9 = 72 MHz */ RCC_OscInitTypeDef OscConfig = { .OscillatorType = RCC_OSCILLATORTYPE_HSE, .HSEState = RCC_HSE_ON, .HSEPredivValue = RCC_HSE_PREDIV_DIV1, .PLL = { .PLLState = RCC_PLL_ON, .PLLSource = RCC_CFGR_PLLSRC_HSE_PREDIV, .PLLMUL = RCC_PLL_MUL9 } }; status = HAL_RCC_OscConfig(&OscConfig); assert(status == HAL_OK); /* Set correct peripheral clocks. 72 MHz (PLL) / 1.5 = 48 MHz */ RCC_PeriphCLKInitTypeDef PeriphClk = { .PeriphClockSelection = RCC_PERIPHCLK_USB, .USBClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5 }; status = HAL_RCCEx_PeriphCLKConfig(&PeriphClk); assert(status == HAL_OK); /* Set up divider for maximum speeds and switch clock */ RCC_ClkInitTypeDef ClkConfig = { .ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2, .SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK, .AHBCLKDivider = RCC_SYSCLK_DIV1, .APB1CLKDivider = RCC_HCLK_DIV2, .APB2CLKDivider = RCC_HCLK_DIV1 }; status = HAL_RCC_ClockConfig(&ClkConfig, FLASH_LATENCY_2); assert(status == HAL_OK); NVIC_SetPriority(SysTick_IRQn, AIOC_IRQ_PRIO_SYSTICK); /* Enable MCO Pin to PLL/2 output */ __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef GpioInit = { .Pin = GPIO_PIN_8, .Mode = GPIO_MODE_AF_PP, .Pull = GPIO_NOPULL, .Speed = GPIO_SPEED_FREQ_HIGH, .Alternate = GPIO_AF0_MCO }; HAL_GPIO_Init(GPIOA, &GpioInit); HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_PLLCLK_DIV2, RCC_MCODIV_1); } int _write(int file, char *ptr, int len) { for (uint32_t i=0; i