stm32 для чего нужен
STM32 — это очень просто
В последнее время на хабре появилось много статей по STM32 (здесь). В комментариях неоднократно упоминается сложность STM32 по сравнению с AVR. Эта тема особенно влияет на новичков, которые хотят начать изучение микроконтроллеров, и, видя такое мнение, выбирают для изучения AVR. Давайте разберемся, так ли сложен этот зверь — STM32?
Для этого выберем недорогой вариант платы и напишем прошивку в десяток-другой байт (да-да, мигание светодиодом в 2 килобайта сродни «Hello world» в сотни килобайт x86 для неумех). Также научимся писать программы на любом языке программирования для STM32.
Вступление
Какой тип микроконтроллеров изучать? Этот вопрос, по-моему, аналогичен вопросам типа «Какой язык программирования изучать?», «Какой иностранный язык учить?». ИМХО, изучать нужно тот, который нужнее в данную минуту, для данной задачи. Когда знаешь что-то одно, изучение второго дастся намного легче, а на счет третьего и не задумаешься.
Итак, в чем же сложность STM32? Наиболее часто звучит мнение о сложности программирования его периферии. Количество и тип периферии STM32 и AVR примерно одинаков. Конфигурирование ее также не сильно отличается. Так в чем же сложность? В микроконтроллерах STM32 всю периферию нужно предварительно включать. Вот и вся сложность.
Я сравниваю AVR с общественными зданиями: все двери нараспашку, везде мониторы сверкают рекламой и свет горит, а STM32 с личным домом: хочешь телевизор посмотреть — включи сначала, потом переключай каналы, захотел пи-пи — открой дверь и включи там свет, руки помыть — открой воду, и так далее. Не верите? Убедимся вместе.
Обзор платы
Дешевле только купить все детали, сделать самому плату и спаять. Чем шить и отлаживать? Если есть ST-LINK, то лучше им, нет — не беда, есть еще несколько вариантов, например через USB-USART переходник, нет и его — можно напрямую через USB, правда нужно самому написать драйвер для такого случая, никто пока не озаботился. ST-LINK достаточно дешев, да и входит во все платы серии DISCOVERY. Вот и я воспользовался таким.
Подключаем питание, светодиод весело мигает, плата исправна. Скачиваем и устанавливаем программу-программатор (масло-масляное) «STM32 ST-LINK Utility» (все программы и документы берем на сайте производителя). Пытаемся считать прошивку… Программа защищена от чтения. Видимо, недаром все говорят о сложности написания программ для STM32, даже китайцы защитили эту сверхсложную программу от взлома. Или там спрятана закладка-вирус? Разбираться не будем, снимаем защиту и получаем девственно чистый микроконтроллер STM32F103C8T6.
Первая программа
Давайте тоже помигаем светодиодом, сделаем, так сказать, реверс-инжиниринг в уме родной прошивки. Чем? Чтобы не городить споры по выбору среды разработки, я это сделаю в родной Visual Studio Community. Мне кажется, для Windows лучше для мужчины нет.
Как там программа мигания для ардуины? Конфигурируем ножку на выход и в цикле переключаем ее с нуля на единицу и обратно.
А как будет выглядеть она же для STM32? Намного сложнее. Сначала включим свет в комнате конфигурации ножек микроконтроллера, а затем «Конфигурируем ножку на выход и в цикле переключаем ее с нуля на единицу и обратно». Я понимаю, сложно… Но мы справимся.
В документе «RM0008. Reference Manual» на наш микроконтроллер посмотрим карту памяти для нужных нам регистров.
— Пойдем простым и логическим ходом.
— Пойдем вместе.
1. Включим тактирование порта C (наш светодиод висит на ножке 13 порта C). Смотрим документ. Нужный нам регистр RCC_ABP2ENR (переводим: регистр сброса и тактирования — вторая низкоскоростная шина периферии). Адрес порта — 0x40021018, нужный бит IOPCEN (порт ввода-вывода C — бит разрешения) четвертый — 0x00000010.
2. Сконфигурируем ножку на вывод. Смотрим документ. Нужный нам регистр GPIOC_CRH (переводим: регистр порта ввода-вывода C — конфигурационный регистр для старшей половины ножек). Адрес порта — 0x40011004, за конфигурацию каждой ножки отвечают 4 бита, значение для переключения ножки на выход — 0001b, для ножки 13 значение — 0x00100000.
3. Как переключить логическое значение на ножке. Смотрим документ. Нужный нам регистр GPIOC_ODR (переводим: регистр порта ввода-вывода C — регистр вывода данных). Адрес порта — 0x4001100С, его значение напрямую выводится в ножки микроконтроллера, для ножки 13 значение — 0x00002000. Все готово для написания программы (не забыть выложить проект на github):
С векторами прерываний, надеюсь все понятно? Мы используем только два из них, поэтому незачем занимать память пустышками. Все остальные прерывания включаются программно, не включали — значит они никогда не сработают. Исключение — третий вектор HardFault, если случилось — микроконтроллер неисправен или сбоит, для простых проектов (не космос-авиация, не медицина) можно не обрабатывать.
Это учебный проект, конечно следует оформить все адреса как символические константы в отдельный h-файл с большим количеством дефайнов, как это сделано в CMSIS. Можно взять их и приспособить для своих нужд. Для компиляции использую gcc, прошивка с помощью «STM32 ST-LINK Utility». Прошивка заняла 56 байт (привет, ассемблер).
Еще одно утверждение о сложности STM32 — мало документации на русском языке. Спорно. Необходимы только два документа — Datasheet и Reference Manual на нужный микроконтроллер. Язык на котором он написан сложно назвать английским. Я изучал язык по непереведенным игрушкам, уровень английского остался на том же уровне, но даташиты я читаю без проблем, незнакомые термины понятны из контекста.
Вроде много получилось, тогда на сегодня все.
Очередная статья: STM32 для начинающих
Это моя первая статья на Хабре, поэтому прошу не кидаться тяжелыми предметами. Заранее спасибо.
Начнем с предыстории. Когда-то мне пришлось перейти на микроконтроллеры ARM фирмы ST. Это было связано с тем, что PIC и AVR уже не хватало и хотелось новых приключений. Из доступного в хлебобулочных магазинах и большого количества статей о «быстром старте» выбор пал именно на STM32F100.
Я привык работать в IAR. Да, есть другие IDE, но мне хватает возможности IAR: относительно удобный редактор, не плохой отладчик и достаточно удобно работать с регистрами во время отладки.
Когда я попытался сделать первый проект меня ждало разочарование — CMSIS! Кому как, но для меня это было (и остается) ужасом: много буков, длинные и для меня не понятные структуры. Вникать во все это было не интересно. Попытался скомпилировать пару примеров и понял — это не наш метод.
Неужели нет других вариантов? Есть. Тот, встроенный в IAR: iostm32f10xx4.h и подобные инклудники. Вполне не плохо:
Оставалось это запихнуть в классы и пользоваться. Так и сделал. Через какое-то время потребовалось сделать код для STM32f4xx. И тут снова засада — нет инклудиков. Что делать? — писать самому. Проанализировал имеющиеся самописные библиотеки решил немного сделать по другому. Вот об этом и будет рассказ.
Начало
Про установку IAR и драйверов для отладчика рассказывать не буду, т.к. здесь ничего нового. У меня стоит IAR 8 с ограниченем кода в 32кБ. Для работы выбран контроллер STM32F103, установленный на плате plue pill.
Запускаем IAR, создаем проект c++, выбираем нужный контроллер
Следующий шаг — изучение документации. Нас будет интересовать Reference manual RM0008. Там главное внимательно читать.
Вообще, когда я обучал своих работников программированию контроллеров, я давал задание — включить светодиод (подключенный к ножке контроллера), использую дебагер, редактирую регистры и читая документацию.
Модуль RCC. Такирование
Про этот модуль обычно забывают. Вспоминают только тогда, когда не получается мигнуть светодиодом.
Запомните! Что бы включить какую-либо периферию, на нее надо подать тактовые импульсы! Без этого никак.
Порты ввода-вывода сидят на шине APB2. Находим в документации регист для упрвления тактированием этой шины, это RCC_APB2ENR:
Чтобы включить тактирование порта C (светодиод как раз припаян к PC13), требуется записать в бит IOPCEN единичку.
Теперь найдем адрес регистра RCC_APB2ENR. Смещение у него 0x18, базовый адрес для регистров RCC 0x40021000.
Чтобы удобно было работать с битами, создадим структуру:
Чтобы потом не мучаться, сразу перечислим все адреса регистров:
теперь остается написать код для включения периферии:
При работе с регистрами не забываем про volatile, иначе после оптимизации компилятором долго будем искать ошибки и ругать разработчиков компилятора.
Тоже самое делаем для включения тактирвания другой периферии.
В итоге получился такой класс (не все перечислено):
Теперь можно в main.cpp присоединить файл и пользоваться:
Теперь можно и с портами поработать. GPIO
Открываем в документации раздел General-purpose and alternate-function I/Os. Находим Port bit configuration table:
Битами CNF[1:0] задается режим работы порта (аналоговый вход, цифровой вход, выход), биты MODE[1:0] отвечат за скорость работы порта в режиме выход.
Взглянем на регистры GPIOx_CRL и GPIOx_CRH (x=A, B, C. )
видно, что биты идут последовательно:
тогда создадим константы с режимами работы портов
тогда метод для конфигурации будет выглядеть так:
теперь можно сделать более удобные методы для выбора режима:
В документации находим адреса управляющих регистров для портов и перечислим:
Долго думал использовать базовый адрес и смещения или абсолютные адреса. В итоге остановился на последнем. Это добавляет некоторые издержки, но в процессе отладки удобней находить в памяти.
Возможно, у кого-то будет глаз дергаться, но красивее пока не придумал.
Чтобы перевести ножку в нужное логическое состояние, достаточно записать соответствующий бит в регистре ODRx. Например, так:
Также для управления состоянием можно воспользоваться регистрами GPIOx_BSRR.
По аналогии делаем методы для считывания состояния порта, методы для конфигурации и инициализации (не забываем включить тактирование). В итоге получился такой класс для работы с портами:
Проходим дебагером и убеждаемся, что светодиод сначала загорается (после led.ModeOutput();), потом гаснет (led.On();) и снова загорается (led.Off();). Это связано с тем, что светодиод подключен к ножке через линию питания. Поэтому, когда на выводе низкий уровень, светодиод загорается.
Не большие итоги
В данной статье я попытался (надеюсь, получилось) показать как можно немного упростить себе жизнь, сделать код более читаемым. Или наоборот — как нельзя делать. Каждый решит сам.
Можно было просто написать враперы для CMSIS, но это не интересно.
Спасибо за уделенное время. Если интересно продолжение — дайте знать.
STM32 – микроконтроллер для начинающих после Arduino
Микроконтроллер STM32 – популярная и очень востребованная платформа, позволяющая создавать профессиональные решения для автоматизации в самых различных областях. В отличие от доступного Arduino, STM32 требует более глубокого погружения в детали, она сложнее для начинающих, для нее меньше учебников на русском. В этой статье мы постараемся дать базовую информацию о платформе, ее истории, подскажем, где можно скачать программы и библиотеки, как написать первый скетч.
Что такое STM32
STM32 – это платформа, в основе которой лежат микроконтроллеры STMicroelectronics на базе ARM процессора, различные модули и периферия, а также программные решения (IDE) для работы с железом. Решения на базе stm активно используются благодаря производительности микроконтроллера, его удачной архитектуре, малом энергопотреблении, небольшой цене. В настоящее время STM32 состоит уже из нескольких линеек для самых разных предназначений.
История появления
Серия STM32 была выпущена в 2010 году. До этого компанией STMicroelectronics уже выпускались 4 семейства микроконтроллеров на базе ARM, но они были хуже по своим характеристикам. Контроллеры STM32 получились оптимальными по свойствам и цене. Изначально они выпускались в 14 вариантах, которые были разделены на 2 группы – с тактовой частотой до 2 МГц и с частотой до 36 МГц. Программное обеспечение у обеих групп одинаковое, как и расположение контактов. Первые изделия выпускались со встроенной флеш-памятью 128 кбайт и ОЗУ 20 кбайт. Сейчас линейка существенно расширилась, появились новые представители с повышенными значениями ОЗУ и Flash памяти.
Достоинства и недостатки STM32
Минусы STM32 не дают пока микроконтроллеру стать заменой Ардуино.
Сравнение STM32 с Arduino
По техническим характеристикам Ардуино проигрывает STM32. Тактовая частота микроконтроллеров Ардуино ниже – 16 МГц против 72 МГц STM32. Количество выводов GRIO у STM32 больше. Объем памяти у STM32 также выше. Нельзя не отметить pin-to-pin совместимость STM32 – для замены одного изделия на другое не нужно менять плату. Но полностью заменить ардуино конкуренты не могут. В первую очередь это связано с высоким порогом вхождения – для работы с STM32 нужно иметь базис. Платы Ардуино более распространены, и, если у пользователя возникает проблема, найти решение можно на форумах. Также для Ардуино созданы различные шилды и модули, расширяющие функционал. Несмотря на преимущества, по соотношению цена/качество выигрывает STM32.
Обзор продуктовых линеек
Семейство STM32 имеет широкий ассортимент изделий, различающихся по объему памяти, производительности, потреблению энергии и другим характеристикам.
Серии STM32F-1, STM32F-2 и STM32L полностью совместимы. Каждая из серий имеет десятки микросхем, которые можно без труда поменять на другие изделия. STM32F-1 была первой линейкой, ее производительность была ограничена. Из-за этого по характеристикам контроллеры быстро догнали изделия семейства Stellaris и LPC17. Позднее была выпущена STM32F-2 с улучшенными характеристиками – тактовая частота достигала 120 МГц. Отличается высокой процессорной мощностью, которая достигнута благодаря новой технологии производства 90 нм. Линейка STM32L представлена моделями, которые изготовлены по специальному технологическому процессу. Утечки транзисторов минимальны, благодаря чему приборы показывают лучшие значения.
Важно отметить, что контроллеры линейки STM32W не имеют pin-to-pin совместимости с STM32F-1, STM32F-2 и STM32L. Причина заключается в том, что линейку разрабатывала компания, которая предоставила радиочастотную часть. Это наложило ограничения на разработку для компании ST.
Микросхема STM32F100R4 имеет минимальный набор функций. Объем флэш памяти составляет 16 Кбайт, ОЗУ – 4 Кбайт, тактовая частота составляет 12 МГц. Если требуется более быстрое устройство с увеличенным объемом флэш-памяти до 128 Кбайт, подойдет STM32F101RB. USB интерфейс имеется у изделия STM32F103RE. Существует аналогичное устройство, но с более низким потреблением – это STM32L151RB.
Программное обеспечение для работы с контроллером
Для ARM архитектуры разработано множество сред разработки. К самым известным и дорогостоящим относятся инструменты фирм Keil и IAR System. Программы этих компаний предлагают самые продвинутые инструментарии для оптимизации кода. Также дополнительно существуют различные системы – USB стеки, TCP/IP-стеки и прочие. Применяя системы Keil, пользователь получает хороший уровень технической поддержки.
Также для STM32 используется среда разработки Eclipse и построенные на ней системы Atollic TrueStudio (платная) и CooCox IDE (CoIDE) (бесплатная). Обычно используется последняя. Ее преимущества перед другими средами разработки:
Единственный недостаток среды разработки CooCox IDE – сборка есть только под Windows.
STM32 Discovery
Начать изучение микроконтроллера STM32 лучше с платы Discovery. Это связано с тем, что на этой плате есть встроенный программатор. Его можно подключить к компьютеру через USB кабель и использовать как в качестве программируемого микроконтроллера, так и для внешних устройств. Плата Discovery имеет полную разводку пинов с контроллера на пины платы. На плату можно подключать различные сенсоры, микрофоны и другие периферийные устройства.
Что потребуется для подключения STM32 к компьютеру
Чтобы начать работу, потребуются следующие компоненты:
В качестве примера первая программа будет рассмотрена в среде CooCox IDE.
Первая программа
Обучение следует начинать с простейшего – с Hello World. Для начала нужно установить CooCox IDE на компьютер. Установка стандартная:
Когда программа установлена, ее нужно открыть. Следует перейти во вкладку Browse in Repository и выбрать ST – свой микроконтроллер.
Далее на экране появится список библиотек, которые можно подключить. Для первой программы потребуются системные CMSIS core и CMSIS Boot, библиотека для работы с системой тактирования RCC, GPIO для работами с пинами.
Сама программа пишется как и для Ардуино, нужно знать основы языка Си.
В окошке Project следует открыть main.c. В коде в самом начале следует подключить библиотеки кроме CMSIS (они уже автоматически подключены). Добавляются они следующим образом:
Затем добавляется тактирование порта в главной функции main. Какой контакт за что ответственен, можно просмотреть в даташите к микроконтроллеру.
Для настройки параметров выводов следует прописать ее название и поставить точку. Во всплывающем меню будут указаны все характеристики. Их можно исправлять.
После этого нужно сделать зацикливание в while, чтобы светодиод мигал, пока не отключится питание.
Когда программа написана, ее можно загружать в контроллер. Если есть отладочная плата, ее нужно подключить через USB кабель и нажать Download Code To Flash. Если плата отсутствует, потребуется переходник, который нужно подключить к порту компьютера. Контакт BOOT 0 подключается к плюсу питания контроллера, а затем включается само питание МК. После этого начнется прошивка.
Чтобы загрузить программу в микроконтроллер, нужно следовать указаниям от приложения. Сначала прописывается код порта, к которому подключен микроконтроллер. Также указывается скорость. Советуется брать небольшое значение, чтобы не было сбоев. Программа найдет микроконтроллер, и нужно будет нажать кнопку «далее». Во вкладке Download to device нужно в поле Download from file выбрать написанную программу и нажать «далее».
После этого нужно отключить питание контроллера STM32, закрыть Flash Loader Demonstrator, выключить переходник. Теперь можно снова включить микроконтроллер в обычном режиме. Когда программа будет загружена, светодиод начнет мигать.
Работа в других программах проходит подобным образом. Также выбираются нужные библиотеки, и прописывается код. У платных утилит функционал больше, и можно создавать более сложные проекты.
1. Общее описание архитектуры Cortex – M
Сегодня 2016 год, а серия STM32 появилась где-то в 2010 году. За это время многое было рассказано и показано. Но мы предложим своё видение и описание этого семейства.
Микроконтроллеры STM32 семейство 32-разрядных микроконтроллеров Flash на базе процессора ARM® Cortex®-M разработан, чтобы предложить новые степени свободы для пользователей MCU( см. рис. 1). 32-битный ассортимент, который сочетает очень высокую производительность, возможности в режиме реального времени, цифровой обработки сигнала, и низкое энергопотребление, низкий питание напряжения, сохраняя полную интеграцию и простоту разработки.
Рис. 1. Линейка STM 32
Для того чтобы более подробно ознакомиться с ядром на базе которого сделаны STM 32, можно скачать спецификацию на ядро Cortex – M 4 (в дальнейшем мы будем рассматривать именно это семейство):
2. Описание семейства STM32F4
В конце 2011 года компания STMicroelectronics начала серийный выпуск микроконтроллеров STM32F4xx на ядре ARM Cortex‑M4. Эта линейка продолжает развитие семейства STM32, дополняя его новым ядром ARM Cortex-M4. На данный момент общая номенклатура семейства составляет более 250 позиций на ядрах Cortex-M0/M3/M4 с широчайшим набором периферии и производительности, предоставляя разработчику богатый выбор решений для своих задач. Процессорное ядро ARM Cortex-M4 (рис. 2) является последней разработкой в семействе Cortex-M и ориентировано на цифровую обработку сигналов, занимая нишевую часть DSP-приложений, прежде принадлежавшую сигнальным процессорам. Ядро Cortex-M4 поддерживает такие операции, как умножение с накоплением за один такт, арифметика с насыщением, блок вычислений с плавающей запятой FPU (floating point unit), команды управления потоком данных SIMD (single instruction multiple data). Блок FPU совместим со стандартом IEEE 754 и позволяет процессору выполнять широкий спектр математических операций над вещественными числами. Благодаря тому, что DSP-инструкции в ядре Cortex-M4 выполняются за один такт и есть поддержка FPU, для контроллеров STM32 стали доступны новые сегменты рынка. Больше нет необходимости использовать дополнительный DSP-контроллер для обработки сигналов, можно воспользоваться одним STM32F4xx, объединяющим обычный контроллер со всем многообразием периферии и функциями DSP на одном чипе.
Рис. 2. Ядро ARM Cortex-M4
STM32F4xx можно применять в любых областях, где необходима цифровая обработка сигнала: интеллектуальное управление двигателями, обработка звука и изображений, радиолокация, навигация, релейная защита и т. д. Микроконтроллер без труда справится с цифровой фильтрацией, сверткой или преобразованием Фурье.
2.1. Описание линейки STM32F4
Новая линейка микроконтроллеров STM32F4хх производится по 90 ‑ нм технологии с использованием уже доказавшего свою эффективность ускорителя памяти (ART Accelerator), позволяющего работать с памятью без задержек на максимальной скорости. Производительность на тактовой частоте 168 МГц составляет 210 DMIPS, что означает: на данный момент STM32F4xx — лидер на рынке среди ядер Cortex-M4. Однако мало иметь высокопроизводительное ядро, нужно также обеспечивать хорошую пропускную способность между ядром и периферией. И тут у STM32F4xx все в порядке: применяется 7 ‑ уровневая матрица шин.
Рис. 2.1.1. Функциональная схема STM32F4хх
Основные характеристики семейства:
· Ядро ARM 32 ‑ битное Cortex-M4.
· Частота тактирования: 168 МГц, 210 DMIPS/1,25 DMIPS/МГц (Dhrystone 2.1).
· Новая высокопроизводительная AHB-матрица шин.
· До 1 Mбайт флэш-памяти.
· До 192 + 4 кбайт SRAM-памяти.
· Напряжение питания: 1,8–3,6 В (POR, PDR,PVD и BOR).
· Внутренние RC-генераторы на 16 МГц
· Внешний источник тактирования 4–26 МГц
· и для RTC — 32,768 кГц.
· Модули отладки SWD/JTAG, модуль ETM.
· Три 12 ‑ битных АЦП на 24 входных канала(скорость до 7,2 Мсемплов, температурный датчик).
· Два 12 ‑ битных ЦАП.
· DMA-контроллер на 16 потоков с поддержкой пакетной передачи.
· 17 таймеров (16 и 32 разряда).
· Два сторожевых таймера (WDG и IWDG).
· Коммуникационные интерфейсы : I2C,USART (ISO 7816, LIN, IrDA), SPI, I2S.
· 10/100 Ethernet MAC (IEEE 1588v2,MII/RMII).
· Контроллер SDIO ( карты SD, SDIO, MMC,CE-ATA).
· Интерфейс цифровой камеры
· (8/10/12/14 ‑ битные режимы).
· FSMC- контроллер (Compact Flash, SRAM,PSRAM, NOR, NAND и LCD 8080/6800).
· Аппаратный генератор случайных чисел.
· Аппаратное вычисление CRC, 96 ‑ битный
· Модуль шифрования AES 128, 192, 256,Triple DES, HASH (MD5, SHA-1), HMAC.
· Расширенный температурный диапазон:
2.2. Ускоритель памяти (ART-акселератор)
Ускоритель памяти (ART-акселератор) Для обеспечения высокой скорости работы нового ядра с флэш-памятью компания ST применила уже хорошо зарекомендовавший себя в серии STM32F2хх ART-акселератор памяти. Использование акселератора флэш памяти вместо увеличения быстродействия самой памяти позволило снизить динамическое потребление и уменьшить общую стоимость готового продукта. Чтобы обеспечить высокую производительность процессора Cortex-M4, ART-акселератор использует кэш очереди предварительных выборок команд и переходов, позволяя выполнять записанные в 128 ‑ битной флэш памяти программы с нулевым временем ожидания на частотах до 168 МГц (рис. 2.2.1).
Рис. 2.2.1. Ускоритель памяти
2.3. Матрица шин
Новая 32 ‑ битная многоуровневая AHB матрица шин (рис. 2.3.1.) обеспечивает взаимодействие ведущих и ведомых устройств в микроконтроллере, занимается арбитражем при одновременной работе нескольких ведущих. Через матрицу шин ядро Cortex-M4 получает доступ к данным и инструкциям, находящимся во встроенной SRAM- и флэшпамяти, может обратиться через FSMC к внешней памяти или работать с данными от периферии. DMA осуществляет перемещение данных между периферией и памятью или между различными видами памяти. В STM32F4 появился отдельный блок оперативной памяти 64 кбайт, который подключен непосредственно к шине данных ядра. Это сделано специально для работы без задержек с данными ЦОС — при хранении
Рис. 2.3.1. Многоуровневая матрица шин
2.4. I2C-интерфейс
Микроконтроллер содержит три модуля I2C. Каждый модуль может работать в режиме «ведущий» (Master) или «ведомый» (Slave). Поддерживается режим multimaster. Доступны стандартные (Standard) скорости передачи данных до 100 кГц и быстрая передача данных на частотах до 400 кГц. Возможна 7 ‑ и 10 ‑ битная адресация. Присутствует аппаратный блок проверки пакетных ошибок PEC (Packet Error Checking). I2C- модули поддерживают два расширенных протокола : SMBus 2.0 (System management bus) и PMBus ( Р ower management bus). SPI-интерфейс Микроконтроллер содержит три модуля SPI. Каждый модуль может работать в режиме Мaster (c поддержкой режима мultimaster) или Slave и поддерживать полнодуплексную, полудуплексную и симплексную передачу данных. Модуль SPI1 поддерживает скорость до 37,5 Mбит/с. Остальные модули — до 21 Мбит/с. Данные передаются 8/16 ‑ битными словами старшим или младшим битом вперед. Полярность и фазу тактового сигнала можно программно изменить. Встроена аппаратная поддержка вычисления циклически избыточного кода CRC для обеспечения надежной связи: значения CRC могут быть переданы в качестве последнего байта в режиме Tx, автоматически проводится проверка ошибок CRC для последнего полученного байта.
2.5. I2S-интерфейс
STM32F4хх имеет на борту два модуля I2S. Оба модуля мультиплексированы с SPIинтерфейсом. Этот интерфейс предназначен для работы с цифровыми звуковыми данными. В схеме тактирования теперь имеется выделенный модуль PLL (PLLI2S), который позволяет генерировать частоты сэмплирования аудиосигнала с частотами от 8 до 192 кГц, с точностью порядка 0,01%. Модули работают в режиме Мaster или Slave и поддерживают полнодуплексную и симплексную передачу данных. Данные предаются по 16, 24 или 32 бита. Осуществляется поддержка протоколов: стандарт I2S Phillips, стандарт PCM, MSB и LSB-выравнивание данных.
2.6. USART-интерфейс
STM32F4xxx содержит четыре модуля USART (синхронные) и два модуля UART (асинхронные). Модули USART1 и USART6 могут работать на скорости до 10,5 Mбит/с. Остальные — до 5,25 Mбит/с.
Данные предаются 8/9 ‑ битными словами с одно- или двухстоповыми битами и контролем четности. Поддерживается NRZ (Non Return to Zero) стандарт передачи данных. Модули USART могут быть использованы для подключения к шине LIN, часто используемой в автомобильных приложениях, работать как кодер/декодер инфракрасного сигнала IrDA. Для работы с модемами имеются дополнительные линии управления RTS и СTS. Возможно подключение смарт-карт в соответствии со стандартом ISO 7618-3. В дополнение ко всем описанным функция USART может работать в режиме SPI. В этом режиме модуль USART работает как ведущее SPI-устройство.
2.7. CAN-интерфейс
STM32F4 содержит два контроллера CAN. Контроллеры CAN поддерживают стандарты 2 А и 2 В, активную и пассивную передачу данных на скорости до 1 Мбит/с. Работают со стандартными (11 ‑ битными) и расширенными (29 ‑ битными) кадрами. Каждый CANконтроллер имеет три буфера сообщений на передачу, FIFO с тремя каскадами и 28 распределенных масштабируемых банков фильтров.
2.8. SDIO-интерфейс
SDIO позволяет микроконтроллеру обмениваться информацией с SD/SDIO/MMCкартами памяти и CE-ATA совместимыми устройствами. STM32F4хх поддерживает следующие спецификации: MultiMediaCard System версии 4.2 и более ранних версий (поддержка трех режимов: 1/4/8 бит), SD Memory Card версии 2.0, SD I/O Card версии 2.0 (поддержка двух режимов: 1/4 бит), CE-ATA цифровой протокол версии 1.1. Скорость передачи данных — до 48 МГц в 8 ‑ битном режиме.
2.9. USB-интерфейс
2.10. Ethernet-интерфейс
Модуль Ethernet представлен не во всех микроконтроллерах линейки STM32F4, а только в сериях STM32F407xx и STM32F417xx. Ethernet-модуль соответствует стандарту IEEE802.3 и обеспечивает передачу данных на скоростях 10 и 100 Мбит/с. Для синхронизации часов на аппаратном уровне выполнена поддержка протокола IEEE1588 v2. Для подключения к физической линии (медь, оптика) необходимо использовать внешний трансивер физического уровня (PHY). PHY подключается через порт MII (17 сигналов) или RMII (9 сигналов).
2.11. Цифровой интерфейс камеры (DCMI)
Представлен только в сериях STM32F407xx и STM32F417xx. DCMI позволяет соединить микроконтроллер с камерами и CMOS-сенсорами через параллельный 8/10/12/14 ‑ битный интерфейс. Доступны внутренняя и внешняя синхронизация кадров и строк, работа в непрерывном или покадровом режиме и функция обрезки изображения. Поддерживаются форматы: 8/10/12/14 ‑ битное прогрессивное видео, YCbCr 4:2:2 и RGB 565, сжатые данные JPEG.
2.12. Контроллер статической памяти (FSMC)
Модуль FSMC представлен только в микроконтроллерах с корпусами, содержащими 100, 144 или 176 выводов. FSMC дает возможность подключения к микроконтроллеру графических LCD-дисплеев и внешней статической памяти. FSMC способен поддерживать связь с внешней синхронной/асинхронной памятью и 16 ‑ битными PC-Card устройствами. Основное назначение FSMC — это перевод данных внутри микроконтроллера в доступный для соответствующих внешних устройств вид и обеспечение временных параметров связи этого протокола. Все внешние устройства получают свои адреса в адресном пространстве, сигналы данных и управления. Доступ к каждому внешнему устройству осуществляется посредством индивидуального сигнала выбора микросхемы. Одновременное обращение к двум различным микросхемам внешней памяти невозможно. Поддерживаются следующие типы памяти: PC Card/Compact Flash, SRAM, PSRAM, NOR Flash и NAND Flash. Параллельный LCD-интерфейс поддерживает два режима работы с LCD-контроллерами — Intel 8080 и Motorola 6800, но является довольно гибким для адаптации к другим LCD-интерфейсам.
2.13. Аналоговая периферия (АЦП И ЦАП)
Микроконтроллер содержит три аналогово ‑ цифровых преобразователя (АЦП) и два одноканальных цифро-аналоговых преобразователя (ЦАП). АЦП обладает разрешающей способностью 12 бит и очень высокой скоростью преобразования в 2,4 МГц в одиночном режиме и 7,2 МГц — в тройном режиме. Максимальное количество входных аналоговых каналов — 24. Есть встроенный источник опорного напряжения. Гибкая система настроек встроенного аналогового мультиплексора позволяет задавать любые последовательности преобразования аналоговых каналов (за исключением одновременного преобразования одного канала на нескольких АЦП). Настройки АЦП позволяют производить однократные и циклические измерения. Скорость работы АЦП зависит от напряжения питания микроконтроллера. Для проведения преобразований на максимальной скорости до 7,2 МГц необходимо соблюдать условие: напряжение питания микроконтроллера должно составлять 2,4–3,6 В. При снижении напряжения до 1,8 В скорость преобразования уменьшается до 1,2 МГц. Для контроля внутренней температуры микроконтроллера встроен температурный датчик. На его выходе формируется напряжение в зависимости от окружающей его температуры. Выход датчика через мультиплексор подключается к АЦП. Используя температурный датчик, можно измерять температуру от –40 до +125 °C с точностью ±1,5 °C. ЦАП обладает разрешающей способностью 12 бит, преобразование возможно в 8/12 ‑ битовом формате с выравниванием этого результата по левому или правому краям. Так как ЦАП содержит два канала, есть возможность формирования стереосигнала. Доступна функция автоматической генерации шумового сигнала с меняющейся амплитудой или треугольного сигнала.
2.14. Таймеры
Микроконтроллеры новой линейки могут содержать до 17 таймеров: два 16 ‑ битных таймера с расширенными функциями, два 32 ‑ битных таймера общего назначения, восемь 16 ‑ битных таймеров общего назначения, два 16 ‑ битных базовых таймера, два сторожевых таймера (независимый и оконного типа) и 24 ‑ битный системный таймер. Часть таймеров можно конфигурировать на работу в мультирежимном формате, что позволяет строить системы из таймеров. Например, повысить разрядность счетчика до 48, сконфигурировав последовательно три таймера, или синхронно запускать сразу несколько таймеров. Таймеры с расширенными функциями имеют очень большую функциональность. Это комплементарные выводы для поддержки трехфазных двигателей, поддержка режимов счета в прямом и обратных направлениях, генерация ШИМ, каналы захвата/сравнения сигнала, режим одиночного импульса, поддержка DMA, дополнительные функции безопасности в случае сбоев, поддержка интерфейса энкодера и датчика Холла. Таймеры общего назначения аналогичны таймерам с расширенными функциями, за исключением функций, связанных с управлением двигателями. Отличия между таймерами общего назначения заключаются в различном количестве каналов захвата/сравнения, в поддержке направления счета и поддержке DMA или ее отсутствии. Базовые таймеры имеют наименьший функционал: отсутствуют каналы захвата/сравнения, поддержка функций управления двигателями. Они, как правило, предназначены для использования в качестве обычных счетчиков. Область резервного питания, часы реального времени В микроконтроллерах STM32F4x реализована область резервного питания, позволяющая работать микроконтроллеру при пропадании основного питания и поддержки частичной функциональности микроконтроллера. Область резервного питания состоит из трех составляющих: • часы реального времени (RTC); • 4 кбайт памяти резервной SRAM; • 20 байт резервных регистров (80 байт). Часы реального времени выполнены в виде 32 ‑ разрядного счетчика с полной аппаратной поддержкой 0,5 секунды, секунд, минут, часов (в 12 ‑ или 24 ‑ часовом формате), а также день (день недели), дата (день месяца), месяц и год, представленные в двоично-десятичном формате (BCD). Работа с 28-, 29 ‑ дневными (високосный год) и 30-, 31 ‑ дневными месяцами происходит в автоматическом режиме. Поддерживается переход на летнее/зимнее время. Функция цифровой калибровки позволяет компенсировать неточность кварцевого резонатора. Часы реального времени реализуют дополнительные функции — два конфигурируемых будильника, защиту от несанкционированного доступа с сохранением времени взлома и очисткой резервных регистров. Часы могут оставаться активными во всех режимах работы микроконтроллера и выводить его из различных режимов сна. 4 кбайт резервной памяти доступны только для CPU. Эта память сохраняет свой контекст в низкопотребляющих режимах и при пропадании основного питания микроконтроллера. Но только при условии, что подключено батарейное питание на специально предусмотренный вывод микросхемы Vbat, который при доступности основного питания не потребляет дополнительной энергии. В линейке STM32F4x потребление часов реального времени и 4 ‑ кбайт резервной памяти значительно снижено: и RTC, и SRAM потребляют менее 1 мкА, а вместе — менее 2 мкА.
2.15. Модуль шифрования и хеширования
Модуль шифрования (сryptographic accelerator) представлен только в сериях STM32F415 и STM32F417. Он позволяет аппаратно реавания с очень высокой скоростью «на лету», что необходимо для обеспечения конфиденциальности информации в широком круге задач. Реализованы следующие алгоритмы шифрования: • DES (Data Encryption Standard) — симметричный шифр; • Triple DES (TDES, 64/128/192 ‑ битные ключи) — симметричный блочный шифр; • AES (Advanced Encryption Standard, 128/192/256 ‑ битные ключи) — симметричный блочный шифр. Поддержка хеширования: • SHA-1 (Secure Hash Algorithm-1) — алгоритм криптографического хеширования; • MD5 (Message Digest 5) — 128 ‑ битный алгоритм хеширования; • HMAC (Hash-based message authentication code) — хеш-код идентификации сообщений. В таблице представлен сравнительный анализ оценки пропускной способности STM32F4xx в Мбайт/c для работы с данными на основе вышеприведенных алгоритмов. По таблице видно, что с помощью STM32F4x можно проектировать приложения с криптографической обработкой данных «на лету», практически не используя ресурсы ядра микроконтроллера.
2.16. Порты ввода/вывода общего назначения
Микроконтроллеры оснащены большим количеством портов ввода/вывода общего назначения GPIO (General-Purpose Input Output). На данный момент доступны корпуса LQFP и BGA, максимальное количество выводов микроконтроллера составляет 176. Приведем краткие характеристики портов ввода/вывода: • Регистры управления 16 бит. • Толерантность к 5 В. • Состояния — подтяжка к питанию/«земле», третье состояние, альтернативные функции, аналоговое состояние. • Конфигурация скорости — 2, 25, 50 и 100 МГц. • Механизм защиты конфигурации от изменения. • Генерация прерывания почти любым выводом. Основное же отличие от STM32F1x заключается в более гибком подходе при конфигурировании альтернативных функций (USART, АЦП и т. д.) на одну ножку. Работа портов ввода/вывода стала намного быстрее.
2.17. Отладка
Для подключения микроконтроллера к отладочным средствам используется стандартной JTAG-интерфейс или двухпроводный SWD (Serial Wire Debug). Выходы SWDинтерфейса мультиплексированы с выходами JTAG. Разработчику предоставляется возможность в выборе интерфейса отладки/программирования. Интегрированная макроячейка трассировки (Embedded Trace Macrocell) значительно расширяет функции отладки, позволяя наблюдать за потоком инструкций и данных внутри ядра CPU в реальном времени. Данные выводятся через небольшое количество ETM-выводов на внешний TDAанализатор. По сообщениям специалистов компании MathWorks, хорошо известной по инструментарию Matlab, в 2012 году должен появиться специальный пакет в Matlab для генерирования и создания кода алгоритмов цифровой обработки сигналов для ядра Cortex-M4. Это заметно облегчит применение ЦОС в микроконтроллерах на ядре Cortex-M4. При выпуске на рынок новой линейки микроконтроллеров на ядре CortexM4 STMicroelectronics следует своим традициям и предлагает разработчикам недорогую отладочную плату STM32F4DISCOVERY из серии плат Discovery. За невысокую цену, менее 900 рублей, разработчик получает полноценную отладочную плату с программатором-отладчиком и может начинать осваивать STM32 без дополнительных затрат. На этот раз в этой отладочной плате, помимо встроенного программатораотладчика, присутствуют МЭМС-датчики (акселерометр и микрофон), а также USB и аудиокодек с разъемом для подключения наушников или колонок. Новые компоненты на отладочной плате вкупе с ядром Cortex-M4 и периферией STM32F4x открывают разработчику новые возможности.
3. Заключение
Новая линейка микроконтроллеров STM32F4 на базе ядра Cortex-M4 вобрала в себя все лучшее от своих предшественников на ядре Cortex-M3 — серий STM32F1 и STM32F2. Основное преимущество новой серии — значительно возросшая производительность: скорость работы ядра выросла до 168 МГц. Усовершенствованный ускоритель памяти позволяет работать с флэш-памятью на этой частоте без задержек. Осуществляется и поддержка DSPинструкций и операций с плавающей точкой. Рост производительности ядра также сказался на увеличении скорости работы периферии. Все новые микроконтроллеры на базе ядра Cortex-M4 программно совместимы с существующими сериями STM32F1xx и STM32F2xx. Совместимость по ножкам между STM32F2x и STM32F4x полная, то есть разработчику доступна полная гибкость при переходе между ядрами CortexM3 и Cortex-M4. К сожалению, полной совместимости по выводам между STM32F1x и STM32F2x/STM32F4x нет, может не совпадать от двух до трех ножек (это ножки питания и «земли»), но вся периферия сохранила свое положение. Рекомендации по созданию универсальной платы для использования STM32F1x и STM32F2x/STM32F4x приведены в документации. Невысокая цена, низкое потребление и новые возможности STM32F4xx по цифровой обработке сигналов, несомненно, сделают эти новые микроконтроллеры лидером в своем сегменте рынка. Недавно компания STMicroelectronics сообщила о выходе на рынок новой линейки 32 ‑ разрядных микроконтроллеров STM32F0xx на ядре Cortex-M0. Эта линейка позиционируется для рынка недорогих 8/16 ‑ битных решений. Фактически семейство STM32 теперь перекрывает весь рынок 8/16/32 ‑ битных микроконтроллеров, позволяя разработчику просто выбрать платформу Cortex-M для всего круга задач. При этом по максимуму соблюдается программная совместимость и совместимость по ножкам, что позволяет с наименьшими затратами переходить от одного микроконтроллера к другому в случае нехватки или переизбытка ресурсов. В массовое же производство новая линейка STM32F0xx выйдет в III квартале 2012 года.