Разобравшись с правильным тактирование USB в мк данного типа, обнаружил, что не могу через функции стандартной библиотеки переферии rcc сконфигурировать частоты шин, и, соответственно, таймера.
Что хочу: хочу, имея внешинй кварц на 8 МГц, получить 48 МГц на шине USB, 48 - Мгц SYSCLK, 24 МГц - APB1, 48 МГц - TIM2.
Пишу код вот такой:
CODE
/* rcc init start */
RCC_DeInit(); //reset all rcc settings
RCC_HSICmd(DISABLE); //hsi off
RCC_HSEConfig(RCC_HSE_ON); //hse on
RCC_PREDIV1Config(RCC_PREDIV1_Div1); //div1-hse pll_in
RCC_PLLConfig(RCC_PLLSource_PREDIV1 ,RCC_PLLMul_6); // pll_clock=(8MHz/1)*6=48MHz
RCC_PLLCmd(ENABLE); // pll enable
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //pll_clk is system clk source
RCC_HCLKConfig(RCC_SYSCLK_Div2); //ahb_clk_devider
RCC_PCLK1Config(RCC_HCLK_Div2); //apb1_clk_devider
/* rcc init end */
RCC_DeInit(); //reset all rcc settings
RCC_HSICmd(DISABLE); //hsi off
RCC_HSEConfig(RCC_HSE_ON); //hse on
RCC_PREDIV1Config(RCC_PREDIV1_Div1); //div1-hse pll_in
RCC_PLLConfig(RCC_PLLSource_PREDIV1 ,RCC_PLLMul_6); // pll_clock=(8MHz/1)*6=48MHz
RCC_PLLCmd(ENABLE); // pll enable
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //pll_clk is system clk source
RCC_HCLKConfig(RCC_SYSCLK_Div2); //ahb_clk_devider
RCC_PCLK1Config(RCC_HCLK_Div2); //apb1_clk_devider
/* rcc init end */
Далее настраиваю таймер, на мегание в 1-у секунду. И он мигает с частотой около одной секунды. Экспериментально установлено, что он мигает с частотой, соответствующей частоте таймера в 72МГц, а не 48, как планировалось. 72 - это цифра для настроек по умолчанию, но ведь я их заменяю на новые!
Попробовал все тоже самое проделать через CubeMX - и получилось с первого раза. Есть какой-то нюанс, видимо в ручной настройки тактирования.
Если кто-то понимает в чем дело - помогите, пожалуйста.