Микроконтроллеры
Тактовая частота микроконтроллера это количество тактов в секунду которые выполняет микроконтроллер. Получается чем больше тактовая частота МК тем большее количество операций он может выполнить за 1 секунду.
К примеру тактовая частота в 8 МГц означает что МК за 1 секунду выполнить 8000000 различных операций таких как сложение, вычитание, запись данных в регистры и чтение данных т.д. Такая частота кажется довольно большой но как показывает практика это далеко не так, к примеру частота тактирования современных процессора компьютера составляет уже от 2 ГГц, а некоторые модели уже имеют частоту в 4 ГГц.
Давайте в вкратце рассмотрим каждый из этих способов тактирования микроконтроллера. Выбор того или иного способа осуществляется путем выставления фьюз битов микроконтроллера.
Тактирование микроконтроллера от внутреннего RC генератора
При этом способе нам не нужно подключать какие либо внешние детали. Тактирование осуществляется от RC генератора который находится внутри и который может работать на частотах 1,2,4,8 МГц. А если вам требуется какая нибудь другая частота, то этот способ не подходит. Так же этот способ не подойдет если вам нужны точные интервалы времени, дело в том что задающая частота RC генератора плавает в зависимости от температуры.
Тактирование микроконтроллера от внешнего кварцевого резонатора

Этот способ несколько сложнее, для того чтобы его подключить нам нужно знать расположение выводов микроконтроллера и их название, далее находим выводы «XTAL1» и «XTAL2».

Схема подключения кварцевого резонатора к микроконтроллеру
Емкость конденсаторов должана быть в интервале от 15 до 22 пФ, один вывод подсоединятеся к резонатору а другой к земле.
Тактирование микроконтроллера от RC-цепочки
В представленной схеме тактирования конденсатор берется емкостью не менее 22 пФ, а резистор от 10 Ом до 100 кОм. Внешний RC генератор так же как и внутренний имеет нестабильную частоту которая «плавает » в зависимости от температуры. Но если в проектах не нужна стабильная частота то можно использовать эти два способа.
Частота тактирования рассчитывает по формуле
F-это частота в Герцах;
R- номинал сопротивления в Ом;
По дефолту все МК AVR (за исключением страх AT90S2313 и AT90S8535 и другие) настроены так чтобы испольщовать внутренний тактовый генератор. Получается как только мы подаем на него напряжение то МК сразу начинает работать.
За выбор источника тактирования отвечает биты CKSEL
выставляя биты нужным образом получаем нужный нам источник тактирования.
Как тактировать AVR
Введение
Прежде чем разбирать, какие бывают источники тактирования, чем они отличаются, их плюсы и минусы и тд, нам нужно определиться, что вообще означает словосочетание тактовая частота. Да и вообще, что означает термин «частота»?
Как нам говорит учебник физики, частота — это количество колебаний, произведенных за определенный промежуток времени. Чаще всего этот промежуток времени называют периодом и для удобства измерений его берут равным одной секунде.
Какие можно привести примеры подобных колебаний? Это могут быть часы с кукушкой, маятник, качели
и даже круги на воде от камушка, который мы кинули в воду:
Более подробно про частоту и период можно прочитать в статье Электрические сигналы и их виды.
Так, теперь ближе к делу. Что же такое тактовая частота?
Любая операция МК или его мегакрутого брата-микропроцессора состоит из отдельных элементарных действий, то есть тактов.
Получается, тактовая частота — это сколько тактов в секунду может выполнить наш МК или процессор. Отсюда напрашивается вывод, чем больше тактовая частота, тем больше количество операций за секунду может сделать МК или микропроцессор.
В МК AVR тактовая частота в основном измеряется в МегаГерцах. Как помните, приставка «Мега» означает один миллион. Если у нашего МК тактовая частота 8 МегаГерц, то это означает, что он может выполнять 8 000 000 тактов в секунду, или, грубо говоря, около 8 000 000 различных операций в секунду ;-). Пусть вас не пугает это число, потому что ваши настольные компьютеры, телефоны и планшеты уже работают на частоте в несколько ГигаГерц. Гига — это уже миллиард! Например, если частота процессора вашего компа 2 ГГц, это означает, что он может произвести 2 миллиарда операций в секунду). Мало? Как оказалось на практике, уже стает мало)).
Вернемся к нашим баранам), а именно, к тактовой частоте. Допустим, мы имеем МК Tiny 2313, сконфигурированный на работу 8 МегаГерц и который может выполнять при этом 8 миллионов тактов в секунду. Каждая операция процессора состоит из тактов. А когда процессор выполняет нашу программу, записанную во Flash память, он тоже производит определенные операции которые указаны в программе. Граничная частота МК Tiny 2313, как говорит нам Datasheet, довольно высокая и составляет аж целых 20 МГц! Это довольно много по меркам МК
Правда, это только с применением внешнего кварцевого резонатора.
Кварцевый резонатор, называемый часто просто кварц, может выглядеть по-разному:
На схемах он обозначается так:
На кварце часто указана частота, на которой он работает. Ниже на фото мы видим кварц, который работает на частоте 8 МегаГерц (8.000MHz)
В большинстве случаев стараются указывать частоту на корпусе кварца. Если у вас есть какое-либо ненужное цифровое устройство, вы вполне можете выпаять кварц на нужную частоту прямо оттуда. Но в большинстве случаев в этом нет необходимости, так как новый кварцевый резонатор в радиомагазине стоит порядка 20-30 рублей.
Есть один нюанс, любезно предоставленный нам производителями микроконтроллера. Если нам нужно, чтобы программа выполнялась медленнее в восемь раз, мы можем этого добиться даже не переписывая программу и не выставляя задержки по новой, то есть в 8 раз длиннее. Нам достаточно уменьшить частоту МК в восемь раз и программа будет для нас выполняться медленнее в восемь раз. Забегая вперед, скажу, что сделать это мы можем очень легко, выставив всего одну галочку при программировании фьюз-битов, в бите CKDIV 8. Также легко мы можем отменить все наши изменения.
Этот способ мы использовали при прошивке МК в прошлой статье.
Существуют 4 варианта, которые применяются для тактирования МК:
— тактирование от внутреннего RC-генератора
— тактирование от внешнего кварца
— тактирование от внешнего генератора
— тактирование от RC-цепочки
Тактирование от внутреннего RC-генератора
На тактирование от внутреннего RC генератора МК настроен сразу с завода и не требует внешних деталей. Это означает, что с помощью МК, питания +5 Вольт и одного светодиода с резистором, мы уже можем заставить наш МК работать и выполнять программу без всяких сложных настроек и дополнительных деталей, задав скорость программно, путем выставления задержки «Delay». Имейте ввиду, что встроенный RC-генератор может работать только на четырех частотах: 1, 2, 4 или 8 МегаГерц, поэтому если вам требуется какая-нибудь эксклюзивная частота, типа 1 638 000 Герц, то такой способ не прокатит.
Тактирование от внешнего кварца
Тактирование от внешнего кварца чуточку сложнее. Как же нам подключить внешний кварц? Для начала нам надо найти цоколевку МК, которую мы собираемся тактировать от внешнего кварца. Пусть в нашем примере это будет Тiny 2313. Чтобы подключить внешний кварц, достаточно найти ножки микросхемы с названием «XTAL1» и «XTAL2».
Потом подсоединить кварц вот по такой схеме:
Потом при прошивке надо правильно выставить фьюзы. О них мы с вами поговорим в следующих статьях.
Как видно на схеме подключения кварца к МК, номинал нужных нам конденсаторов должен составлять 15-22 пикофарада. Расшифровать номинал таких конденсаторов, можно с помощью этого рисунка:

Тактирование от внешнего генератора
К тактированию от внешнего генератора прибегают тогда, когда требуется синхронизовать МК с внешними цепями, либо этот МК тактируют какой-либо своей частотой от генератора частоты. Тактирующий сигнал подают на ножку XTAL1:
Тактирование от RC-цепи
Тактирование от RC-цепочки осуществляется вот по такой схеме:
Здесь мы берем конденсатор емкостью не менее 22 пФ, а резистор от 10 Ом и до 100 КилоОм. По простой формуле можно с легкостью рассчитать частоту, на которой будет тактироваться наш МК:

R — сопротивление резистора, Ом.
Внутренний RC-генератор и внешняя RC-цепь дают нестабильную частоту, которая «гуляет» и зависит от температуры. Для того чтобы помигать светодиодом и прочих неответственных действий, нам это будет не принципиально. В наших проектах, поначалу не требующих особой точности, мы будем использовать тактирование от внутреннего RC-генератора.
Но чтобы получить очень точную частоту тактирования, которая почти не гуляет, надо использовать кварц. Тактирование от кварца важно при создании точных измерительных приборов, электронных часов, устройств сложной и точной автоматики, да и вообще любых устройств, где важна точность и не допустимы малейшие отклонения.
Итак, как мы помним из предыдущей статьи, некоторые ножки имеют двойное назначение, и помимо того, что могут использоваться как порты ввода-вывода, также используются для обеспечения расширения функций МК. Действительно, если МК сконфигурирован для работы от внутреннего RC-генератора, вам достаточно подать на него питание +5 Вольт и землю, и микроконтроллер включится и начнет выполнять программу. Но если вы выпаяли микроконтроллер из какого-либо устройства и он должен был в нем тактироваться от кварца, или по ошибке выставляя биты конфигурации, вы выставили тактирование от кварца, МК перестанет у вас быть виден в программе оболочке, и не сможет выполнять программу, даже если вы подадите на него +5 Вольт и землю.
Что же делать в таком случае? В первую очередь не паниковать) и собрать схему с тактированием от кварца, и тогда мы сделаем видимым наш МК, который вдруг может быть переставать у вас определяться оболочкой программатора и работать в схеме, если вы ошибочно переведете МК в режим тактирования от кварца, путем выставления определенных фьюзов. Об этом мы как-нибудь еще поговорим 😉
Тактирование микроконтроллеров Atmel SAMD20/21
Немного теории
Как устроен код в ASF
Не будем вдаваться в подробности всей библиотеки, об этом можно прочитать в статье про ASF. Рассмотрим лишь то, что касается тактирования. При создании проекта в Atmel Studio создается файл main.c, который уже содержит system_init().
Прототип этой функции расположен в файле src/asf/sam0/system/system.c:
Нас интересует system_clock_init(), который, в свою очередь, определен в clock.c.
Вообще код этой функции сделан полностью на дефайнах из asf/config/conf_clocks.h. Поэтому сильно можно не разбираться, скорее просто ради интереса посмотреть.
А вот вся настройка происходит в conf_clocks.h в соответствии с планом, приведенным выше.
Практика
Рассмотрим все на примере. Предположим, у нас есть плата с МК SAM20/21, который тактируется от внешнего кварца 7,3728 МГц, а системную тактовую мы хотим получить 48 МГц.
Мы должны все настроить так, как показано оранжевыми стрелками на рисунке ниже:
Т.е. базовый генератор 1 должен на входе иметь тактовый сигнал от внешнего кварца, который должен быть поделен до приемлемой для DFLL частоты (от 0,7 до 35 кГц). Должен быть разрешен DFLL, выбран соответствующий опорный сигнал для него и коэффициент умножения, чтобы получить на выходе что-то близкое к 48 МГц. Выход DFLL должен быть заведен на базовый генератор 0.
Расчет коэффициентов деления и умножения.
Для того, чтобы получить приемлемый опорный тактовый сигнал для DFLL, сигнал с внешнего осциллятора нужно сильно поделить:
7,3728МГц/256=28,8 кГц
А коэффициент умножения для DFLL определяется исходя из входной (опорной частоты) и желаемой частоты на выходе:
28,8*1666=47,980800 МГц
Теперь рассмотрим, как это сделать в conf_clocks.h.
Разрешаем тактирование от внешнего источника и указываем его параметры:
Разрешаем работу DFLL:
Настраиваем DFFL (источник опорной частоты и коэффициент умножения):
Настраиваем генераторы 0 и 1 (разрешаем работы, выбираем опорную частоту):
ОБОРУДОВАНИЕ
ТЕХНОЛОГИИ
РАЗРАБОТКИ
Блог технической поддержки моих разработок
Урок 5. Система тактирования STM32.
В уроке изучим систему тактирования микроконтроллера.
Микроконтроллер – это синхронный автомат, работающий от единого источника тактовых импульсов. Пока мы не настроим тактирование всех его узлов, программа правильно работать не будет.
В уроке 3 мы научились пользоваться программой STM32CubeMX. Конфигурацию системы тактирования производили с помощью интерактивной схемы. Эта схема адекватно, в подробностях отображает реальную функциональную схему системы тактирования микроконтроллера. Так давайте и изучать ее с помощью STM32CubeMX, тем более, что мы собираемся использовать эту программу в каждом проекте.
Последовательность действий нам уже известна.
Перед нами интерактивная схема системы тактирования микроконтроллера.
Схема легко позволяет формировать сигналы тактирования разных частот. Переключаешь коммутаторы, выбираешь коэффициенты деления и умножения, смотришь частоты выходных сигналов. Если надо, корректируешь.
Все просто. Гораздо важнее понять, что надо сформировать, для чего и из чего.
Что значит конфигурировать систему тактирования? Чего мы хотим добиться?
Справа схемы есть 8 прямоугольников. Это источники тактирования узлов микроконтроллера. Мы должны установить, выбрать для них синхроимпульсы с определенной частотой.
Конечно, для этого необходимо знать, как работают сами узлы. Например, надо понимать, как работает таймер, чтобы выбрать для него нужную частоту синхроимпульсов. На данном этапе я дам только общие пояснения узлов микроконтроллера, которые используют систему тактирования. А вот саму систему синхронизации разберем подробно.
Большая часть узлов микроконтроллера тактируются от сигналов, полученных из промежуточной частоты – прямоугольник HCLK. Левая от него часть схемы формирует саму частоту HCLK, а правая – раздает ее по узлам, периферийным устройствам.
У других микроконтроллеров семейства STM32 устройств на шине APB1 может быть больше.
Для тактирования шины APB1 используется сигнал HCLK с предделителем на несколько значений.
Частота не должна превышать 36 мГц.
Теперь давайте разберемся, как формировать сигнал промежуточной частоты HCLK. Начнем с противоположного, левого края схемы.
Исходными источникоми тактирования процессорного ядра и периферийных устройств микроконтроллера STM32 могут быть:
На схеме HSI-генератор изображен внутри микроконтроллера.
Это внутренний RC-генератор на 8 мГц. Сигнал с него подается на коммутатор HSI/HSE через делитель на 2. Поэтому от этого генератора можно сформировать сигнал HCLK с частотой до 36 мГц.
Входы подключения внешнего кварцевого резонатора – это самое ”узкое место” для любого микроконтроллера с точки зрения помехозащищенности, влагостойкости, критичности сопротивления изоляции и т.п. Кварцевые генераторы часто не запускаются на морозе, не работают при высокой влажности. Прикоснитесь руками к выводам кварцевого резонатора не вскрытой лаком платы, и он тут же перестанет работать. Поэтому очень удобно иметь генератор внутри микросхемы.
Для повышения точности можно через специальный регистр незначительно изменять частоту HSI-генератора, т.е. производить программную калибровку.
После этого на схеме он становится синим, и мы можем задать для него частоту. На нашей плате установлен кварцевый резонатор на 8 мГц, поэтому оставим 8.
В том же поле можно выбрать в качестве исходной частоты тактирования внешний сигнал.
В этом режиме входная частота может быть в пределах 1-25 мГц.
На пути преобразования сигналов HSI и HSE-генераторов в промежуточный синхросигнал HCLK расположены коммутаторы PLL Source Mux и System Clock Mux, делители и один умножитель.
Думаю, не составит труда разобраться, как выбрать нужную частоту сигнала HCLK.
Скорее всего, непонятен прямоугольник CSS, который можно включать и выключать.
На схеме прямоугольник управляет коммутатором System Clock Mux.
Это система Clock Security System – контроль работы внешнего высокочастотного генератора HSE. При включенной системе CSS контролируется работа HSE-генератора. Если генератор перестает работать, то:
При использовании интерфейса USB есть небогатый выбор значений предделителя частоты для его тактирования.
Стандартная частота для работы USB – 48 мГц. При любой другой, прямоугольник to USB краснеет.
Прямоугольник FLITFCLK показывает, что для тактирования операций программирования FLASH-памяти микроконтроллера всегда используется внутренний RC-генератор HSI.
Но это вполне логично, да и повлиять на эту связь мы никак не можем.
Внизу схемы есть еще один коммутатор, который позволяет вывести сигнал тактирования на вывод микроконтроллера MCO (Microcontroller clock output). Сигнал может быть использован для синхронизации аппаратных узлов, подключенных к микроконтроллеру.
После этого коммутатор MCO source Mux становится активным и можно выбрать один из источников сигнала:
Остался левый верхний угол схемы. Это управление тактированием часами реального времени (RTC). Часы представляют собой 32 разрядный счетчик и несколько ячеек памяти, которые работают от отдельного, резервного питания.
Для тактирования часов RTC есть 2 генератора:
Все, как для генераторов основной системы синхронизации. Только низкие частоты.
Прямоугольник Input frecuency станет синим.
То коммутатор RTC Clock Mux станет активным и можно будет выбрать источник тактирования RTC-часов.
На схеме еще показано, что низкочастотный RC-генератор LSI используется сторожевым таймером. Но для нас это чисто информационная ветка схемы.
Надеюсь, я ничего не забыл.
Как получить проект с выбранной конфигурацией я описывал в уроке 3.
Рассказывать, как задавать конфигурацию в программе, без конфигуратора STM32CubeMX, не имеет смысла. Получится очень большой объем ненужной информации.
Оперативное переключение системы тактирования необходимо только в приложениях критичных к энергопотреблению. Поговорим об этом, когда будем разрабатывать такие приложения.
В следующем уроке будем изучать порты ввода-вывода. Напишем первую осмысленную программу.
Микроконтроллер под микроскопом
Наверняка вы уже знаете, как устроен компьютер. Даже на бытовом уровне вы представляете, что такое память RAM и ROM. Также знаете, что информация в компьютере представляется в двоичной форме. Однако этих знаний нам недостаточно для того, чтобы начать работать с микроконтроллером.
Помимо уже упомянутых видов памяти и непосредственно самого процессорного ядра в микроконтроллер входит регулятор напряжения, генератор тактового сигнала, системная шина, различные контроллеры, блок системы прерываний, периферийные устройства и т.д.
Однако, первое, с чем нам придется ознакомиться – с особым видом памяти под названием «регистр».
Что такое регистр?
Регистр (англ. register) – это устройство, расположенное внутри ядра микроконтроллера (или процессора), для хранения n-разрядных двоичных данных и выполнения преобразований над ними. Скорость их работы очень высока. Регистр представляет собой упорядоченный набор триггеров, или переключателей (англ. trigger), способных принимать значение «0» (потенциал равен 0 вольт) или «1» (потенциал равен рабочему напряжению для внутренностей МК, в нашем случае это 1,8 вольта). Число триггеров n соответствует числу разрядов в слове. В свою очередь, машинное слово — платформозависимая величина, измеряемая в битах (или байтах) и равная разрядности регистров процессора и/или разрядности шины данных. Так, например, наш микроконтроллер является 32-разрядным, а это значит, что слово состоит из 32 бит (или из 4 байт). Специальные регистры — это часть RAM-памяти. Их функции определены производителем и не могут быть изменены. Все биты (триггеры) такого регистра подсоединены к определенным цепям внутри микроконтроллера, т. е. изменение состояния триггера напрямую влияет на работу микроконтроллера (отдельных его частей/цепей). Например, записав «0» в ячейку памяти регистра, отвечающего за порт ввода/вывода, вы определяете его функцию: будет он работать на вход (т. е. принимать сигналы) или на выход (т. е. посылать сигналы).
Так как мы будем использовать язык программирования Си, то будет правильно напомнить некоторые операции, которые позволят нам быстро и удобно настраивать необходимые биты в регистре. Первое, что стоит вспомнить – это операции побитового смещения. Допустим, нам нужно получить число 8. Мы уже знаем что 810 равно 10002. Таким образом, чтобы получить 8, нам всего-то нужно передвинуть в памяти «1» на три позиции влево. Сделать это можно так:
Бит, который хотим изменить, мы будем называть маской. Маска позволит нам обращаться к нужному биту регистра непосредственно.
Однако нам также потребуются побитовые логические операции «И», «ИЛИ» и «НЕ». Для того, чтобы записать «1» в нужный бит регистра, мы можем побитово воздействовать на регистр маской, применяя операцию «ИЛИ». Вспомним таблицу истинности:
| A | B | A | B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Как видно, если в бите регистра была «1», то мы не затрем её своей маской и изменим только интересующий нас бит. Сделать это можно так:
Для того чтобы записать «0» в необходимый бит, нам потребуется операция «И», таблица истинности которой изображена ниже:
| A | B | A & ¬B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Как видно, мы сотрем все биты, где не содержится «1». Перед тем как мы применим эту операцию, нужно инвертировать маску (т. е. применить операцию «НЕ»):
Теперь применим операцию «И» к регистру, используя модифицированную маску:
Короткая запись выглядит так:
Теперь мы готовы работать с регистрами, но перед этим пару слов о других важных частях микроконтроллера.
Что такое порты ввода-вывода?
Пожалуй, основное, что делает микроконтроллер таким интересным — это порты ввода-вывода (англ. general-purpose input/output). Почему они так называются? Всё очень просто — они либо принимают, либо отправляют сигнал.
Порт – это не просто одна ножка микроконтроллера: в нашем случае на одном порте располагаются до 16 ножек (нумерация идет с 0 и до 15). В свою очередь, порты маркируются буквами — A, B, C и т. д. Например, светодиод может быть подключён к ножке PD8 (порт D, ножка 8).
Режимов работы у ножки может быть несколько, и настраиваются они посредством соответствующих регистров. Как найти эти регистры, как они называются и что с ними нужно сделать, чтобы включить тот или иной режим, мы поговорим когда приступим к программированию, а сейчас рассмотрим эти самые режимы. Ниже приведена схема устройства одной ножки нашего МК.
Изображение из Reference Manual, Figure 13. Basic structure of a standard I/O port bit
Первый отличительный признак, который можно заметить (да и просто вывести из названия), это то, что ножка может работать как вход и выход. Выход имеет четыре режима работы:
В свою очередь, у входа имеются разные режимы работы:
Чтобы воспользоваться GPIO, нужно еще включить тактирование порта. а для этого нужно понимать, что такое тактирование!
Что такое система тактирования?
Что же является сердцем микроконтроллера, что заставляет его работать? Выбирая компьютер в магазине, вы наверняка обращали внимание на такой показатель, как «тактовая частота».
Тактовый сигнал или синхросигнал — сигнал, использующийся для согласования операций одной или более цифровых схем. Синхросигнал обычно имеет форму меандра (прим. — прямоугольник) и колеблется между высоким и низким логическими уровнями. // Wikipedia
В первом приближении частота характеризует производительность (память, ядро и т.д.), и коррелирует с количеством операций в секунду. Однако, системы с одинаковой частотой могут иметь различную производительность: выполнение одной и той же операции может занимать разное количество тактов, это зависит от архитектуры и инструкций, реализованных в ядре.
Работа всех подсистем микроконтроллера (блоков периферии) зависит от того, получают они тактовые сигналы или нет. Нет тактового сигнала — периферия не работает. При этом некоторые блоки не могут работать на той же частоте, что и ядро. Все эти тонкости описываются в документации.
По умолчанию тактирование любой периферии в STM32 отключено, и необходимо включать её вручную. Для этого используется модуль RCC (англ. Reset and Clock Control), о ктором будет рассказано в другом разделе.
Источником тактового синхросигнала служит генератор тактовых импульсов. Он может быть реализован разными способами, с использованием разных физических эффектов.
Ниже приведена схема тактирования микроконтроллера stm32f103c8, поясняющая, как происходит тактирование.
Изображение из Reference Manual, Figure 8. Clock tree
Большая часть системы тактируется от линии SYSCLK (англ. System Clock), за исключением блоков USB, RTC и т.д. Источником сигнала для неё могут выступать три источника HSI, HSE и PLL.
При работе внешний резонатор может перестать работать. Причины могут быть разными 2 : сбои в питании, температурный режим, плохая разводка, наводки или его может оторвать в ходе эксплуатации (почему нет?). Для этих случаев предусмотрен блок аварийного переключения CSS (англ. Clock Security System): он способен автоматически переключить систему на внутренний источник (PLL, если он использовался, будет остановлен). Рассматривать мы его не будем.
Максимальная частота stm2f103c8 72 МГц, однако она не достижима при работе от внутреннего генератора (4 МГц
В STM32 один из выводов, его называют MCO (англ. Master Clock Output) можно использовать для вывода тактового сигнала от шины SYSCLK или источников HSI, HSE и PLL (делённое на 2). На плате данный вывод выведен в виде медного пяточка; если у вас есть осциллограф или логический анализатор, то вы можете сконфигурировать данную ножку и посмотреть сигнал на выходе.
Для сторожевого таймера и часов реального времени (англ. Real Time Clock, RTC) предусмотрен низкочастотный внутренний RC-генератор LSI. RTC так же может работать от HSE (частота делится на 128) или собственного внешнего источника LSE.
В устройстве SYSCLK будет брать сигнал от PLL (HSI), а часы реального времени от LSE.
Архитектура ARM
Перед нами не стоит цели дать исчерпывающее описание ядра, напротив, наша цель — дать поверхностное представление, чтобы можно было начать что-то делать. Подробнее с архитектурой ядра можно ознакомиться в специальных изданиях или в документации.
В состав Cortex входит не только ядро, но и различные компоненты управления и отладки, которые соединены между собой шинами AHB и APB. Еще два компонента, которые нам потребуются в дальнейшем, это:
Изображение из Reference Manual, Figure 1. Low and medium density value line system architecture)
Устройство памяти
Любое устройство воспринимается микроконтроллером как модуль памяти, хотя физически таковым может и не являться. Память программы, оперативная память, регистры устройства ввода\вывода – все они находятся в едином «адресном пространстве».
Как уже говорилось, Cortex-M3 является стандартизованным ядром, а значит, структура его адресного пространства закреплена стандартом. Оно имеет размер 2 32 = 4 гигабайта. Первый гигабайт памяти распределен между областью кода и статического ОЗУ. Следующие полгигабайта памяти отведены для встроенных устройств ввода-вывода. Следующие два гигабайта отведены для внешнего статического ОЗУ и внешних устройств ввода-вывода. Последние полгигабайта зарезервированы для системных ресурсов процессора Cortex. Диаграмму карты памяти можно найти в документации.
Вот, пожалуй, и всё, что требуется сейчас знать о микроконтроллере, чтобы начать его программировать. Однако. перед этим немного о стандартных библиотеках.
































