Stm32 nucleo board xnucleo f302r8 arm cortex m4 development kit compatible nucleo f302r8 st link v2

STM 32 F1 более подробно

Микроконтроллеры STM32 F1xx основаны на ядре ARM Cortex-M3. Cortex-M3 также является основой для микроконтроллеров ряда других производителей, включая TI, NXP, Toshiba и Atmel. Совместное использование общего ядра означает, что инструменты разработки программного обеспечения, включая компилятор и отладчик, являются общими для широкого спектра микроконтроллеров. Cortex-M3 отличается от процессоров ARM предыдущих поколений тем, что определяет ряд ключевых периферийных устройств как часть базовой архитектуры, включая контроллер прерываний, системный таймер и оборудование для отладки и трассировки (включая внешние интерфейсы). Этот дополнительный уровень интеграции означает, что системное программное обеспечение, такое как операционные системы реального времени, и инструменты разработки оборудования, такие как интерфейсы отладчика, могут быть общими для всего семейства процессоров. Различные семейства микроконтроллеров на базе Cortex-M3 значительно различаются по аппаратным периферийным устройствам и памяти — периферийные устройства семейства STM32 полностью отличаются по архитектуре от периферийных устройств семейства NXP, даже если они имеют схожую функциональность. В этой главе мы познакомим вас с ключевыми аспектами ядра Cortex-M3 и микроконтроллеров STM32 F1xx. Блок-схема процессора STM32F100, используемого на плате обнаружения линий ценности, показана на рис. 2.1. Процессор Cortex-M3 показан в верхнем левом углу. Компоненты линейки значений имеют максимальную частоту 24 МГц — другие процессоры STM32 могут поддерживать тактовую частоту 72 МГц. Основная часть рисунка иллюстрирует периферийные устройства и их взаимосвязь. Процессор обнаружения имеет 8 КБ SRAM и 128 КБ флэш-памяти. Существует две периферийные коммуникационные шины — APB2 и APB1, поддерживающие широкий спектр периферийных устройств.

Архитектура STM32 F100 ре

 

Архитектура ядра Cortex-M3 состоит из 3 с небольшим набором ключевых периферийных устройств – в виде скрытая версия

конкретное оборудование проходит через три шины памяти — ICode, DCode и System.

– которые определены для доступа к различным областям памяти.

STM32, показанный  соединяет три шины, определенные Cortex-M3, через матрицу шин на уровне микроконтроллера. В STM32 шина ICode соединяет интерфейс инструкций CM3 с флэш-памятью, шина DCode подключается к флэш-

памяти для выборки данных, а системная шина обеспечивает доступ для чтения/ записи к SRAM и периферийным устройствам STM32. Периферийная подсистема поддерживается шиной AHB, которая далее делится на две области подшины AHB1 и

AHB2. STM32 предоставляет сложный контроллер прямого доступа к памяти (DMA), который поддерживает прямую передачу данных между периферийными устройствами и памятью.

Упрощенная архитектура ядра Cortex-M3

 

 

 

 

 

 

 

 

 

 

 

 

 

Кортекс-М3

Процессор CM3 реализует набор инструкций Thumb-2, который предоставляет

большой набор 16-битных инструкций, позволяющих выполнять 2 инструкции на выборку

из памяти, а также небольшой набор 32-битных инструкций для поддержки более сложных

операций. Конкретные детали этого набора инструкций в значительной степени не имеют

отношения к этой книге, так как мы будем выполнять все наши программы на C. Однако

есть несколько ключевых идей, которые мы обсудим ниже.

Как и все процессоры RISC, Cortex-M3 представляет собой архитектуру загрузки/сохранения с

тремя основными типами.

pes of instructio ns – операции между регистрами для быстрого перемещения данных между памятью и включения управления языком программирования.

 

КОРТЭКС-М3

внутренний счетчик

int counterInc (пусто) {

вернуть счетчик++;

}

Результирующий (аннотированный) язык ассемблера с соответствующим машинным кодом выглядит следующим образом:

Две 32-битные инструкции (movw, movt) используются для загрузки нижней/верхней половин адреса прилавок (известны во время компоновки и, следовательно, 0 в листинге кода). Затем три 16-битных инструкции загружают (ldr) значение счетчика, увеличивают (добавляют) значение и записывают обратно (str) обновленное значение. Наконец, процедура возвращает исходный счетчик. Не ожидается, что читатель этой книги поймет набор инструкций Cortex-M3 или даже этот пример в мельчайших деталях.

Ключевым моментом является то, что Cortex-M3 использует смесь 32-битных и 16-битных инструкций (в основном последние) и что ядро взаимодействует с памятью исключительно посредством инструкций загрузки и сохранения. Хотя существуют инструкции, которые загружают/сохраняют группы регистров (в нескольких циклах), нет инструкций, которые непосредственно работают с ячейками памяти.

Ядро Cortex-M3 имеет 16 видимых пользователю регистров (показаны на рис. 2.4) — вся обработка происходит в этих регистрах. Три из этих регистров имеют специальные функции, включая программный счетчик (PC), который содержит адрес следующей инструкции для выполнения, регистр связи (LR), который содержит адрес, с которого была вызвана текущая процедура, и  стек . указатель (SP), который содержит адрес текущей вершины стека (как мы обсудим в главе 11, CM3 поддерживает несколько режимов выполнения, каждый из которых имеет собственный частный указатель стека). Отдельно проиллюстрирован регистр состояния процессора (PSR), к которому неявно обращаются многие инструкции.

Cortex-M3, как и другие процессоры ARM, был разработан для программирования (почти) полностью на языке более высокого уровня, таком как C. Одним из следствий этого является хорошо разработанный  стандарт вызова процедур  (часто называемый ABI или ABI).

Набор регистров процессора

 

двоичный интерфейс приложения), который определяет, как используются регистры. [2] В этой модели явным образом предполагается, что оперативная память исполняемой программы разделена на три области, как показано на рис. 2.5. Данные в ОЗУ выделяются в процессе связывания и инициализируются кодом запуска при сбросе (см. главу 3). (Необязательная) куча управляется во время выполнения библиотечным кодом, реализующим такие функции, как маллок и бесплатно которые являются частью стандартной библиотеки C. Стек управляется во время выполнения сгенерированным компилятором кодом, который генерирует кадры стека для каждого вызова процедуры, содержащие локальные переменные и сохраненные регистры. Cortex-M3 имеет  физическое  адресное пространство 232 байт. Техническое справочное руководство ARM Cortex-M3 определяет, как должно использоваться это адресное пространство. [1] Это (частично) показано на рис. 2.6. Как уже упоминалось, доступ к области  Код  осуществляется через шины ICode (инструкции) и DCode (постоянные данные). Доступ к SRAM и периферийным областям осуществляется через системную шину. Физическое население этих регионов зависит от реализации. Например, процессоры STM32 имеют флэш-память объемом 8–1 МБ по адресу (0x08000000).1 Процессор STM32F100 на плате Discovery имеет 8 КБ SRAM по адресу 0x20000000. На этой карте адресов не показаны внутренние периферийные устройства Cortex-M3, такие как NVIC, расположенные начиная с

КОРТЭКС-М3

Модель памяти программы

адрес 0xE000E000; они определены в справочном руководстве Cortex-M3.

[1] Мы обсудим NVIC далее

Оставьте комментарий

Ваш адрес email не будет опубликован.

Exit mobile version