Что такое clk в микроконтроллерах

Что такое clk в микроконтроллерах

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах
Будут ли микроконтроллеры будущего видеть сны?

Мне удалось практически без изменений портировать модуль тактирования CLK, стандартной периферийной библиотеки(далее SPL), под компилятор SDCC.

Регистры тактирования S-серии, в SPL описываются структурой:

Описание этих регистров для S-серии подробно на русском языке рассмотрено здесь: Микроконтроллеры STM8. Система тактирования.

При инициализации CLK модуля, в эти регистры записываются следующие значения:

Для S-серии, функционал модуля составляют следующие функции:

Для L-серии он следующий:

Структура описывающая набор регистров для L-серии:

Предварительно загружаемые в них значения:

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

В SPL examples есть несколько примеров по использованию библиотеки. Взяв за основу с одной стороны их, а с другой стороны пример из предыдущего поста, для опроса состоянии кнопки, я составил программу которая по нажатию кнопки переключается на внешний кварц. На плату с stm8s103f3p6 кварц подключается на пины A1:A2. Конденсаторы для проверки не обязательны, они нужны для стабильной работы кварца.

О смене генератора с HSI на внешний кварц(HSE), можно будет судить по мигающему зеленому светодиоду на плате. Правда если ваш кварц будет на 16 MHz то на первый взгляд ничего не изменится, т.к. частота внутреннего генератора так же равна 16 MHz. Разница будет если при работающем от кварца микроконтроллере, вытащить его из макетки. Тогда светодиод остановится. Я ставил кварцы на 8 и 25 MHz, и с ними переход на внешний резонатор было видно по изменившейся частоте мигания светодиода.

Теперь немного про вынимание кварца из работающего микроконтроллера. В STM8 есть фича «Clock security system», которая позволяет обнаруживать сбой в работе кварца, автоматически переключаться на внутренний генератор, а также генерировать прерывание при возникновении такого события. Включать эту фичу следует уже после того, как подключили HSE.

Вариант предыдущей программы с использованием Clock security system:

Теперь при вынимании кварца во время работы, зеленый светодиод не остановится, он продолжает мигать, но очень медленно на частоте 2 MHz. Т.е. Clock security system сбросит все настройки CLK до дефолтовых.

Здесь прерывание по второму вектору оформлено в силе SPL. Чтобы это было возможно, в stm8s.h я вставил следующий макрос:

Вторая строка не соответствует SPL, но она делает определение прерывания короче.

Для L-серии синтаксис немного другой. Пример последней програмы для L-серии будет таким:

Программа проверялась на 051-ом чипе, и в этом случае при вынимании кварца происходил возврат к пользовательским настройкам CLK, а не дефолтовым. В данном случае, это 16 MHz.

Источник

Программирование STM32. Часть 3: Система тактирования

Первое, с чем необходимо разобраться перед дальнейшим изучением микроконтроллеров STM32, является система управления тактированием и сбросом, именуемая RCC. В этой статье мы рассмотрим, как правильно настроить микроконтроллер на работу от внешнего кварцевого резонатора на 8 МГц. Все статьи цикла можно посмотреть тут: http://dimoon.ru/category/obuchalka/stm32f1

Система тактирования в STM32 в сравнении с микроконтроллерами AVR выполнена довольно замысловато. Давайте разбираться.

Содержание:

У микроконтроллеров STM32 все периферийные устройства (порты ввода-вывода, таймеры, интерфейсы SPI, и т.д.) подключены к так называемым шинам, через которые периферия получает тактовый сигнал и обменивается данными с ведущими устройствами шины (например, с процессором).

В STM32F103x8 три основных шины: AHB, APB1 и APB2. На каждой из шин висит определенная группа устройств:

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

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерахРис. 1. Блок-схема микроконтроллеров STM32F103x8 и STM32F103xB

Схема на рис. 1 поначалу может казаться сложной и непонятной, это нормально, со временем все в голове уложится и ощущение непонимания исчезнет.

А еще есть вот такая таблица, в которой так же указаны периферийные устройства и шины, к которым они подключены:

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Рис. 2. Таблица шин и периферийных устройств

Можно заметить, что на рис. 2 возле названия шины (AHB, APB1 и APB2) в скобках указана ее максимальная частота. Так как периферийные устройства получают тактовый сигнал от шины, ее частота задает скорость работы подключенных к данной шине устройств. Далее мы рассмотрим, как настроить частоту каждой из шин микроконтроллера.

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

Итак, вот основные тезисы, которые необходимо запомнить:

Генераторы

В микроконтроллерах STM32F103x8/B присутствует несколько генераторов тактового сигнала:

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Рис. 3. Блок-схема системы тактирования, красными прямоугольниками выделены генераторы тактовых сигналов

Первый из них — встроенный RC-генератор на 8 МГц, который называется High-speed internal (HSI) RC oscillator. После сброса микроконтроллер по-умолчанию тактируется как раз от этого генератора. Основным его плюсом является то, что для работы генератора не нужны ни какие дополнительные внешние компоненты. Однако его минус — плохая стабильность генерируемой частоты: при изменении температуры окружающей среды его частота в 8 МГц будет немного плыть. Для нетребовательных ко временнЫм интервалам устройств это может быть не критично, но в некоторых случаях данная особенность является недопустимой.

Следующий — High-speed external (HSE). Этот генератор является альтернативой HSI. Для его работы нужен внешний кварцевый резонатор на частоту 4-16 МГц. Его главным преимуществом в сравнении с HSI является стабильность генерируемой частоты. Так же, при определенной настройке, вывод OSC_IN можно подключить к источнику готового прямоугольного тактового сигнала без использования резонатора.

Далее Low-speed external (LSE). Этот генератор так же требует внешнего кварцевого резонатора, но только на 32768 Гц. LSE используется только для тактирования встроенных часов реального времени RTC, с помощью которых можно вести отсчет текущего времени, если это нужно.

Последний генератор — это Low-speed internal (LSI) RC oscillator. Это встроенный RC-генератор на 40 КГц. Он не отличается особой точностью, однако у него есть очень важная задача: генерация тактового сигнала для сторожевого таймера МК, который перезапустит систему в случае зависания. А еще от LSI можно тактировать RTC, но скорее всего это ни кто делать не будет 😉

Тактирование периферии

Процессорное ядро и основная часть периферии использует тактовый сигнал SYSCLK.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Рис. 4. Распределение тактового сигнала SYSCLK

После делителя AHB Prescaler тактовый сигнал распределяется между шинами микроконтроллера. Сигнал HCLK поступает в процессорное ядро, память и периферию шины AHB. FCLK так же идет в ядро. Через фиксированный делитель на 8 тактирование подается на системный таймер Cortex System timer. Делитель APB1 Prescaler формирует сигнал тактирования устройств шины APB1, а APB2 Prescaler для устройств APB2.

Тут правда есть небольшая особенность формирования тактового сигнала для таймеров и АЦП.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Рис. 5. Распределение тактового сигнала шины APB1 между устройствами

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Рис. 6. Распределение тактового сигнала шины APB2 между устройствами

Тактовый сигнал на таймеры подается следующим образом. Если делитель шины (APB1 Prescaler или APB2 Prescaler) установлен в единицу, то частота тактирования тактирования таймеров (TIMXCLK или TIM1CLK) будет равна частоте шины. Но, если делитель не равен единице, то частота тактирования таймеров будет в 2 раза больше частоты шины (см. рис. 5, 6). Вот так 😉 А для АЦП есть свой собственный делитель, который из частоты тактирования шины APB2 формирует сигнал ADCCLK (рис. 6).

Думаю, следует еще обратить внимание на вот эти элементы блок-схемы:

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Это есть ни что иное, как устройства подачи тактового сигнала на конкретную периферию (логические элементы 2И). Попробую перерисовать один из них так, чтоб было понятнее, что это и как оно работает:

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

У каждого периферийного модуля в специальном регистре есть свой бит (SPI1EN, IOPAEN, IOABEN и так далее), при установке которого в единицу разрешается подача на него тактового сигнала. На рис. 8 я привел пример только для тактового сигнала PCLK2 шины APB2, для остальных сигналов (HCLK, PCLK1, TIMXCLK, TIM1CLK) все то же самое.

Источники сигнала SYSCLK

Итак, теперь мы знаем, что основным тактовым сигналом в микроконтроллерах STM32 является SYSCLK. Давайте теперь разберемся, как его получить. В нашем распоряжении 3 варианта: генераторы HSI, HSE и модуль PLL:

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Рис. 9. Источники сигнала SYSCLK

После сброса микроконтроллера в качестве источника сигнала SYSCLK по-умолчанию устанавливается встроенный RC-генератор HSI. Прохождение тактового сигнала для этого случая представлено на рис. 10, значения по-умолчанию всех делителей обвел кружочком:

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Рис. 10. Конфигурация системы тактирования по-умолчанию

А теперь давайте посчитаем значения всех частот в конфигурации по-умолчанию. Частоты HCLK, FCLK, PCLK1, TIMXCLK, PCLK2, TIM1CLK будут равны 8 МГц, частота Cortex System timer равна 1 МГц, а ADCCLK 4 Мгц.

Если мы хотим задействовать HSE-генератор, то картина будет следующей:

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Рис. 11. Выбор генератора HSE в качестве источника тактирования SYSCLK

При использовании кварцевого резонатора на 8 МГц все системные частоты будут такими же, что и в предыдущем случае. Разница только в одном: при использовании генератора HSE стабильность частот лучше, чем при использовании HSI. Однако, если мы хотим получить максимальную производительность всей системы, то нужно в качестве источника SYSCLK использовать блок умножения частоты PLL.

HSE и PLL

В микроконтроллерах STM32 модуль PLL может тактироваться как от HSI генератора, так и от HSE. Существует огромное количество вариантов настройки тактирования системы от PLL. Мы остановимся только на одном, в котором используется HSE и все коэффициенты настроены на максимальную производительность системы:

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Рис. 12. Схема прохождения тактового сигнала при использовании PLL совместно с HSE

Кварцевый резонатор выбираем на 8 МГц. Далее, сигнал с HSE без деления (настраивается битом PLLXTPRE) поступает на селектор PLLSRC и потом на PLL. Для того, чтобы из 8-и МГц получить 72 МГц, коэффициент умножения PLL должен быть равен PLLMUL=9. Далее, сигнал с PLL частотой 72 МГц через селектор SW поступает на SYSCLK. Так как процессорное ядро мы хотим тактировать максимальной частотой в 72 МГц, AHB Prescaler устанавливаем равный единице (без деления). Для получения частоты шины APB1, равной 36 МГц, APB1 Prescaler ставим равным 2. Шина APB2 имеет максимальную частоту 72 МГц, следовательно, APB2 Prescaler можно установить в 1.

Что еще?

Здесь мы не рассмотрели еще некоторые блоки системы тактирования, о которых хочется упомянуть.

Clock security system (CSS) — переводится примерно как «система безопасности тактирования». Если, при использовании генератора HSE в качестве источника тактового сигнала для SYSCLK или PLL, произойдет срыв генерации HSE, то CSS автоматически переключит всю систему на работу от встроенного RC-генератора HSI. Таким образом, если что-то случится с кварцем, система не зависнет намертво в неопределенном состоянии, а сможет выполнить какие-то действия, например, перевести объект управления в безопасное состояние (закрыть все вентили, отключить силовые установки, и т.д.)

Модуль часов реального времени RTC может тактироваться от встроенного LSI генератора на 40 КГц, от HSE через делитель на 128, либо от LSE с внешним кварцем на 32768 Гц. Источник тактовых импульсов выбирается с помощью RTCSEL.

Модуль USB получает тактовый сигнал от PLL, причем при частоте на выходе PLL равной 72 МГц есть возможность активировать USB Prescaler с коэффициентом деления 1.5 для получения необходимой частоты 48 МГц.

Microcontroller clock output (MCO) — вывод микроконтроллера, на который можно вывести частоту от одного из источников сигнала: SYSCLK, HSE, HSI либо сигнал с выхода PLL, поделенный пополам. Нужный источник выбирается с помощью битов MCO.

Заключение

Итак, мы рассмотрели основные моменты в системе тактирования микроконтроллеров STM32 на примере STM32F103x8 и STM32F103xB. В других микроконтроллерах STM32 примерно все то же самое, за исключением некоторых нюансов. В следующей части мы познакомимся с регистрами системы тактирования и сброса RCC и рассмотрим пример инициализации RCC.

Источник

ОБОРУДОВАНИЕ
ТЕХНОЛОГИИ
РАЗРАБОТКИ

Блог технической поддержки моих разработок

Урок 5. Система тактирования STM32.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

В уроке изучим систему тактирования микроконтроллера.

Микроконтроллер – это синхронный автомат, работающий от единого источника тактовых импульсов. Пока мы не настроим тактирование всех его узлов, программа правильно работать не будет.

В уроке 3 мы научились пользоваться программой STM32CubeMX. Конфигурацию системы тактирования производили с помощью интерактивной схемы. Эта схема адекватно, в подробностях отображает реальную функциональную схему системы тактирования микроконтроллера. Так давайте и изучать ее с помощью STM32CubeMX, тем более, что мы собираемся использовать эту программу в каждом проекте.

Последовательность действий нам уже известна.

Перед нами интерактивная схема системы тактирования микроконтроллера.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

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

Все просто. Гораздо важнее понять, что надо сформировать, для чего и из чего.

Что значит конфигурировать систему тактирования? Чего мы хотим добиться?

Справа схемы есть 8 прямоугольников. Это источники тактирования узлов микроконтроллера. Мы должны установить, выбрать для них синхроимпульсы с определенной частотой.

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

Большая часть узлов микроконтроллера тактируются от сигналов, полученных из промежуточной частоты – прямоугольник HCLK. Левая от него часть схемы формирует саму частоту HCLK, а правая – раздает ее по узлам, периферийным устройствам.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

У других микроконтроллеров семейства STM32 устройств на шине APB1 может быть больше.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Для тактирования шины APB1 используется сигнал HCLK с предделителем на несколько значений.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Частота не должна превышать 36 мГц.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Теперь давайте разберемся, как формировать сигнал промежуточной частоты HCLK. Начнем с противоположного, левого края схемы.

Исходными источникоми тактирования процессорного ядра и периферийных устройств микроконтроллера STM32 могут быть:

На схеме HSI-генератор изображен внутри микроконтроллера.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Это внутренний RC-генератор на 8 мГц. Сигнал с него подается на коммутатор HSI/HSE через делитель на 2. Поэтому от этого генератора можно сформировать сигнал HCLK с частотой до 36 мГц.

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

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

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

После этого на схеме он становится синим, и мы можем задать для него частоту. На нашей плате установлен кварцевый резонатор на 8 мГц, поэтому оставим 8.

В том же поле можно выбрать в качестве исходной частоты тактирования внешний сигнал.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

В этом режиме входная частота может быть в пределах 1-25 мГц.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

На пути преобразования сигналов HSI и HSE-генераторов в промежуточный синхросигнал HCLK расположены коммутаторы PLL Source Mux и System Clock Mux, делители и один умножитель.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Думаю, не составит труда разобраться, как выбрать нужную частоту сигнала HCLK.

Скорее всего, непонятен прямоугольник CSS, который можно включать и выключать.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

На схеме прямоугольник управляет коммутатором System Clock Mux.

Это система Clock Security System – контроль работы внешнего высокочастотного генератора HSE. При включенной системе CSS контролируется работа HSE-генератора. Если генератор перестает работать, то:

При использовании интерфейса USB есть небогатый выбор значений предделителя частоты для его тактирования.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Стандартная частота для работы USB – 48 мГц. При любой другой, прямоугольник to USB краснеет.

Прямоугольник FLITFCLK показывает, что для тактирования операций программирования FLASH-памяти микроконтроллера всегда используется внутренний RC-генератор HSI.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Но это вполне логично, да и повлиять на эту связь мы никак не можем.

Внизу схемы есть еще один коммутатор, который позволяет вывести сигнал тактирования на вывод микроконтроллера MCO (Microcontroller clock output). Сигнал может быть использован для синхронизации аппаратных узлов, подключенных к микроконтроллеру.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

После этого коммутатор MCO source Mux становится активным и можно выбрать один из источников сигнала:

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Остался левый верхний угол схемы. Это управление тактированием часами реального времени (RTC). Часы представляют собой 32 разрядный счетчик и несколько ячеек памяти, которые работают от отдельного, резервного питания.

Для тактирования часов RTC есть 2 генератора:

Все, как для генераторов основной системы синхронизации. Только низкие частоты.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

Прямоугольник Input frecuency станет синим.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

То коммутатор RTC Clock Mux станет активным и можно будет выбрать источник тактирования RTC-часов.

Что такое clk в микроконтроллерах. Смотреть фото Что такое clk в микроконтроллерах. Смотреть картинку Что такое clk в микроконтроллерах. Картинка про Что такое clk в микроконтроллерах. Фото Что такое clk в микроконтроллерах

На схеме еще показано, что низкочастотный RC-генератор LSI используется сторожевым таймером. Но для нас это чисто информационная ветка схемы.

Надеюсь, я ничего не забыл.

Как получить проект с выбранной конфигурацией я описывал в уроке 3.

Рассказывать, как задавать конфигурацию в программе, без конфигуратора STM32CubeMX, не имеет смысла. Получится очень большой объем ненужной информации.

Оперативное переключение системы тактирования необходимо только в приложениях критичных к энергопотреблению. Поговорим об этом, когда будем разрабатывать такие приложения.

В следующем уроке будем изучать порты ввода-вывода. Напишем первую осмысленную программу.

Источник

Наиболее частые ошибки программирования

В данной статье собраны основные ошибки, которые возникают при работе с 32-разрядными микроконтроллерами.

Задание тактирования

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

Программа работает с отладчиком, но не работает при подаче питания на МК

Это тот случай, когда тактирование в программе задано после настройки периферии. На примере настройки портов рассмотрим ход выполнения программы:

Так как тактирование портов не было включено на момент их инициализации, то настройка портов не была произведена.

При запуске программы в режиме отладки происходит следующая последовательность действий:

В данном случае порты ввода-вывода функционируют корректно, поскольку их инициализация происходила при уже включенном тактировании.

Переменные и флаги в прерываниях

Например, простейшая операция » i++; » происходит в несколько этапов:

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

В ядре Cortex M существуют операции для защищенного обращения к памяти LDREX и STREX. Информацию по их использованию можно найти, например, на официальном сайте Keil.

Вторым вариантом обращения к памяти может быть использование метода bit-band, который доступен для МК на базе Cortex M3/M4. Запись и стирание флагов в ячейках памяти происходит атомарными операциями типа чтение-модификация-запись.

Программирование Flash-памяти

Flash память МК может работать в двух режимах: в обычном режиме (доступ к памяти осуществляется через шины I Code и D Code) и в режиме программирования (доступ к памяти осуществляется через регистры контроллера Flash-памяти). В режиме программирования программный код должен выполняться из области системной шины (внешняя память) или ОЗУ. Выполнение программного кода из Flash-памяти в режиме программирования невозможно. При попытке доступа ядра к Flash-памяти, находящейся в режиме программирования, будет вызвано прерывание HardFault или BusFault в зависимости от настроек ядра (SCR регистры). Поэтому важно, чтобы при программировании Flash-памяти не возникало никаких прерываний, поскольку таблица векторов и обработчики прерываний по умолчанию расположены во Flash-памяти.

Чтобы запретить выбранное прерывание IRQn необходимо вызвать функцию NVIC_DisableIRQ(). При этом необходимо учитывать, что запрещение генерации запроса прерываний от системного таймера SysTick выполняется не в контроллере NVIC, а в регистре управления системным таймером.

Пример запрещения прерываний от системного таймера приведён в фрагменте кода 2.

Чтобы запретить сразу все прерывания, кроме HardFaut и NMI, необходимо выполнить специальную функцию, как показано в фрагменте кода 3.

После работы с Flash-памятью необходимо вернуть разрешение прерываний.

Пример расположения программного кода в памяти ОЗУ приведён в статье Расположение функций в ОЗУ, программирование EEPROM.

Выводы, совмещенные с JTAG и SWD

Иногда возникает необходимость использовать выводы, совмещенные с интерфейсом JTAG и SWD (далее для краткости используется обозначение JTAG, но подразумевается JTAG и SWD). При использовании функций библиотеки SPL выводы, совмещенные с JTAG B, перенастроить не получится, так как для них по умолчанию установлена защита. Например, функция PORT_Init() проверяет конфигурируемые выводы на принадлежность к JTAG B и не даёт их переназначать. Разрешение данной проверки определено в файле MDR32F9Qx_config.h с помощью макроопределения USE_JTAG_B, строка 80, как показано в фрагменте кода 4.

#if (defined(USE_MDR1986VE9x) || defined (USE_MDR1901VC1T))

/* #define USE_JTAG_A */
#define USE_JTAG_B

Запись в регистры порта, выводы которого совмещенные с JTAG и SWD

В качестве примера можно посмотреть реализацию функций PORT_SetBits() или PORT_ResetBits() библиотеки SPL.

Смена тактовой частоты

Для смены тактовой частоты на более высокую требуется совершить следующие операции:

При переходе на более низкую частоту, изменение значения Delay и SelectRI, LOW производят после смены частоты.

Таким образом, при смене тактовой частоты необходимо соблюдать следующие правила:

Пример инициализации тактирования в МК серии 1986ВЕ9х

В фрагменте кода 5 приведена функция CPU_Initialize(), инициализирующая тактирование в МК серии 1986ВЕ9х от умножителя частоты PLL с использованием генератора HSE, который работает на внешнем кварцевом резонаторе. Для работы функции CPU_Initialize() в проект необходимо подключить библиотечные файлы MDR32F9Qx_rst_clk.c, MDR32F9Qx_eeprom.c, MDR32F9Qx_power.c.

#include
#include
#include

// Инициализация системы тактирования микроконтроллера
void CPU_Initialize (void)
<
// Сброс настроек системы тактирования
RST_CLK_DeInit();

// Инициализация блока PLL
// Настройка источника и коэффициента умножения PLL
// CPU_C1_SEL = HSE_CLK, PLLCPUo = HSE_CLK * 10 = 8 МГц * 10 = 80 МГц
RST_CLK_CPU_PLLconfig (RST_CLK_CPU_PLLsrcHSEdiv1, RST_CLK_CPU_PLLmul10);
// Включение PLL
RST_CLK_CPU_PLLcmd (ENABLE);
if(RST_CLK_CPU_PLLstatus() == ERROR) <
while (1);
>
// Подключение PLL к системе тактирования
// (CPU_C2_SEL = PLLCPUo = 80 МГц)
RST_CLK_CPU_PLLuse (ENABLE);
// Настройка коэффициента деления блока CPU_C3_SEL
// (CPU_C3_SEL = CPU_C2)
RST_CLK_CPUclkPrescaler (RST_CLK_CPUclkDIV1);

// Настройка параметров регулятора напряжения SelectRI и LOW в контроллере BKP
// Тактовая частота 80 МГц
RST_CLK_PCLKcmd(RST_CLK_PCLK_BKP, ENABLE);
POWER_DUccMode(POWER_DUcc_upto_80MHz);

// Переключение тактовой частоты процессора на CPU_C3
// (HCLK = CPU_C3)
RST_CLK_CPUclkSelection (RST_CLK_CPUclkCPU_C3);
>

При использовании функции printf() отладка не доходит до main()

Это особенность компилятора Keil, заменяющего функционал printf() на инструкцию программной остановки BKPT для реализации механизма semihosting. При старте программы низкоуровневые библиотеки Си также выполняют инструкцию BKPT, что приводит к остановке исполнения программы. Чтобы Keil не реализовывал механизм semihosting необходимо выполнить один из указанных пунктов:

1) Исключить вызов printf() из проекта.

2) Описать функции, перенаправляющие стандартный поток ввода-вывода в требуемый интерфейс МК, например, как показано в статьях Printf через ITM и Printf через UART.

Переход по абсолютному адресу приводит к исключению HardFault

Иногда требуется перейти в функцию, расположенную по известному адресу в памяти. Если в коде это будет выражено так, как показано в фрагменте кода 6 или 7, то произойдёт вызов исключения HardFault:

// Адрес функции в памяти
#define BASE_ADDR_FUNC_IN_RAM 0x20005000

// Указатель на функцию в памяти по известному адресу
typedef void (*funcptr)();
funcptr funcInRAM = (funcptr) (BASE_ADDR_FUNC_IN_RAM);

LDR R0,=(0x20005000)
BX R0

Это происходит, потому что адрес перехода должен быть нечетным, чтобы указать ядру о переходе на инструкцию THUMB, а не ARM! Подробнее об этом описано на сайте ARM Info Center.

На самом деле при переходе в фрагментах кода 6 и 7 происходит исключение UsageFault, но данное исключение по сбросу запрещено, поэтому происходит вызов обработчика исключения HardFault. Разрешение исключений BusFault, MemManage fault и UsageFault выполняется в регистрах ядра SCB (System Control Block), как показано в фрагменте кода 8. О том, как работать с исключениями в Cortex-M3/M4 приведено в Application Note 209 от ARM.

#define SCB_SHCSR_USGFAULTENA (1 SHCSR |= SCB_SHCSR_USGFAULTENA;
SCB->SHCSR |= SCB_SHCSR_BUSFAULTENA;
SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA;

Таким образом, чтобы переход на заданный адрес произошел корректно, необходимо указывать в нулевом бите адреса перехода единицу, как показано в фрагментах кода 9 и 10.

// Адрес функции в памяти
#define BASE_ADDR_FUNC_IN_RAM 0x20005000

// Указатель на функцию в памяти по известному адресу
typedef void (*funcptr)();
funcptr funcInRAM = (funcptr) (BASE_ADDR_FUNC_IN_RAM + 1);

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *