• - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!
подписаться на RSS-ленту

Знакомство с ARM Cortex-M3 и с STM32, в частности

Пожалуй, большинство эмбеддерщиков и просто интересующихся встроенными системами уже слышали про процессоры ARM. Их устанавливают в промышленное оборудование, в смартфоны и аудио-плееры, в видеотехнику, да много ещё куда. Популярность ARM во многом обеспечена их хорошей производительностью при низком энергопотреблении, что делает их идеальными для применения в различных мобильных устройствах. ARM расшифровывается как Advanced RISC Machines. RISC — это архитектура процессоров с “сокращённым” набором команд, ныне одна из наиболее распространённых. Между прочим, микроконтроллеры AVR, используемые в Arduino, имеют архитектуру RISC.

Существует современное семейство ARM под названием Cortex, которое делится на три подсемейства:
  • Cortex-A
    Это полноценные процессоры общего назначения для самых различных задач. Самое известное устройство на базе их — это iPhone.
  • Cortex-R
    Предназначены для систем реального времени, где существует необходимость в быстрой и точной реакции на внешние события с гарантированным временем отклика — для применений в промышленности, медицине, автомобилестроении и пр.
  • Cortex-M
    Микроконтроллеры, уже известная нам по AVR область. Как обычно, это не очень быстрый процессор, но со встроенной памятью для программ (flash), оперативной памятью (SRAM) и различной периферией — такой, как GPIO (порты ввода-вывода), UART, SPI, I2C и т.д.
Эта статья, как и последующие в цикле (да, это будет цикл статей), сконцентрируется на самом популярном виде Cortex-M в наши дни — Cortex-M3. Микроконтроллеры этого семейства выпускают несколько компаний — например, ST Microelectronics, NXP, Atmel, Texas Instruments. Надо сказать, что с ARM вообще и Cortex-M3, в частности, ситуация с производством отличается от привычной: компания ARM Limited занимается только разработкой архитектуры и средств разработки (компиляторов и IDE), но сама процессоры не производит, а продаёт лицензии другим компаниям — вышеперечисленным, например. При этом гарантируется совместимость кода на уровне инструкций процессора — это значит, что можно разрабатывать ПО под процессоры различных производителей, пользуясь одним и тем же компилятором.

Чем же Cortex-M3 круче других микроконтроллеров? Много чем:
  • Полностью 32-битная архитектура: все регистры 32-битные, арифметические операции работают с 32-битными данными; умножение 32 x 32 -> 32 выполняется за 1 такт, деление — за 2-12 тактов. Благодаря этому CM3 за то же время успевает сделать больше, чем 8-ми и 16-битные МК.
  • Большое количество (от 16) регистров общего назначения, характерное для архитектуры RISC. Так как регистры работают на частоте процессора, а RAM — на меньшей, всегда предпочтительнее работать с данными в регистрах, а чем их больше, тем дольше можно обходиться без использования RAM. Тут соперничать c CM3 могут разве что AVR.
  • Отличная поддержка режимов энергосбережения. Можно отправить в спячку как весь МК, так и отдельные его подсистемы.
  • 24-битный таймер SysTick
    Этот таймер без ШИМ (PWM), зато 24-битный: можно задавать интервал срабатывания в широких пределах, не особо парясь. Самое то для организации конечных автоматов и планировщика RTOS.
  • Полноценная отладка по JTAG или SWD даже на младших кристаллах. Полноценная — значит, можно ставить точки останова (breakpoints), просматривать содержимое переменных и регистров, выполнять программу пошагово и т.п.
  • NVIC — Nested Vectored Interrupt Controller
    Контроллер прерываний, который поддерживает до 240 прерываний на все случаи жизни, до 256 их приоритетов, и обеспечивает быструю реакцию на прерывания.
  • Контроллера DMA — Direct Memory Access
    Очень полезная вещь — позволяет периферии (UART, SPI, I2C и пр.) читать/писать дынные в RAM без участия МК. То есть, можно дать задание контроллеру DMA считать в указанный буфер 100 байт по SPI, и эта задача будет выполняться в фоне, не загружая МК.
  • Высокая плотность кода. Для большинство более-менее сложных проектов размер кода будет меньше, чем для многих других МК. Это достигается за счёт специально разработанного для этих целей набора инструкций Thumb-2. Меньше размер кода — больше кода влезет в МК.
  • Общая ориентированность набора инструкций на компиляторы C — например, наличие команд для табличных переходов (для swicth/case), битовых манипуляций (PORTA |= (1 << 3) и подобный код), условного исполнения инструкций (очень крутая фича). Всё это выливается в более эффективную оптимизацию кода компиляторами C, а значит и в более высокую скорость работы.
  • Хорошие средства разработки: компилятор + среда разработки Keil от ARM Limited, IAR Embedded Workbench for ARM, связка компилятора GCC (сборка Sourcery CodeBench Lite Edition) и Eclipse IDE. Для пользователей Windows есть совсем простая в использовании CoIDE на базе GCC + Eclipse. Вариации с Eclipse круче всего, так как в ней есть поддержка всего, что нужно для удобного программирования: подсветка синтаксиса, умное автодополнение и автозавершение кода, сниппеты, отладчик, всплывающие подсказки с комментариями к функциям и переменным, рефакторинг.
Это мы пока рассматривали Cortex-M3 вообще, а изучать мы их будем на линейке STM32F10x от компании ST Microelectronics, производителем электронных компонентов с мировым именем. Эти ребята очень серьёзно подошли к разработке своих МК на базе Cortex-M3, в результате чего STM32 имеют ряд своих собственных достоинств. Во-первых, это богатая периферия:
  • Несколько многоканальных скоростных 12-битных АЦП, до миллиона измерений в секунду, режим непрерывного измерения.
  • Двухканальный ЦАП, умеющий работать в 8-ми и в 12-битном режимах.
  • 12-канальный контроллер DMA, обслуживает до 12 запросов, имеет 4 уровня приоритетов, независимые размеры блоков данных для приёма и передачи (8, 16 и 32 бита), поддержка кольцевого буфера (!), передача данных в режимах память->память, память->периферия, периферия>память и периферия>периферия.
  • Несколько 16-битных таймеров с произвольными делителями (не только степени двойки, как в AVR), которые умеют генерировать прерывания по переполнению, по сравнению, генерировать ШИМ, измерять длину и число входящих импульсов, запускать ЦАП, и даже автоматически считать импульсы с энкодеров и датчиков Холла!
  • NVIC, помимо всего прочего, поддерживает до 20 прерываний от внешних источников.
  • Модуль RTC (Real-Time Clock) — часы реального времени с счётчиком и будильником.
  • Несколько Watchdog-таймеров для пущей надёжности.
  • FSMC — Flexible Static Memory Controller
    Обеспечивает прозрачный доступ к нескольким видам памяти — SRAM, ROM, NOR Flash, NAND Flash, PSRAM и 16-битным PC Card-совместимым устройствам.
  • SDIO — Secure Digital I/O interface
    Делает львиную долю работы по чтению/записи на карты памяти MMC и SD, что даёт возможность легко и просто прикрутить поддержку FAT и полноценно работать с файлами на карточках.
  • USB
    Полная поддержка стантарта USB 2.0 Full-speed, до 8 эндпоинтов.
  • USB OTG (On-The-Go)
    Эта технология позволяет связывать USB-устройства с её пооддержкой без участия хоста — например, цифровую камеру с принтером.
  • Ethernet, MAC-уровень
    Ага, можно связываться с компом по локальной сети. С внешней PHY-микросхемой может выжимать 10/100 Мбит/с.
  • Шина I2S — шина цифровой связи аудио-устройств.
  • Ну, и стантдартный набор: UART, SPI, I2C, CAN.
Во-вторых, у STM32 очень хорошая структурированная документация:
  • Один Reference manual с описанием всей периферии на всю линейку STM32F10x
  • Подробная документация по каждой отдельной серии МК — распиновка, корпуса, наименование и т.п.
  • Приличное количество аппноутов (Application Notes) — рекомендаций по применению: правильный подбор источника тактирования, питания, примеры работы с LCD, SD-картами, RTC и многое другое.
В-третьих, совместимость — и по расположению ног на кристалле, и по коду. То есть, если не хватает производительности, Flash, RAM или периферии, то можно без модификации кода и без переделки платы просто поставить на плату МК пожирнее с тем же количеством ног.

В-четвёртых, цена. Самый младший камень из серии — STM32F100C4T6B — можно купить за 1-2 $, при этом он имеет 48 ног, 16 КБ Flash, 4 КБ SRAM и может работать на частоте 24 МГц, ну и UARTы и прочие интерфейсы в наличии. То есть, он круче, чем стандартный для Arduino контроллер ATmega168. Конечно, 48 ног — это не DIP-корпус, а TQFP: в макетку или в панельку его не воткнёшь, нужно плату разводить. Но технология изготовления печатных плат в домашних условиях ЛУТ уже расписана вдоль и поперёк, так что не такая уж это и проблема.

Ну, и наконец, платы вроде Arduino для быстрого освоения у ST тоже имеются, и начнём мы изучать STM32 с одной из них — STM32 Discovery:

Так что, если кто не силён в пайке, расслабьтесь. В этой плате есть встроенный отладчик ST-Link, так что вы сможете вкусить всю прелесть полноценной отладки, для которой к AVR пришлось бы докупать AVRDragon за 70$.

В общем, STM32 — это выбор редакции, однозначно. Теперь о цикле статей. Если коротко, то цель цикла — описать STM32F10x вдоль и поперёк. А, если длинно, мы с вами:
  • Изучим всю периферию линейки со всеми режимами работы.
  • Познаем всю прелесть и сложность работы с прерываниями.
  • Научимся разным полезным программерским трюкам и приёмам.
  • Подтянем свои знания языка C.
  • Научимся комбинировать полученные знания и к концу курса сделаем хотя бы одно относительно сложное устройство (уровня MP3-плеера).
Кто хочет прокачаться в программировании МК, у кого есть стальные яйца воля к победе, кто не боится трудностей — ждите продолжение, оно скоро будет. Заряжайте свои мечи, падаваны (:
  • +3
  • 17 ноября 2011, 12:07
  • burjui

Комментарии (19)

RSS свернуть / развернуть
+
0
програмированние идет на чистом С? Нечего подобного ардуины?
avatar

Luan

  • 17 ноября 2011, 20:00
+
0
Да, на чистом C, только вот сложного там ничего нет — бояться не нужно. Тем более, библиотека от ST очень хороша (:
avatar

burjui

  • 17 ноября 2011, 20:27
+
0
Мультиплатформеннaя IDE для STM32 leaflabs.com/docs/ide.html
«Ардуиноподобный» язык leaflabs.com/docs/language.html
avatar

amsterdam

  • 25 февраля 2012, 21:49
+
+1
я не боюсь) жду недождусь посмотреть примеры и приступить к использованию потому что было много идей на что ардуины нехватало)
avatar

Luan

  • 17 ноября 2011, 20:30
+
+1
Классно! Ждем с нетерпением!
Бум пока заказывать «таракана» и делать дев.боард. А потом учиться по вашим статьям.
avatar

vasiliok

  • 17 ноября 2011, 20:33
+
0
Если умения позволяют, это лучший вариант.
Кстати, хороший сайт у вас в профайле указан. Жаль, не могу сделать, как в «Матрице» — воткнуть себе в башку шнур, нажать кнопку и через пару секунд сказать: «Я знаю литовский!». Буду смеяться и плакать с Google Translate (:
avatar

burjui

  • 17 ноября 2011, 21:54
+
0
Спасибо :-) Сайт на иностранном языке, ибо он как реклама к фрилансовым прокетам для местных жителей. Если что-то конкретно интересно, то спрашивайте. Опишу по-русски. Все последние платы там сделаны с помощью переделаного ламинатора.

А по теме — этот Дискавери боард немного дороговат (не сильно, но всё же). Имея навыки, проще самому сделать демо-боардик для изучения STM32 контроллера, ну и ставить туда сразу переферию, с которой в основном работаешь.

;-)
avatar

vasiliok

  • 18 ноября 2011, 07:55
+
0
Да, борда дороже, чем сделанная своими руками, но дешевле Arduino *trollface.pcb*
Кстати, мы тоже для ЛУТ используем переделанный ламинатор (:
avatar

burjui

  • 18 ноября 2011, 10:18
+
0
Шикарно!
Жду не дождусь следующих статей. А то вычислительных ресурсов Arduino Duemilanove мне уже давно не хватает)))
avatar

DeVOLT

  • 25 ноября 2011, 23:37
+
0
Почти дописал продолжение. Получается довольно объёмно — больше, чем ожидал ('-_-)
avatar

burjui

  • 26 ноября 2011, 07:27
+
0
Так это здорово)))
Нигде я не смог найти достойного материала на Русском, где все популярно и понятно изложено. Цикл ваших статей — это то, чего так не хватало))))
avatar

DeVOLT

  • 26 ноября 2011, 10:31
+
+1
А мы и не ищем легких путей, главное, чтобы было доступно и подробно написано, с примерами. А если еще и под CoIDE от Coocox — то вообще было бы супер!
avatar

Fisherman

  • 26 ноября 2011, 14:51
+
0
Раз тут такая активность нарисовалась, хочу тогда обратную связь получить от вас (:
Я тут про настройку IDE уже почти дописал, и быстренько, накатаю своего рода quickstart: ну там, светодиодом поморгать, потенциометр считать, и без подробных объяснений — просто чтобы сначала голову не забивать деталями, но уже что-то работало.
А дальше уже пойдут статьи с подробным разбором периферии, тонкостями архитектуры STM32 и работы компилятора, и прочими высокими материями.

Так вот, скажите, как лучше будет — сделать только первую статью в стиле quickstart или ещё одну-две для разогрева?
avatar

burjui

  • 26 ноября 2011, 15:34
+
+2
Про моргание светодиодами уже на we.easyelectronics.ru были статейки, хочется чего-нибудь более познавательного. Думаю, одной статьи в стиле quickstart было бы вполне достаточно. В нее можно «каждой твари по паре» напихать всего, чего поместится: от моргания свтодиодомами и до настройки таймеров на определенный интервал. А в последующих статьях уже по каждому периферийному узлу подробно, с толком, с чувством, с расстановкой.

Откройте секрет — какая все же IDE планируется за базовую при написании статей?
avatar

Fisherman

  • 26 ноября 2011, 18:23
+
+1
Базовая IDE:
* Eclipse с установленным ARM Plugin
* Sourcery CodeBench Lite Edition (бывший CodeSourcery G++ Lite)
То бишь сборка кросс-компилятора GCC, GDB и прочих утилит для разработки под ARM.
* Мой форк проекта stlink: GDB-сервер + утилита для прошивки
Выбран для того, чтобы и под Windows, и под Linux было шить и отлаживать. Изначально линуксовый проект, я его пропатчил для работы под виндой и пофиксил пару багов, мешающих полноценной отладке.

Собственно, всё подобрано максимально кроссплатформенно: не хочу никого обижать — ни виндузятников, ни линуксоидов, ни маководов. Впрочем, с Mac OS X я буду возится, только если маководы-кодеры сами попросят, ибо у нас их мало (не то, что в США), а я в этой ОС очень мало работал.
Ну и, такая сборка не будет зациклена на Cortex-M3 — если захочется писать под крутые камни типа Cortex-A9, менять IDE или компилятор не придётся, только софт для прошивки, разве что.

По поводу CoIDE: я описал в статье первичную настройку этой IDE, но в ней всё так просто, что даже не знаю, что ещё написать. Ткнул галочку — библиотека для GPIO добавилась. Просто мечта домохозяйки-ембеддерщицы :D
Если в работе с проектами будут какие отличия от моей IDE, я буду о них писать, само собой. А уж если кетайсы разродятся версией под Linux, пофиксят косяки с абсолютными путями в проекте, вытащат настройки редактора и т.п. из глубокой жопы и перестанут зацикливаться только на Cortex — тогда вообще её сделаю основной IDE для курса (:

А вообще, код-то единый будет для обеих IDE, так что моим читателям, по большому счёту, будет по барабану, какой IDE пользоваться. Просто в моей IDE нужно будет делать копию скелетного проекта, описанного в статье, а в CoIDE — создавать новый и тыкать в галочки.

Вот как-то так.
avatar

burjui

  • 26 ноября 2011, 18:56
+
0
Ждем-с с нетерпением. (:
avatar

Fisherman

  • 26 ноября 2011, 19:35
+
0
Только-только начал осваивать Arduino, а тут попалась Discavery — и сразу купил.
Только это оказалась STM32F4DISCOVERY, т.е. на процессоре STM32F407VGT6. Скажите пожалуйста, а Ваши статьи, ориентированные на STM32F10x, подойдут мне при изучении Cortex-M4?
В электронике вообще и в микроконтроллерах в частности я пока ещё только начинающий. Программирую на Си настольные приложения.
avatar

ka-5

  • 17 августа 2012, 19:51
+
+1
Вполне пойдут, только нужно учитывать, что для другого камня нужен другой набор библиотек, придётся поправить код (немного отличаются названия функций и констант), ну и настройки в проекте. Оставляю вам архив проекта для STM32F4DISCOVERY. После прочтения статьи о настройке Eclispe и прочего софта гляньте в настройки этого проекта — так будет проще понять, в чём отличия. Если после прочтения статей что-то непонятно, обращайтесь (:
avatar

burjui

  • 18 августа 2012, 21:57
+
0
Спасибо большое, буду разбираться!
avatar

ka-5

  • 18 августа 2012, 23:47

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.