kolhozing.ru
В началоАвторемонтМоделизмОргтехникаСад и огородЭлектроникаФорум

О выборе МК и отладочной плате STM32 F0 Value line Discovery

Когда-то я уже пробовал работать с МК, это был PIC от Microchip. Но при всех его достоинствах для меня в нем есть существенный недостаток: все операции только через регистр-аккумулятор. В этом плане AVR с набором регистров общего назначения выглядит привлекательнее, да и это сладкое слово "ардуино", позволяющее программировать не приходя в сознания. Но уже почти взяв AVR в руки, я вдруг вспомнил, что где-то когда-то слышал STM32... Ну и решил уточнить, что это за зверь. И надо сказать, что это весьма годный зверь. Для начала STM32 представляет собой 32-битный процессор. Местами там встречается 16 бит, но АЛУ полноценное 32-битное с архитектурой ARM Cortext-M0/1/3/4 (в зависимости от серии). Самый маленький МК имет 16Кб ПЗУ и 4Кб ОЗУ. И все это работает на частоте до 48МГц. А по цене даже дешевле, чем младшие модели 8-битных микроконтроллеров. Но на этом дело не останавливается, поскольку МК STM32 имеют навороченную внутреннюю архитектру и неплохой набор перефирии. Начиная от таймеров и USART'ов и заканчивая наличием Ethernet'а далеко не в самых топовых моделях. А еще на архитектуру ARM хорошо ложится С-шный код, что позволяет обойтись практически без использования ассемблера. Приятным бонусом является pin-to-pin совместимость между всеми чипами в линейке, что позволяет без особых сложностей заменить чип на более мощный.

Для конкретики возьмем МК начального уровня STM32F030F4, самый маломощный среди всех STM32. Этот МК имеет следующие ТТХ:

  • 16Кб ПЗУ (Flash),
  • 4Кб ОЗУ (SRAM),
  • пять 16-битных таймеров (о них будет ниже),
  • по одному SPI, I2C и USART,
  • 12-битный 11-канальный АЦП.
Это параметры, которые различаются в пределах одной серии (F030), для сравнения STM32F030RC имеет:
  • 256Кб ПЗУ (Flash),
  • 32Кб ОЗУ (SRAM),
  • Восемь 16-битных таймеров,
  • по два SPI и I2C,
  • шесть USART,
  • 12-битный 18-канальный АЦП.
Теперь ТТХ, которые одинаковы для всей серии Entry level, т.е. F0.
  • Ядро Cortex-M0 @ 48MHz,
  • 24-битный системный таймер,
  • два watchdog'а, один из которых работает от собственного генератора,
  • RTC (да! часы),
  • встроенный генератор 8МHz с умножением частоты,
  • блок вычисления CRC,
  • отладочный интерфейс SWD,
  • в зависимости от корпуса от 15 до 55 выходов GPIO,
  • напряжение питания от 2.4В до 3.6В
Для снижения энергопотребления неиспользуемая периферия может быть отключена от тактирования. Периферия может использовать ПДП, что бы разгрузить процессор от тупой пересылки данных. Конечно же можно использовать и прерывания, которые может генерировать как периферийное устройство, так и изменение состояния GPIO, правда, последних можно контролировать не более 16 штук, но произвольных, хотя и с некоторыми ограничениями. Прерываниям можно назначить разный приоритет, в случае возникновения более приоритетного прерывания менее приоритетное будет прервано, а при возникновении менее приоритетного оно будет ждать завершения обработки более приоритетного.

Несколько слов еще хочется сказать о загрузке МК. Загружаться он умеет из трех источников:

  • Flash-память (стандартный метод)
  • Системная память
  • SRAM
В системной памяти находится загрузчик, который позволяет прошить flash-память через USART.

Теперь чуть подробнее о периферии. Для начала тактирование всего этого богатства. Для тактирования PLL используется либо встроенный RC-генератор с частотой 8МГц, либо внешний с частотой от 4 до 32МГц, выходы которых через предделители и умножители доходят до внутренних шин и периферии МК. Для независимого WDG используется внутренний RC-генератор с частотой 40кГц. Для RTC предусмотренно три источника частоты - системный генератор, генератор WDG и внешний генератор с частотой 32,768кГц. Диаграмма "Clock tree" в руководстве выглядит довольно запутанной, но ее стоит изучить для понимания внутренного устройства МК.

Не менее сложно дело обстоит и с таймерами. Для начала системный таймер, который подходит для организации процессов реального времени. Это простой 24-битный таймер, который просто тикает вниз и при достижении нуля дергает прерывание, но прерывание с высоким приоритетом. Например, при частоте 24МГц тактируем этот таймер от шины без предделителя и устанавливаем предзагруженное значение 24000. И получим прерывания с частотой 1кГц, в которых можно, например, переключать контексты потоков.

Дальше 16-битные таймеры общего назначения, в количестве от 5 штук. Самый простой, который, однако, есть не во всех МК, называется Basic и представляет собой обычный 16-битный счетчик с перезагрузкой значения. По достижении установленного значения генерируется прерывание или запрос DMA. Ничего интересного, за исключением того, что его предделитель - любое 16-битное число. Например, тактируем таймер от шины 24МГц, выставляем предделитель 24000 и счетчик будет изменяться каждую миллисекунду.

Следующий тип таймеров называется «General purpose», их может быть 4 или 5, но все они, тем не менее, все равно разные. Большинство так же является 16-битными счетчиками с произвольными 16-битными предделителями, но один из этих таймеров более интересный - он может «тикать» не только вверх, но и вниз, а также вверх-вниз. Эти таймеры обладают большей функциональностью:

  • Захват сигнала (в зависимости от таймера до 4 каналов), при импульсе на входе значение счетчика сохраняется в регистре канала. Ловить можно фронты, спады и даже их вместе. Для устранения дребезга можно настроить фильтр, т.е. число выборок, после которого переход уровня будет считаться состоявшимся. С помощью такого таймера можно захватывать ШИМ, если настроить один канал по фронту на сброс счетчика, а второй по спаду. Тогда первый будет захватывать период, а второй - заполнение. Похожим образом можно обрабатывать и сигналы энкодера.
  • Сравнение. Тут немного проще: по достижению записанного в регистре канала значения будет изменяться соответствующий выход. В зависимости от настройки 0, 1 или переключение. Для некоторых таймеров есть возможность подключить комплиментарный выход, который будет инверсным для основного.
  • Генерация ШИМ. Тоже не сложно, задается частота и заполнение. Простой пример управление сервоприводом. Частота импульсов 50Гц, длительность импульса от 500 до 2250 мкс, т.е. 500 мкс + по 10 мкс на каждый градус. Что бы управлять такой сервой таймером, надо настроить предделитель так, что бы таймер «тикал» каждые 10 мс, период ШИМ будет 2000 (т.е. 20 мс или те самые 50Гц), а значение регистра сравнения 50+угол поворота. Profit! МК сгенерирует нужный сигнал самостоятельно.

Ну и последний вид таймера, «Advanced purpose», одна штука. Этот таймер умеет все, что умеют «General purpose», плюс специальная особенность - трехфазный ШИМ для управления электродвигателем.

Но и это не совсем все про таймеры, кроме автономной работы их можно объединять. Например, синхронный старт нескольких таймеров по одному внешнему триггеру. Или использование выхода одного таймера для входа другого. Таким образом из двух 16-битных таймеров можно сделать 32-битный. Конечно, за пару абзацав не возможно рассказать о всех возможностях таймеров, описание которых в документации занимает несколько десятов страниц, но надеюсь общее представление вы получили.

Теперь несколько ложек дегтя в такую замечательную бочку меда.

  • Во-первых: порог вхождения довольно высокий. Хипстерам от электроники это не понравится. Одним небольшим datasheet'ом на несколько десятков страниц (datasheet выбранного PICа я прочитал в метро по дороге домой) не обойтись. Готовтесь внимательно проштудировать ~1500 страниц из нескольких документов, которые содержат только информацию по особенностям МК, отдельно еще придется пролистать руководство по командам ARM. Как вы могли заметить, архитектура и периферия очень навороченная и что бы эффективно ее использовать, надо понимать как она работает.
  • Во-вторых: корпусов DIP не бывает в принципе. Самый простой корпус TSSOP-20. А остальные LQFP от 32 до 64 ног для серии F0, с увеличением числа ног для старших моделей, например LQFP208. Есть еще разные BGA-образные варианты, которые для DIY еще меньше подходят. Но на помощь приходят отладочные платы, как от STMicroelectronics, так и сторонних производителей, к чему я сейчас плавно и перейду.

Вторая часть этого марлезонского балета будет посвящена отладочной плате STM32 F0 Value Line Discovery (покупал по ссылке. На тот момент там были скидки).

Отладочная плата представляет собой распаянный на плате МК с некоторой обвязкой. В данном случае это минимальная обвязка, позволяющая запустить процессор. Из внешней перефирии доступна кнопка и два светодиода, все остальные выводы (а также земля и питание) разведены на два ряда пинов по краям платы. Пины, вообщем-то, допускают подключение с обоих сторон платы. Хотя конфигурация выводов не совпадает с шилдами от ардуино, тем не менее их можно подключить проводами. Все контакты подписаны названиями GPIO, что весьма удобно для макетирования.

Упакована плата в простой блистер

В комплекте с платой идет макетка такого же размера, очень удобно: можно на ней развести необходимую периферию: ключи, регистры и т.д.

На этой плате установлен МК STM32F030R8. Его характеристики:

  • 64Кб ПЗУ (Flash),
  • 8Кб ОЗУ (SRAM),
  • Семь 16-битных тамймеров,
  • по два SPI, I2C и USART,
  • 12-битный 18-канальный АЦП.
Кстати, АЦП имеет два внутренних датчика: датчик температуры и датчик опорного напряжения.

На плате смонтирован программатор ST-Link/V2, сделаный на МК STMF103C8, который можно использовать отдельно. Для этого на плате предусмотрен разъем SWD и две перемычки, которые нужно снять. Питание платы осуществляется через разъем mini-USB. Наличие питания и работа программатора показываются двумя светодиодами.

В МК находится прошивка, которая при включении мигает светодиодом, что позволяет проверить работоспособность платы. О программировании платы STM32 F0 Value line Discovery через встроенный программатор я уже рассказывал.

Надеюсь, изложение было не очень сумбурным и определенную пользу вы из него извлекли


рубрика: электроника
Комментарии
Ваше имя:

Ваше мнение:

введите код:
Пользовательский поиск
 
RSS-канал
Подписка по эл.почте
 
Реклама
 
Рубрики
 
Популярные метки