Повышение и понижение тактовой частоты

ФАПЧ (Фазовая автоподстройка частоты) или же PLL, этот блок стал основным в большинстве современных МК. Зачастую их даже несколько. Основное предназначение этого блока - генерация нужной тактовой частоты, а точнее выделение ее из имеющегося тактового сигнала от внутреннего или внешнего осциллятора.

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

Т.к. мы используем по умолчанию внутренний источник тактового сигнала HSI то его частота фиксирована - 16 МГц. Поэтому мы воспользуемся основным PLL для того чтобы менять частоту. Как индикатор этих изменений мы возмем генерацию ШИМ на светодиоды из примера - Регистры сравнения/захвата шим, немного изменив его. На каждый пятый цикл мигания мы будем изменять частоту повышая ее изменив делитель на 4 значения к уменьшению, после достижения значения 64 МГц, будем понижать обратно до 16 МГц.

Напоминаю, что все коммутации с ФАПЧ следует производить при его отключенном состоянии, т.к. во время смены значений он останавливается и это может привести к остановке тактирования всего МК. Поэтому мы будем переходить на внутренний осциллятор для настройки ФАПЧ и после настройки и стабилизации частоты возвращаться к тактированию от ФАПЧ.

Начнем с создания проекта:

nis@jane ~/stm32/f4examples/07-clocks $ cp -av 00-base/ 01-up-down-clocks

nis@jane ~/stm32/f4examples/07-clocks $ cd 01-up-down-clocks/

Начнем с инициализации периферии в work.c.

И добавим обработчик прерывания от таймера которой и будет менять настройки ФАПЧ в файл startup.c.

Соберем проект и загрузим его в МК:

nis@jane ~/stm32/f4examples/07-clocks/01-up-down-clocks $ make write

Видео: