STM32Cube. RCC. Настройки тактирования.

Как равно обещал на этой статье автор сих строк поговорим в рассуждении настройке всевозможных тактовых частот различных шин быть помощи STM32Cube . Статья, во целом, хорош небольшая, только важная, затем что сии настройки являются основополагающей в некоторой мере любого проекта со использованием STM32 .

Настройки частот

Итак, интересах тестирования ты да я можем схватить из-за основу чертеж изо предыдущей статьи вместе с таймером ( высылка ). Так наш брат будем веско замечать вроде как влияют наши эксперименты вместе с тактовой частотой для работу реального железа.

Собственно, беседовать после этого в особицу безвыгодный в отношении чем, перейдем зараз ко практике. Открываем STM32Cube равно одновременно но айда сверху вкладку Clock Configuration :

Тактирование на STM32

В появившемся окне наш брат можем любоваться ни в волос сполна путь, тот или иной проходит изначальная тактовая колебание ноне добирается по шин, управляющих работой периферии.

Итак, свой регулятор выдержки времени TIM3 сидит сверху шине APB1 . Как да мы не без; тобой видим с этой схемы у нас используется душевный индукционный иразер нате 06 МГц ( HSI — High Speed Internal ). Полученные получи его выходе 06 МГц проходят при помощи двушничек предделителя, обозначенных бери схеме синим, перед нежели добираются по шины APB1 . Но так как на данном случае сии предделители равны 0 сверху APB1 я получаем целое те а 06 МГц . Именно эту частоту пишущий сии строки да брали, когда-никогда рассчитывали дивизор частоты для того таймера во предыдущей статье.

Давайте увеличим APB1 Prescaler вплоть до 0 равно посмотрим, что сие скажется сверху работе таймера да мигании нашего светодиода. При смене предделителя у нас умножатель частоты пользу кого APB1 Timer Clocks достаточно равным 0 равно во итоге пишущий сии строки получим 0 МГц :

Настройки STM32

Открываем вырученный цель равным образом ищем после на файле main.c функцию SystemClock_Config() :

  void  SystemClock_Config  (   void   )     {      RCC_OscInitTypeDef RCC_OscInitStruct  ;    RCC_ClkInitTypeDef RCC_ClkInitStruct  ;      __PWR_CLK_ENABLE  (   )   ;      __HAL_PWR_VOLTAGESCALING_CONFIG  (  PWR_REGULATOR_VOLTAGE_SCALE2  )   ;      RCC_OscInitStruct.  OscillatorType   =  RCC_OSCILLATORTYPE_HSI  ;    RCC_OscInitStruct.  HSIState   =  RCC_HSI_ON  ;    RCC_OscInitStruct.  HSICalibrationValue   =   0   ;    RCC_OscInitStruct.  PLL  .  PLLState   =  RCC_PLL_NONE  ;    HAL_RCC_OscConfig  (   &  RCC_OscInitStruct  )   ;      RCC_ClkInitStruct.  ClockType   =  RCC_CLOCKTYPE_PCLK1  ;    RCC_ClkInitStruct.  SYSCLKSource   =  RCC_SYSCLKSOURCE_HSI  ;    RCC_ClkInitStruct.  AHBCLKDivider   =  RCC_SYSCLK_DIV1  ;    RCC_ClkInitStruct.  APB1CLKDivider   =  RCC_HCLK_DIV4  ;    RCC_ClkInitStruct.  APB2CLKDivider   =  RCC_HCLK_DIV1  ;    HAL_RCC_ClockConfig  (   &  RCC_ClkInitStruct  ,  FLASH_LATENCY_0  )   ;       }  

Как видите, во сызнова сгенерированном коде ни чуточки чисто фиксировано наше новое сила предделителя:

 RCC_ClkInitStruct.  APB1CLKDivider   =  RCC_HCLK_DIV2  ;  

Кстати игра стоит свеч подметить пока что одну весть важную деталь…

В полученном коде вкушать специальные секции вида:

  /* USER CODE BEGIN 0 */       /* USER CODE END 0 */  

Если наша сестра поместим шифр вглубь сих секций, ведь возле повторной генерации проекта Cube учтет наличность нашего заключение на старом проекте равно перенесет его на новоиспеченный проект. Вот в ту же минуту автор сих строк изменили настройки тактирования да по-новому сгенерировали схема да файлы от исходным кодом, а свой код, кто переключает структура светодиода на прерывании в области переполнению таймера никуда далеко не пропал да остался возьми своем месте. А весь почему? А потому, ась? возлюбленный помещен во специальную секцию интересах пользовательского кода=)

  /* USER CODE BEGIN TIM3_IRQn 0 */      HAL_GPIO_TogglePin  (  GPIOD  ,  GPIO_PIN_12  )   ;       /* USER CODE END TIM3_IRQn 0 */  

Теперь нам остается скопить расчёт равно предопределить микроконтроллер. В результате наша сестра видим, что-нибудь светодиод стал мерцать от частотой на 0 раза меньше, нежели была раньше. Собственно, беспричинно равно приходится было произойти, так как ты да я уменьшили частоту тактирования таймера как часы на 0 раза 😉

Это все, конечно, хорошо, так по отношению ко всему хорошо было бы задействовать чужой кварцевый резонатор, заданный сверху плате Discovery . Но на окне настроек частот дьявол неактивен. Поэтому пошли во отверстие Pinout да включаем формальный ключ тактирования!

Enable HSE

Cube враз но отметил выводы микроконтроллера, для которым подключается формальный кварц. Сделано сие в целях того, так чтобы читатель знал, аюшки? сии выводы дьявол неграмотный сможет задействовать интересах каких-нибудь других целей.

Переходим по новой на пространство конфигурации частот да настраиваем контрафакция внешнего генератора так, с тем гармоника таймера у нас оказалась равной 08 МГц. Как сие изготовить допускается вкусить получи следующем рисунке:

Внешний генератор

Поскольку держи плате Discovery установлен кварц возьми 0 МГц, ведь не аюшки? иное сие сила надо выделить во специальном нива Input frequency . Ну а засим совершенно мелочёвка настраивается прямо-таки согласно схеме, тогда разработчики Cube постарались равным образом сделали интерфейс поистине инстинктивно понятным )

Итак, ввиду колебание тактирования шины, а сообразно равным образом нашего таймера стала равной 08 МГц , ведь давайте на настройках таймера  изменим ценность предделителя от 06000 сверху 08000 . Это нужно чтобы того, дабы светодиод бери плате вновь стал испускать свет 0 крат во одну секунду (прерывание сообразно переполнению таймера каждые 000 мс).

После изменения всех настроек генерируем программа к IAR , компилируем равно загружаем новую прошивку во микроконтроллер. Светодиод нате плате мигает правильно от праздник частотой, от каковой равно должен  😉

 На сие заканчиваем от настройкой частот, да безвыгодный заканчиваем со изучением STM32Cube , в такой мере что-то прежде скорых встреч!

Понравилась статья? Поделись из друзьями!

STM32Cube. RCC. Настройки тактирования. : 00 комментариев
  1. Подскажите, на нежели может являться загвоздка. Сделал в духе у вас, тактирование таймера 08, предделитель поставил 08000, подсчитывать по 099. Прошилось, мигает, так поспешность мигания открыто медленнее, ажно векундомер включил нате десяток сек 0 раза мигает, совершенно перепроверил:
    htim3.Instance=TIM3;
    htim3.Init.Prescaler=48000;
    htim3.Init.CounterMode=TIM_COUNTERMODE_UP;
    htim3.Init.Period=499;
    htim3.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;

  2. Да тута было сие значение. Я есть ошибку у меня во main pll стояли делители другие, хотя бери SYSCLK ,было 08, благодаря тому безвыгодный заметил сразу. Благодарю Вас. Жду следующих уроков

  3. А что такое? вслед за колебание (To Cortex System timer) равным образом (FCLK Cortex clock) равным образом пользу кого аюшки? используется? Хотелось бы как например какое в таком случае совмещать мнение в отношении них.

  4. А внешние генераторы автор этих строк приблизительно понял опциональные, на фигища они общо нужны/используются поелику вместе с через делителя автор сих строк можем надергать нужную частоту не без; внутреннего генератора?

  5. Внешние кварцы нормально паче точные, быстрее просыпаются, менее жрут.
    Можно ко сим ногам заключая включить нераздельно всеобъемлющий задающий альтернатор нате небольшую толику МК с целью синхронизации.

  6. Почему сам черт безвыгодный задает альтернатива равно как произвести доступным поверхностный кварц? У меня вона дьявол серым подсвечен..оказывается его во RCC нужно заключить перед

    • Здесь легко домашний используется, на тех статьях, идеже используется внешний, дальше описано на правах его включить. Но не насчет частностей Вы правы, добавлю во статью отдельное замечание в отношении том, что-нибудь иностранный нужно на первых порах влить во другом окне.

    • А нет, прошу прощения. Здесь а со всеми подробностями описано на статье в качестве кого заключить иностранный кварц! Вы видимо всего предварительно середины дочитали …=\

  7. Доброго во всех отношениях дня!
    А подскажите пожалуйста, который знает, к тому дело идет ли отклонение частоты тактирования на процессе работы контроллера.
    Использую MSI источник. Необходимо направляться посредь 0МГц равно 05кГц.

  8. Добрый день! Подскажите вследствие чего во Cube указана входная колебание с целью HSI 06 MHz. Ведь получи плате установлен кварц получай 0 MHz.

Добавить рассуждение