AN2945. Руководство по безболезненному переходу между 8-32-битными линейками микроконтроллеров STM8S и STM32

AN2945. Руководство по безболезненному переходу между 8-32-битными линейками микроконтроллеров STM8S и STM32

Одновременно с выпуском на рынок весьма удачных микроконтроллеров STM32™, компания STMicroelectronics продолжает обновлять 8-битное семейство STM8. При этом значительные усилия тратятся на оптимизацию и унификацию портфолио микроконтроллеров в целом. В частности, чтобы упростить пользователям переход от микроконтроллеров одного семейства к микроконтроллерам другого и обратно, используются сходные периферийные блоки и программные инструменты.

Важным критерием при выборе новых микроконтроллеров являются затраты времени и денег на их освоение командой разработчиков. При этом большим преимуществом будет, если модельный ряд контроллеров окажется максимально богатым. Совместное портфолио 8-битного семейства STM8S и 32-битного STM32 предоставляет разработчикам доступ к моделям с числом выводов от 20 до 144, с объемом памяти от 2 до 512 кБайт. Если в процессе разработки окажется, что производительности STM8S не хватает, то можно с легкостью перейти на STM32. Если же требуется добиться минимальной стоимости, можно без проблем совершить переход от STM32 к STM8S.

Данная статья рассматривает общие черты STM8S и STM32, а также поясняет, почему так легко можно переходить от одного семейства к другому.

Ядро

Процессоры STM8™ строятся по запатентованной архитектуре, которая была создана на базе более раннего фирменного ядра ST7. При этом STM8 демонстрируют прорывные для 8-битных процессоров показатели производительности и плотности кода. Микроконтроллеры STM32 построены на 32-битном ядре ARM ® Cortex™-M3 и отличаются дополнительным преимуществом в виде законченной экосистемы, которая включает богатый набор средств разработки и отладки для процессоров ARM.

Может показаться, что процессорные ядра STM8 и ARM ® Cortex™-M3 радикально различаются, однако, на самом деле, у них есть много общих черт, которые обобщены в таблице 1.

Таблица 1. Сравнение ядер микроконтроллеров STM8 и Cortex-M3

Параметр

STM8

Cortex-M3

Производительность (Drhystone) млн. операций в с (0WS)

Разрядность шины данных

Средняя длина команд

Тип прерываний Задержки

векторный 9 циклов, с построением очереди прерываний

векторный 12 циклов, с построением очереди прерываний

Режимы пониженного потребления

Slow, Wait for Event, Wait for interrupts, Halt, Halt on exit

Slow, Sleep (Wait for event или Interrupt), Sleep on exit, Deep sleep

2-проводной или JTAG

Оба ядра построены по гарвардской архитектуре и используют трехступенчатый конвейер, что минимизирует время выполнения кода. Однако микроконтроллеры STM8S работают на частотах до 24 МГц, а STM32F1 на частотах до 72 МГц.

STM8S и STM32 разрабатывались с учетом необходимости достижения высокой энергоэфективности, для чего были созданы различные режимы пониженного потребления. Процессоры также характеризуются тем, что разрядность их шинных интерфейсов с памятью (32- и 64- бита, соответственно) превышает среднюю длину используемых команд. Это сокращает число циклов обращения к памяти, а также уменьшает потребление, связанное с переключениями транзисторов логических элементов и ячеек памяти. Очередь прерываний и режимы Halt/ Sleep также снижает число обращений к стеку.

В заключение хочется отметить высокую плотность размещения кода, которую демонстрирует 8-битный набор CISC команд STM8S и набор 16-битных инструкций Thumb-2, используемый в микроконтроллерах семейства STM32F1.

Даже это краткое сравнение показывает, что оба процессора являются образцовыми примерами реализации микроэлектронных архитектур. STM8 не уступает устаревшим сериям 16-битных процессоров. В это же время ядро Cortex-M3 отвечает всем требованиям тех приложений, которые сейчас используют 32-битные и производительные 16-битные микроконтроллеры. По этой причине комбинация STM8 и STM32 образует общую непрерывную унифицированную платформу, которая имеет поддержку в виде средств разработки, в том числе и от сторонних разработчиков.

Периферия

Периферийный блоки микроконтроллеров (IP-ядра) – это еще один пример взаимозаменяемости между моделями 8-битных и 32-битных линеек. Большинство IP-ядер периферийных модулей определены и реализованы таким образом, чтобы их можно было легко портировать из одного семейства в другое. В результате значительно упрощается переход от привычной 8-битной периферии в мир 32-битных возможностей. Это приводит к отличным ценовым показателям, высокой энергоэфективности, простоте освоения новых ресурсов, что на системном уровне дополняется увеличенной разрядностью шин и наличием контроллера прямого доступа к данным (DMA), который требуется для достижения повышенной производительности. Так как принцип работы периферийных блоков STM8S и STM32 одинаков, это позволяет максимально быстро переходить с одной платформы на другую.

Рис. 1. Упрощенная структурная схема периферийных блоков

Любой периферийный модуль может быть представлен в виде двух функциональных блоков. Первый блок – интеллектуальное ядро, которое содержит автомат состояний, счетчики, комбинационную логику, словом все то, что требуется для выполнения тех задач и функций, от которых необходимо освободить процессор. Это может быть: низкоуровневый обмен данными, работа с аналоговыми сигналами, задание и отсчет временных интервалов и т. д. Очень часто ядро периферийного модуля взаимодействует с внешним миром с помощью выводов микроконтроллера. Это могут быть как отдельные порты ввода-вывода, так и целые шинные интерфейсы.

Периферийный модуль, настраивается и управляется пользовательской программой с помощью регистров, которые подключаются к шинному интерфейсу микроконтроллера. В 8-битных системах процессор напрямую записывает и считывает значения регистров. В 32-битных контроллерах общение идет через специализированные шинные мосты. Таким образом, основное отличие между семействами 8-битных и 32-битных контроллеров заключается в организации шин. Это объясняет, почему STM8S и STM32 могут использовать одинаковые периферийные модули: они построены на одинаковых ядрах и отличаются только шинными интерфейсами. Процессоры Cortex-M3 и их периферийные блоки используют шинную архитектуру AMBA с 32-битной шиной данных, в то время как STM8S работают с менее эффективной 8-битной шиной. С функциональной точки зрения периферийные модули отличаются:

  • разрядностью регистров: 8 бит у STM8S, 16/32 бита у STM32;
  • максимальной рабочей частотой, которая зависит от частоты ядра;
  • наличием DMA, который позволяет разгрузить процессор и увеличить скорость при обмене данными;
  • некоторыми специфичными функциями, например, управлением портами ввода-вывода.

Рассмотрим реализацию блоков SPI в STM8S и STM32 (рис. 2). На первый взгляд они кажутся практически идентичными, за исключением некоторых различий, выделенных красным. Это, например, касается наличия функций DMA.

Рис. 2. Реализация блоков SPI в STM32 и STM8

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

Таблица 2. Набор регистров периферийного блока SPI в микроконтроллерах STM32

Таблица 3. Набор регистров периферийного блока SPI в микроконтроллерах STM8

В таблице 4 приведено соответствие периферийных блоков в STM32 и STM8, что еще больше подчеркивает совместимость микроконтроллеров даже на уровне регистров и битов.

Таблица 4. Общая периферия микроконтроллеров STM32 и STM8

Независимый сторожевой таймер (IWDG)

Оконный сторожевой таймер (WWDG)

Последовательный интерфейс SPI

Универсальный синхронный/асинхронный приемопередатчик (USART)

Таймеры с расширенным функционалом (Advanced-control timers)

16-битный таймер с расширенным функционалом

Таймеры общего назначения (General-purpose timer)

16-битный таймер общего назначения

Базовый 8-битный таймер

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

Заключение

Данное руководство разъясняет, почему возможен простой и безболезненный переход от 8-битных микроконтроллеров STM8S к 32-битным STM32 и обратно. Данные семейства образуют общую производительную платформу и имеют множество общих черт. На уровне периферийных блоков это выражается в использовании одинаковых периферийных ядер, таких как таймеры и коммуникационные интерфейсы и т. д. На системном уровне семейства также оказываются достаточно близкими, за исключением некоторых функциональных особенностей (системы тактирования и сброса, особенности безопасности и др.).

Все перечисленные общие черты дополняются набором схожих программных библиотек, которые позволяют быстро начать новую разработку. Библиотеки служат надежным основанием для унификации при написании общего аппаратно-независимого ПО как для 8-битных, так и для 32-битных микроконтроллеров.

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

📎📎📎📎📎📎📎📎📎📎