Воскресенье, 08.12.2024, 06:35
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | Каталог статей | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
Меню сайта

Категории раздела
Программирование микроконтроллеров AVR [6]
Программирование микроконтроллеров STM32 [1]
Программирование ПЛИС Altera [1]
Разное [1]
Статьи на различную тематику
Самодельные системы управления моделями [0]

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Главная » Статьи » Программирование микроконтроллеров STM32

STM32: Настройка тактирования контроллера в среде CooCox

Эта статья расскажет новичку где и что нужно поправить чтобы ваша программа написанная в среде CooCox работала с той скоростью с которой было задумано  :-)

 
Микроконтроллеры STM32 имеют гибко настраиваемую систему тактирования, причем тактируется не только сам процессор микроконтроллера, но и остальные модули (SPI, DAC, ADC, DMA, таймеры и так далее).
 
Естественно что все тактовые сигналы выделяются от одного или нескольких генераторов..
 
У микроконтроллеров STM32 есть 2 внутренних генератора и есть возможность подключить 2 внешних !
 
Задумались ? :-)
 
первоначально микроконтроллер STM32 стартует на одном из внутренних генераторов, обычно он обозначается HSI и имеет тактовую частоту порядка 8 мгц. Все бы ничего, но он имеет низкую стабильность, поэтому используется только как стартовый (микроконтроллер всегда стартует с его тактом !) и резервный - если например внешний так пропадет - то микроконтроллер переключиться на внутренний генератор..
Дополнительно к внутреннему генератору HSI ставят внешний, как правило, кварцевый генератор - который имеет очень высокие показатели стабильности частоты.. Внешний генератор обозначается буквами HSE
 
Вот из-за того что генератор внешний и возникает необходимость правок в конфигурационных файлах..
 
о тактировании микроконтроллеров STM32 можно почитать в соответствующих разделах документации, минимально нам нужно знать что исходную частоту генератора (HSI или HSE или другого) микроконтроллер может как понижать (делением частоты) так и повышать (умножением).
 
Например контроллер STM32F407 установленный на плате STM32F4Discovery работает на частоте 168 мгц, а в качестве внешнего генератора используется кварц всего на 8 мгц !! Для того чтобы получить нужную частоту микроконтроллер частоту кварца делит на 8 (получает частоту 1 мгц) и потом умножает на 336, чтобы позже поделить на 2 и получить 168 мгц такта..
 
Но среда проектирования (причем не важно будет ли это CooCox или Keil, или еще какая) - не знает какой кварц мы используем - и использует какой то из выбранных ее  разработчиками набор делителей - поэтому не только можно, но и нужно проверять какие настройки тактирования используются в проекте
 
в среде CooCox - создаем проект (выбираем Create Project)
 
 
указываем имя проекта и путь для сохранения
 
 
далее идет выбор что мы будем указывать: микроконтроллер или отладочную плату, я выбираю по микроконтроллеру:
 
 
и выбираю тип микроконтроллера
 
 
как видите на моей отладочной плате контроллер серии STM32F4IG (176 ног, мегабайт флеш, 196 кб озу),
 
и подтверждаем выбор нажатием кнопки Finish
 
 
в репозитарии выберем стандартные библиотеки (которых достаточно чтобы сделать мигалку светодиодами)
 
 
и теперь обращаем внимание на окно Project в левом нижнем углу в котором показаны все библиотеки нашего проекта, куда будут добавляться другие библиотеки и наши самописные модули
 
 
в списке файлов нас интересует файл system_stm32f4xx.c в котором и производиться настройка тактирования
 
 
 
поизучав его вы без труда найдете на какой кварцевый генератор рассчитывал разработчик среды по умолчанию
 
 
 
поскольку например в моей плате стоит кварц на 8 мгц, я правлю стартовый скрипт под себя, причем изменить нужно буквально одну цифру - тот самый делитель, который должен таким образом поделить частоту тактового генератора чтобы получилась частота 1 мгц
 
 
выделенный делитель на 25 для кварца в 8 мгц несколько великоват, поэтому я его исправляю на 8
 
 
 
в принципе вот и все что нужно сделать..
 
но на всякий случай, в модуль main.c программы я еще добавляю определение в котором указывается частота кварцевого генератора - это необходимо если вы используете сторонние библиотеки которые это значение по тем или иным причинам может интересовать
 
выглядит это вот так
 
 
вызов SystemInit() настраивает тактирование микроконтроллера согласно произведенных нами настроек
 
Теперь Вы знаете как задавать тактирование вашего микроконтроллера и ваши программы будут работать на той скорости что вы задумали и даже возможно чуточку быстрее (так например STM32F407 установленная в STM32F4Discovery у меня завелась  на частоте 240 мгц (вместо паспортных 168) :-)) Однако играя не переборщите, большая частота всегда влечет за собой больших нагрев и может даже вывести из строя ваш микроконтроллер...
 
 
Никаких вложений к этой статье не планировалось, так что и не ищите :-)
 
 
 
 
Категория: Программирование микроконтроллеров STM32 | Добавил: ВитГо (10.01.2014)
Просмотров: 17962 | Комментарии: 4 | Рейтинг: 0.0/0
Всего комментариев: 3
3 ВитГо  
0

2 uwrtey  
0
Очень полезно, спасибо.

1 olegau  
0
очень познавательно, спасибо!
ждем продолжения

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Copyright MyCorp © 2024
Сделать бесплатный сайт с uCoz