a-styuf 0 9 января, 2017 Опубликовано 9 января, 2017 (изменено) · Жалоба Добрый день! Разобравшись с правильным тактирование USB в мк данного типа, обнаружил, что не могу через функции стандартной библиотеки переферии rcc сконфигурировать частоты шин, и, соответственно, таймера. Что хочу: хочу, имея внешинй кварц на 8 МГц, получить 48 МГц на шине USB, 48 - Мгц SYSCLK, 24 МГц - APB1, 48 МГц - TIM2. Пишу код вот такой: /* 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 */ Далее настраиваю таймер, на мегание в 1-у секунду. И он мигает с частотой около одной секунды. Экспериментально установлено, что он мигает с частотой, соответствующей частоте таймера в 72МГц, а не 48, как планировалось. 72 - это цифра для настроек по умолчанию, но ведь я их заменяю на новые! Попробовал все тоже самое проделать через CubeMX - и получилось с первого раза. Есть какой-то нюанс, видимо в ручной настройки тактирования. Если кто-то понимает в чем дело - помогите, пожалуйста. Изменено 9 января, 2017 пользователем styuf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 9 января, 2017 Опубликовано 9 января, 2017 · Жалоба А PLL от чего тактируется? Reference Manual круче StdLib + CubeMX. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
a-styuf 0 9 января, 2017 Опубликовано 9 января, 2017 (изменено) · Жалоба PLL тактирует от внешнего источника (на это указывает данный параметр - RCC_PLLSource_PREDIV1). Схема тактирования проинициализирована согласна reference manual: внешний источник подается через предделитель с коэффициентом 1 на PLL (в котором умножается на 6), затем выбирается как источник для системного клока. В то-то и проблема. Я сначала написал код. потом те же коэффициенты и клоки использовал в сube. В первом случае нет результата, во втором присутствует. Изменено 9 января, 2017 пользователем styuf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 9 января, 2017 Опубликовано 9 января, 2017 · Жалоба Для меня не очевидно по имени PREDIV1, что используется HSE. Вообще, при включении HSE нужно дождаться его включения. Аналогично и с PLL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
a-styuf 0 11 января, 2017 Опубликовано 11 января, 2017 · Жалоба Спасибо. Попробую реализовать и отпишусь, как получу или не получу результат. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться