8-900-374-94-44
[email protected]
Slide Image
Меню

Ардуино stm32 – Дешевая STM32 плата + Arduino IDE UPD 17.08.2017 / Habr

Пишем под микроконтроллеры STM32 в Arduino IDE

Тема программирования микроконтроллеров ранее многократно поднималась в этом блоге, но исключительно в контексте микроконтроллеров AVR и, соответственно, Arduino. Сегодня же речь пойдет о микроконтроллере STM32F103C8T6 на базе ядра ARM 32 Cortex-M3. Вы наверняка слышали об архитектуре ARM — она используется в большинстве современных телефонов и планшетов, а также Raspberry Pi, полетных контроллерах для квадрокоптеров, некоторых осциллографах, и много где еще.

Список покупок

Для повторения шагов из сей заметки вам понадобится следующие железки:

К моменту, когда вы будете читать эти строки, ссылки могут устареть. Однако необходимые товары легко находятся по запросам «STM32F103C8T6 Development Board» и «ST-Link v2 Programmer» как на AliExpress, так и на eBay. Плата также известна под названием «STM32 Blue Pill».

Важно! Заметьте, что USB-разъем на этих платах часто не слишком надежно припаян и может быстро оторваться. Первым делом после покупки рекомендуется его подпаять.

О плате Blue Pill

Ниже приведены некоторые характеристики платы и используемой в ней микроконтроллера:

  • Микроконтроллер 32-х битный;
  • Рабочая частота 72 МГц;
  • 64 Кб flash-памяти;
  • 20 Кб оперативной памяти;
  • Мне удалось насчитать 32 GPIO;
  • 12-и битный АЦП, 10 аналоговых пинов;
  • 16-и битный ШИМ, 15 ШИМ-пинов;
  • 3 UART канала, 2 I2C шины, 2 SPI шины;
  • Возможность отладки по SWD;
  • Плата питается от 3.3 В;

Расположение пинов (кликабельно — GIF, 1082x759, 143 Кб, источник):

Для сравнения, Arduino Nano стоит столько же и имеет похожий форм-фактор, но работает на 8-и битном микроконтроллере, имеет частоту 16 МГц, меньше пинов, лишь 32 КБ flash-памяти, 2 Кб оперативной памяти, 10-битный АЦП, 8-и битный ШИМ, по одному каналу UART, I2C и SPI, а про отладку он и вовсе слыхом не слыхивал. То есть, за те же деньги мы получаем куда более мощную железку.

Настройка Arduino IDE

Интересная особенность платы заключается в том, что под нее можно писать из Arduino IDE, используя знакомый набор процедур и классов, а также многие библиотеки, изначально написанные под Arduino. Это делает плату весьма привлекательной для начинающих.

Для программирования под данную плату нам понадобится кросс-компилятор для ARM, отладчик, стандартная библиотека C и клиент к программатору. В Arch Linux соответствующие пакеты ставятся так:

sudo pacman -S arm-none-eabi-gcc arm-none-eabi-gdb \
  arm-none-eabi-newlib stlink

Далее учим Arduino IDE работать с нашей платой:

cd ~/opt/arduino/hardware
git clone https://github.com/rogerclarkmelbourne/Arduino_STM32.git

Мне дополнительно пришлось поправить Arduino_STM32/STM32F1/platform.txt:

# compiler.path={runtime.tools.arm-none-eabi-gcc.path}/bin/
compiler.path=/usr/bin/

… ибо сыпались ошибки про то, что Arduino IDE не может найти исполняемый файл

arm-none-eabi-g++.

После этого если открыть Arduino IDE, то в меню Tools → Board вы обнаружите большой выбор плат на базе микроконтроллеров STM32. Выбираем Generic STM32F103C. В Tools → Upload Method выбираем STLink. Четыре пина на плате с подписями 3.3V, IO, CLK и GND подключаем к пинам 3.3V, SWDIO, SWCLK и GND программатора соответственно. Проверяем джамперы на плате. Оба джампера (так называемые boot0 и boot1) должны стоять в положении 0.

Fun fact! Чтобы постоянно не возиться с проводами при подключении программатора, выясняя, провод какого цвета к какому пину платы нужно подключить в этот раз, можно взять кусок макетки и спаять адаптер на базе разъема IDC-10. Адаптер подключается к плате через четыре угловых гнезда с шагом 2.54 мм, а затем адаптер подключается к программатору через соответствующий шлейф. Больше никакой путаницы!

Пробуем скомпилировать и залить такой скетч:

void setup() {
  pinMode(PC13, OUTPUT);
}

void loop() {
  digitalWrite(PC13, HIGH);
  delay(100);
  digitalWrite(PC13, LOW);
  delay(100);
}

Fun fact! В плате Blue Pill светодиод стоит между ногой PC13 и VCC (схема [PDF]), а не между ногой и землей, как можно было бы ожидать. Поэтому, подавая HIGH на PC13, мы гасим светодиод, а подавая LOW — зажигаем.

Если при прошивке возникает ошибка:

st-flash 1.3.1
INFO src/common.c: Loading device parameters….
WARN src/common.c: unknown chip id! 0xe0042000

… проверьте, не перепутали ли вы пины CLK и IO, а также попробуйте зажать кнопку Reset на плате.

Если все сделано правильно, светодиод на плате будет мигать, а частота мигания будет меняться при внесении соответствующих изменений в код.

Поздравляю, среда разработки настроена!

Более сложный пример

Ниже приведен код посложнее, демонстрирующий использование ШИМ, аналоговых пинов, а также отладочный вывод по UART:

const int LED1 = PB8;
const int LED2 = PB9;
const int PTNT = PA0;
const int BTN = PB7;

int selected_led = LED1;
bool btn_was_high = false;

void setup() {
  pinMode(LED1, PWM);
  pinMode(LED2, PWM);
  pwmWrite(LED1, 0);
  pwmWrite(LED2, 0);
  pinMode(BTN, INPUT);
  pinMode(PTNT, INPUT_ANALOG);

  Serial.begin(115200);
}

void loop() {
  delay(100);

  if(digitalRead(BTN) == HIGH) {
    btn_was_high = true;
  } else if(btn_was_high) {
    btn_was_high = false;
    if(selected_led == LED1) {
      selected_led = LED2;
      pwmWrite(LED1, 0);
    } else {
      selected_led = LED1;
      pwmWrite(LED2, 0);
    }
  }

  int ptnt = analogRead(PTNT);
  int ptnt_mapped = map(ptnt, 0, 4095, 0, 65535);

  Serial.println(String(«ptnt = «) + ptnt + «, ptnt_mapped = » +
    ptnt_mapped);

  pwmWrite(selected_led, ptnt_mapped);

}

Соответствующая цепь, собранная на макетной плате:

При нажатии на кнопку один светодиод гаснет, а второй загорается. Яркость свечения светодиода регулируется потенциометром. Как видите, код очень мало отличается от обычного кода для Arduino. Отличаются только названия пинов, а также диапазоны значений, с которыми работают процедуры analogRead и pwmWrite.

Еще больше примеров можно найти в File → Examples → A_STM32_Examples.

Сторонние библиотеки

Многие библиотеки уже портированы под STM32 — Wire, Servo, LiquidCrystal, и другие. А что, если попытаться использовать стороннюю библиотеку с GitHub? Для эксперимента я решил попытаться воспользоваться библиотекой LiquidCrystal_I2C, уже знакомой нам по заметке Об использовании экранчиков 1602 с I2C-адаптером.

Добавляем библиотеку в Arduino IDE:

cd ~/Arduino/libraries
git clone \
 https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library.git\

 ./LiquidCrystal_I2C

Заливаем прошивку:

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, PB6, PB7);

void setup() {
  lcd.begin();
  lcd.setCursor(0, 0);
  lcd.print(«Current time:»);
}

void loop() {
  delay(100);
   
  lcd.setCursor(0, 1);
  unsigned long tstamp = millis();
  int h = tstamp / 1000 / 60 / 60;
  int m = (tstamp / 1000 / 60) % 60;
  int s = (tstamp / 1000) % 60;

  String line = String(h) + «h » +
                String(m) + «m » +
                String(s) + «s»;

  int len = line.length();
  while(len < 16) {
    line += » «;
    len++;
  }

  lcd.print(line);
}

Любуемся результатом:

Стоит помнить, что экранчику нужно 5 В, а плата питается от 3.3 В. Поэтому, чтобы все заработало, плату нужно запитать от USB, а экранчик подключить к пину 5V. Экранчик оказался совместим с 3.3-вольтовой логикой, но в более общем случае может потребоваться преобразователь логических уровней.

Само собой разумеется, не всякая библиотека, написанная под Arduino, так просто возьмет и заработает под STM32. Но, по всей видимости, для многих библиотек это действительно так.

Заключение

Итак, что же мы выяснили? Плата стоит как Arduino Nano, имеет похожий форм-фактор, но является при этом куда более мощной. Писать под нее можно точно так же, как под Arduino. При этом нам доступны если и не все те же библиотеки, что под Arduino, то по крайней мере очень многие из них.

Ссылки по теме:

А программируете ли вы под STM32 и если да, то что для этого используете?

Дополнение: Готовим «взрослую» среду разработки под STM32 в Linux

Метки: STM32, Электроника.

eax.me

Сравнение микроконтроллеров Arduino и STM32

Все, кто пользуется микроконтроллерами от Ардуино, не понаслышке знакомы с вопросом экономии. Однако покупать китайские платы от неизвестных производителей в надежде, что хоть часть из них будет работать как заявлено, — не лучшая стратегия. Но среди множества бесполезных железок можно найти и достойную дешёвую замену arduino stm32, которая уже стала известной в своих кругах.

Давайте же разберёмся, достойна ли эта плата до 10 долларов с доставкой своей популярности, и что она способна дать пользователю, в сравнении с обычной Ардуино ПРО версии. Для этого проведём разбор обоих микроконтроллеров и составим список всех их достоинств с недостатками, чтобы вы могли ответить самому себе, стоит ли тратить деньги на arduino stm32 ide.

Плата STM32

Сравнение технических характеристик

Давайте сравним две платы по их техническим параметрам:

Как мы видим — по многим параметрам ардуино проигрывает стм32. Ниже мы попробуем сравнить платы с разных сторон.

Плюсы и минусы микроконтроллеров Arduino и STM32

Начнём с достоинств преждевременного фаворита – самого ардуино. И главное из них известно всем, кто работал с данным чипом и его собратьями – собственная экосистема. Вы можете найти ответы на все возникающие вопросы в интернете, ведь база знаний и количество пользователей микроконтроллера даже в СНГ сегменте поражает. А это значит, что не придётся искать инструкции на английском, чего не скажешь об stm32f103c8t6 arduino. Большое количество пользователей подразумевает и широкий программный функционал, лишь крупинка которого предоставляется самими производителями.

Фанатская база ежедневно создаёт десятки библиотек, поэтому вы сможете воплотить в жизнь любую свою задумку. Некоторые схемные решения с микроконтроллером stm8s001j3 могут не порадовать новичков в этом деле, ардуино же старается максимально угодить новому пользователю и не предоставляет никаких сложностей.

Отсюда выплывают доступные шилды, простота использования, чем не могут похвастаться микроконтроллеры stm, и простое программирование под Atmel, без необходимости учить все тонкости языка на практике. Ну а более продвинутые оценят EEPROM, идущий с коробки, чем микроконтроллер stm32 не может похвастаться.

Однако, как и везде, есть свои недостатки:

  1. Низкий порог вхождения предполагает большое количество кривых и неотлаженных библиотек, работающих чуть ли не на последнем издыхании. Наткнувшись пару раз на такой софт и занимаясь его дебагингом в течение пары дней, вы решите, что проще написать собственный.
  2. Следующее преимущество stm32 ардуино не предоставляет нормальной отладки, из-за чего поиск ошибок в тех же кривых библиотеках и занимает так много времени.
  3. Нормальная производительность на Атмега – миф, и на деле вам потребуется изворачиваться и отказываться от многих функций продукта, чтобы он работал без подлагиваний. Нормальных планировщиков тоже не найти, а те, что можно подсоединить, съедают слишком много ресурсов. Из-за чего поделки на ардуино славятся кривым и лагающим интерфейсом с долгим временем отклика, если речь идёт о чём-то сложнее, чем электронная щеколда или конструкция из микроконтроллера и датчика движений.
  4. Множество кривой и откровенно бесполезной продукции на этих платах, в особенности от китайцев, лишь ухудшает имидж Ардуино.
  5. Нормальных книг по микроконтроллерам stm32, конечно, не найти, но и ардуино не предоставляет много профессиональной информации, помимо форумов, где отладкой занимаются сами пользователи.
  6. А сама среда разработки софта под неё требует просто невероятной производительности, не сравнимой ни с чем, что есть на рынке. Притом, куда идут все съедаемые ресурсы, не совсем понятно. А соответственно, виной всему – ужасающая оптимизация.

С другой стороны, перед пользователем встаёт arduino stm32f103 и arduino stm8 высокопроизводительный контроллер, упрощающий переход с микроконтроллера stm32 на микроконтроллер миландр и множеством периферии в дополнение.

Вы можете скачать файлы поддержки stm32 плат на Arduino IDE 1.8.x по этой ссылке.

Проектировка плат значительно облегчается благодаря свободному ходу ног, стоковая среда разработки – достаточно мощный инструмент, а отладка изначально построена так, чтобы работать без нареканий даже в чужих средах. Вам предоставляют красочные графики и точки, не говоря уже о текстовой информации. Простой перенос кода, возможность запускать отдельные контроллеры в 41 Мбитной развёртке и наличие USB портов практически везде. Всё это может запросто завлечь более продвинутых разработчиков, но им стоит ознакомиться и с рядом недостатков:

  1. Высокий порог входа, для нормального пользования необходим хороший базис.
  2. Библиотеки также присутствуют, но большинство из них устарели или же сделаны каждым лично для себя. Проще уже создать собственную. Но если вспомнить о проблемах Ардуино, то вполне вероятно, что вы уже умеете это делать.
  3. Нижние пробелы и, в целом, некрасивая семантика в сравнении с простыми функциями конкурента.
  4. С99 это всё же далеко не С++, и вы сразу прочувствуете все сложности перехода. Однако многие утверждают, что спустя время – наоборот, рады такому нюансу.
  5. В целом, дешевизна плат в сравнении с Ардуино.
Распиновка MINI-M4 для STM32

Возможности улучшения «юзабильности» STM32 до уровня Arduino

Однако не всё так плохо, как это может выглядеть. Изначально платы СТМ32 могут быть запрограммированы в среде разработки ардуино, хоть это и не лучшее решение. Следует помнить, что таким образом вы урезаете функционал, используете множество костылей и сами себе же стреляете в колено.

Однако, при переходе, это достаточно полезный нюанс, позволяющий более плавно осваивать все прелести. Семантика С99 может не прийтись по душе первые недели, оттого лучше найти транслятор, ибо среда Ардуино полностью уничтожает смысл покупки иного микроконтроллера.

Отладка микроконтроллера STM32

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

После перехода на STM32 вы со временем и вовсе забудете о выводе данных через консоль, ведь на замену этих шаблонов придут куда более разумные и практичные решения.

В следующем материале мы по шагам как можно сделать так, чтобы использовать Arduino IDE для платы STM32.

arduinoplus.ru

STM32 vs Arduino / Habr

Приехала вчера крошечная платка на STM32F103C8.

STM32F103C8 Front

Это 48ногий 32битный микроконтроллер. И это отличный вариант апгрейда для тех, кто использует Arduino.

Для масштаба положил рядом с Arduino Pro, которая меньше обычной Arduino Uno:

По размерам сам микроконтроллер точно такой же, только шаг ножек не 0.8, а 0.5мм, поэтому их поместилось в тот же корпус 48, а не 32. А вот плата с ним поменьше и стоит от $10 с доставкой.
А что у нас с функционалом?

Arduino


32 kB Flash
2 kB RAM
1 kB EEPROM
8-битная архитектура ATMEL AVR, до 20МГц, в Arduino работает на 16МГц. 1 MIPS/MHz
Напряжение питания 5В или 3.3В на 8МГц и не 5В-толерантно.

Пины общего назначения GPIO — 20
Из них:
PWM — 6 (аппаратный PWM для управления сервоприводами — 2)
Входов АЦП — 6 (10 битный)
Периферия:
Шина I2C
Шина SPI
1 UART
1х 16 битный таймер
2х 8 битных таймера
Ну и по мелочам немного: контроллер прерываний, watchdog.
Программируется либо через SPI — 4 проводный интерфейс (MOSI, MISO, SCK, RST) или через UART, если предварительно прошить бутлоадер, который занимает до 2кб флеша.

STM32F103C8


64 kB Flash (128 kb если поставить STM32F103CB (от $2.6 штука))
20 kB RAM
32-битная архитектура ARM CORTEX-M3, до 72МГц, 1.25MIPS/MHz
Напряжение питания 3.3В (2.7-3.6), почти все пины 5В-толерантны. На плате есть стабилизатор напряжения 3.3В, который питается от внешний 5В или USB.

Пины общего назначения GPIO — 26
Из них:
PWM — 12 (все пригодны для управления сервоприводами)
Входов АЦП — 6 (12 битный, 1мкс)
Периферия:
3x USART
2x I2C
2x SPI (18Mbit/s)
1 x CAN 2.0B
USB 2.0 FS (FullSpeed — 12Mbit)
3x 16 битных таймера + 1 PWM timer
DMA — 7 каналов (АЦП, SPI, I2C, USART)
RTC — часы реального времени (32768 Гц кварц уже распаян), могут работать от батареи, когда МК спит или вообще остановлен.
Backup registers — регистры, питающиеся от батарейки вместе с часами на время выключения МК от основного питания
CRC — блок вычисления контрольной суммы
96-bit уникальный ID МК

Программируется через SWD — 2-х проводный интерфейс или JTAG (промышленный стандарт).
Есть аппаратная отладка — можно заглянуть в регистры процессора, посмотреть состояние всей периферии, пошагово выполнять программу, менять руками значения в RAM и Flash, посмотреть значения переменных в любой момент, поставить Breakpoint.
Также есть вшитый бутлоадер, который невозможно стереть и он позволяет прошить МК через обычный UART, переставив перемычку.

Функционал платы

Функционал шикарный. Из недостатков только более высокий порог входа при обучении — МК так нафарширован возможностями, что не сразу получается с ними разобраться. Но есть подробная документация, есть примеры. Они не так примитивны как для AVR Atmega и тем более Arduino с ее Wiring, но и не особо сложны.

В общем, на мой взгляд плата по всем параметрам превосходит Arduino включая цену. А учитывая, что все МК STM32 серий STM32F100, F101, F102, F103, F104, F105, F107 в одном корпусе полностью pin to pin совместимы, можно расширить функционал платы, не меняя ее разводку, а просто заменив чип. Корпуса на выбор есть 48, 64, 100, 144 ноги. А у старших серий (например F4) есть и больше.

Разобрался вчера с USB HID для этой платы, проект без особых изменений адаптировал под этот МК. В итоге — подключаем плату USB шнурком. Никаких драйверов ставить не нужно — плата видится как стандартный HID девайс. Поддержка USB полностью аппаратная, до 8 endpoints. Я использую 1 endpoint для двусторонней связи с ПК. Программа на Delphi может управлять светодиодами и получать состояния кнопок в виде обычных HID репортов. Пакетный обмен куда удобнее, чем UART поток, в котором нужно возиться с заголовками, поиском начала и конца пакета. Если COM порт занят программой, то уже никто подключиться не может. Если девайс отключить, то программа не сможет корректно закрыть COM-порт. С USB HID таких проблем нет. Полностью hot-plug. Выдернул, вставил девайс обратно, программа может на лету переподключиться к нему без перезапуска.

В МК все работает на прерываниях, поэтому большую часть времени он просто отдыхает и его можно занять полезными делами, в отличие от V-USB для AVR, где МК еле справляется с программной эмуляцией USB и то ущербно.

Ну и для любителей наглядности поморгаем светодиодами 🙂

Скоро выложу у себя на сайте инструментарий для разработки под STM32: IDE EmBlocks вместе с тулчейном, который я доработал для поддержки ColinkEx и немного причесал шаблоны под часто используемые мной МК: STM32F103VE, STM32F103C8, STM32F100RB

habr.com

не Ардуино и не Discovery / Habr

Всем, кто использует или интересуется микроконтроллерами фирмы STMicroelectronics, хочу представить свой небольшой хобби-проект.

И на Хабре, и на geektimes уже достаточно много статей, посвящённых микроконтроллерам серии STM32F, например: Дешевая STM32 плата + Arduino IDE, Попытка подружиться с STM32 и ответ на неё Как надо дружиться с STM32 и многие другие. В совокупности они очень хорошо освещают эту тему, но есть одно но… Во всех этих статьях рассматриваются готовые платы и один конкретный контроллер, что на этой плате. А что делать тем, кто хочет поиграться с разными контроллерами, да ещё и на макетной плате? Например, многие известные мне платы с контроллером STM32F4 (та же STM32F4-Discovery) в макетную плату не воткнуть. Но мне лично хочется что-то типа такого (внимание, все картинки кликабельны):


При этом, как я уже написал, не хочется быть связанным конкретным контроллером, а хочется иметь возможность легко его заменить. Тех, кому интересно, как я реализовал эти не совсем обычные хотелки, прошу под кат.


Введение (навеяно комментариями к статье, поэтому просьба пропустить до прочтения оных)

Использовать или нет макетные платы с разъемами — это вопрос достаточно спорный. Конечно, начиная с какого-то количества компонент, они становятся неудобными. Но пока компонент не очень много, а количество экпериментов на начальной стадии прототипирования еще велико, макетные платы, на мой взгляд, удобны. И вот тут, если хочется использовать STM32, нас поджидает засада — их просто нет в DIP корпусах, в отличиет от той же Atmega. Можно покупать готовые демо-платы, но тут опять засада — большинство таких плат со старшими контроллерами нельзя воткнуть в макетку из-за сдвоенных гребенок. То есть, используя готовые демо-платы, мы вынуждены работать с младшими контроллерами серии (см. то же Nucleo в DIP-варианте или Blue Pill). Второй путь — делать специализированние адаптеры. В данной статье этот второй путь и рассматривается.

Сразу покажу окончательный результат. Это маленькие двусторонние платки под разные корпуса, печать которых можно заказать в Поднебесной (китайцы нечего не имеют против печати двухсторонних плат с панельным дизайном):

Один набор (справа) — это просто незамысловатые адаптеры для макетной платы для корпусов LQFP32/48/64, а вот второй набор (слева) — тоже адаптеры, но уже с JTAG-разъёмом, питанием, низкочастотным и высокочастотным кварцами и кнопкой перезагрузки. Все остальные выводы контроллера — на гребёнке. В общем, самый минимум. К сожалению, JTAG-разъём не стандартный, поэтому в комплекте есть также плата переходника с JTAG-20 на этот самый JTAG-10.

Эти платы достаточно легко паяются феном в домашних условиях, так что, имея в наличии несколько контроллеров, несколько плат и пассивные компоненты размера 0805, можно за разумное время получить что-то типа такого:

А это, как мне кажется, даёт неплохую свободу творчества. Если кому-то тема на этом кажется исчерпанной, то вот ссылка на github-репозиторий.

Я же хочу дальше пошагово рассказать, как дойти до жизни такой. Картинка для привлечения внимания (графическая постановка задачи):

Есть россыпь контроллеров (серии L0, F3, F4), питание, USART-USB конвертор, макетная плата. Хочу поморгать светодиодами. Этот шаг делается очень легко. Берём любой контроллер, плату адаптера из первого набора, паяем феном. Далее нужна документация по подключению питания, программатора, кварцев. Тут у ST полный порядок, все есть на странице с документацией выбранного контроллера. Например, для STM32F303K8 нам понадобится только один документ: AN4206: Getting started with STM32F3 series hardware development, где есть схемы подключения питания, осциллятора и программатора, на основе чего можно собрать такую модель:


У этого контроллера нет внешнего низкочастотного кварца, поэтому я подключил только высокочастотный на 16МГц. Для программирования используется стандартный разъём JTAG-20, которым оснащён стандартный программатор от ST ST-LINK/V2.


Если вы используете Linux

Драйвера уже есть в ядре, но необходимо вручную добавить несколько правил в файл /etc/udev/rules.d, см. Например, тут

Так как статья посвящена в большей степени аппаратной части, то я лишь кратко упомяну про программную часть. Операционная система: Fedora 25. Среда разработки: System Workbench for STM32 — это полностью бесплатная система на основе Eclipse от OpenSTM32 Community. Единственный момент — для скачивания необходимо зарегистрироваться на сайте http://www.openstm32.org. Для моделирования, документирования и генерирования примеров удобно использовать графическую утилиту STM32CubeMX. Например, конфигурация контроллера на фотографии выше выглядит так:

Файлы с этими схемами также есть в репозитории. Например, для STM32F303K8 см. тут

System Workbench for STM32 имеет встроенный, достаточно продвинутый мастер проектов, который генерирует начальную структуру проекта, а также по желанию может включить в проект: низкоуровневые драйвера контроллера (CMSIS), библиотеку HAL (Hardware Abstraction Layer), FatFS, FreeRTOS. Я же сам использую свою объектно-ориентированную библиотеку драйверов, которая работает поверх HAL. Кому интересно, см. тут.

Вот пример кода с использованием этой библиотеки, который по таймеру (на прерывании) мигает светодиодами и логирует (через USART-USB конвертор на консоль рабочей станции) состояние счётчика, подключённого к часам реального времени. Всё это несколько похоже на идеологию Ардуино, но мне просто нравится программировать такие вещи самому.

А вот пример использования достаточно мощного контроллера STM32F410RB:

Аналогично, основным документом является AN4488: Getting started with STM32F4xxxx MCU hardware development, где есть все необходимые схемы подключения. Второй важный документ — AN2867: Oscillator design guide for STM8AF/AL/S and STM32 microcontrollers, где подробно рассмотрена схема подключения высокочастотного осциллятора.

Естественно, постоянно городить подобные схемы достаточно затратно по времени, поэтому я и решил следующим шагом сделать по возможности универсальные платки, которые и реализуют эти схемы. Универсальность достигается за счёт того, что контроллеры разных серий, но в одинаковом корпусе (например, STM32F303RB и STM32F410RB, оба в корпусе LQFP64) имеют одинаковые выводы (за исключением небольших отличий в схеме питания). Эти отличия приводят вот к чему:

Все элементы с подписанными номиналами общие для разных контроллеров, а вот элементы типа P30, P31, P47, где цифра означает номер вывода, нужно подбирать в зависимости от конкретной модели. В результате, макетная плата будет выглядеть так:

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

→ Проект на github
Лицензия: GNU General Public License, Version 3

Схема и платы подготовлены в Eagle Cad. У безмерно уважаемого мной DiHalt есть замечательный цикл статей по этой системе. Бесплатную версию Eagle Cad для домашнего использования можно скачать с официального сайта.

Приглашаю всех желающих присоединится к проекту.

habr.com

Ардуино vs STM32

Меня часто спрашивают, почему я так плохо отношусь к ардуино. Вопросов этих стало так много, что я хочу наконец оформить это в виде статьи.

Целевая аудитория ардуины (точно так же как и распберри пай) — это дизайнеры, хипстеры, яркие представители поколения Z: то есть все те, мозги которых сначало изнасиловало MTV, потом появилась куча возможностей, и почему-то появилось отношение что нужно попробовать всё. Отсюда потрясающая неспособность концентрироваться дольше пяти минут, желание испробовать как можно больше — а времени-то нету, поэтому надо пробежать по верхам и бежать дальше.

Сюда же все эти «визуалы», которым ни черта не ясно в академическом изложении материала, им нужно как детском садике, книжку с яркими картинками, и чтобы дядя подошёл и всё объяснил. Все эти наглядные принципиальные схемы, сделанные в редакторе Fritzing — ну натурально же раскраска для детей.

Теперь к самому девайсу. Девайс этот — по сути АВРка со стабилизатором питания, кварцем и программатором. Ничего особенного оно из себя не представляет, подтверждением этому становится выпуск сотен клонов — на AVR, PIC, уже и на STM32. По сути это очень похоже на платы Discovery, но ST не старается выходить на хипстерский рынок и упрощать разработку под STM до уровня «программирования мышкой». Даже на момент выпуска в ардуино использовался очень слабый процессор, сейчас же это и вовсе выглядит смехотворно.

В чём прелесть ардуины? Весь воркфлоу («среда разработки», да и сама плата) построен так, чтобы можно было программировать не приходя в сознание. Я видел много фанатов ардуины — конечно, никакой конкуренции электронщикам они составить не могут, однако очень пыжатся доказать «я тоже могу!». Собственно, почему мне и небезразлична ардуина — потому что уже давно началось проникновение этих недодельщиков на рынок труда, и заказы на фрилансе.

Вместе с тем, я не хочу сказать что обучение и популяризация науки — это плохо, более того я сам занимаюсь этим в блоге, наверное успешно. Ведь мы все были детьми и начинающими, и нас тоже кто-то учил. Проблема лишь в том, что этими людьми выбран заведомо тупиковый путь. Эффект Даннинга-Крюгера проявляется здесь в полной мере, примером тому публикации «ардуино управляет промышленным грузовым лифтом» (простите, ЧЕМ??!! Кто его туда пустил?) или «зрение для Arduino».

Кстати, насчёт зрения — в среде ардуинщиков очень популярно выбрать относительно сложную задачу, выбрать заведомо неподходящий сверхслабый процессор (пардон, слово «выбрать» лишнее — потому что они умеют только ардуино) и доблестно решить её, чего-то кому-то там доказав. Онанизм в чистом виде.

Итог

Подводя итог, хочу лишь сказать что я хорошо отношусь к ардуино как к бизнесу. Это прям Apple в миниатюре — не было никакой потребности в ардуино, а её разработчик понял её потенциал и буквально создал рынок под неё. Теперь гребёт большие деньги и часто светится в интернете.

Я лишь испытываю снисхождение к тем, кто выбрал для себя этот путь. Перефразируя известное изречение Эдсгара «наше всё» Дейкстры, можно сказать — тот, кто начинал с ардуино, навсегда останется умственным инвалидом (кстати, в оригинальной фразе речь шла про бейсик).

catethysis.ru

Быстрый старт STM32F103C8T6 + Arduino IDE

Подробности

Отладочная плата F103C8T6 на базе STM32 по параметрам значительно опережает аналогочные по размеру Arduino Nano или Leonardo, а по скорости близка к Arduino DUE. Есть интерес попробовать, но у новичка могут возникнуть трудности с первым запуском и программированием данной платы. Теперь есть возможность заливать скетчи через Arduino IDE. Подробности далее…

Содержание

  1. Отличия STM32F103C8T6 от Arduino Nano v3.0
  2. Подготовка железа
  3. Подготовка ПО
  4. Закачка скетча (blink) в плату

 

1. Отличия STM32F103C8T6 от Arduino Nano v3.0
  STM32F103C8T6Arduino
Nano v3.0
Частота ядра 72 МГц 16 МГц
Память для кода (Flash) 64 кбайта 32 кбайта
Память для переменных ОЗУ (SRAM) 20 кбайт 2 кбайта
Рабочее напряжение 3.3В
Память EEPROM отсутствует, но существуют
программные эмуляторы
1 кбайт

 

2. Подготовка железа

Для работы нам понадобится:

Для активации режима программирования на плате STM следует преставить перемычки: первая на 1, вторая на 0.

Конвертер FTDI переключить на питание 3.3 Вольта (перемычкой/джампером)

Соединить проводами плату (П) и конвертер (К):

П(A9) -> K(RX)

П(А10) -> К(TX)

П(GND) -> K(GND)

П(3.3) -> K(VCC)

 

3. Подготовка ПО
  1. Скачать дополнение для Arduino IDE, которое будет поддерживать платы STM32
  2. Распаковать архив в папаку HARDWARE, которую можно найти в папке вашей Arduino IDE
  3. Запустить Arduino IDE (или перезапустить если была открыта) и проверить появился ли раздел STM32 Boards в списке Плат

 

4. Закачка скетча (blink) в плату

В папке которую мы распаковали в п.3.б заходим по следующему пути: Arduino_STM32\examples\Digital\Blink\  и через Arduino IDE открываем файл blink.ino либо можете взять текст отсюда:

void setup() {
  // initialize digital pin PB1 as an output.
  pinMode(PC13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(PC13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(PC13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}

Далее в Arduino IDE:

  • Выбрать плату Generic STM32F103C series
  • Выбрать Variant: (20k RAM. 64k Flash)
  • Выбрать Upload method: «Serial»
  • Выбрать Порт: (порт сооответствующий FTDI конвертеру)

Жмем кнопку Вгрузить и результат сразу должен быть виден.

Добавить комментарий

www.2150692.ru

STM32 vs Arduino — RaveniumRavenium

Приехала вчера крошечная платка на STM32F103C8.

STM32F103C8 Front

Это 48ногий 32битный микроконтроллер. И это отличный вариант апгрейда для тех, кто использует Arduino.

Для масштаба положил рядом с Arduino Pro, которая меньше обычной Arduino Uno:

По размерам сам микроконтроллер точно такой же, только шаг ножек не 0.8, а 0.5мм, поэтому их поместилось в тот же корпус 48, а не 32. А вот плата с ним поменьше и стоит от $10 с доставкой.
А что у нас с функционалом?

Arduino

32 kB Flash
2 kB RAM
1 kB EEPROM
8-битная архитектура ATMEL AVR, до 20МГц, в Arduino работает на 16МГц. 1 MIPS/MHz
Напряжение питания 5В или 3.3В на 8МГц и не 5В-толерантно.

Пины общего назначения GPIO — 20
Из них:
PWM — 6 (аппаратный PWM для управления сервоприводами — 2)
Входов АЦП — 6 (10 битный)
Периферия:
Шина I2C
Шина SPI
1 UART
1х 16 битный таймер
2х 8 битных таймера
Ну и по мелочам немного: контроллер прерываний, watchdog.
Программируется либо через SPI — 4 проводный интерфейс (MOSI, MISO, SCK, RST) или через UART, если предварительно прошить бутлоадер, который занимает до 2кб флеша.

STM32F103C8

64 kB Flash (128 kb если поставить STM32F103CB (от $2.6 штука))
20 kB RAM
32-битная архитектура ARM CORTEX-M3, до 72МГц, 1.25MIPS/MHz
Напряжение питания 3.3В (2.7-3.6), почти все пины 5В-толерантны. На плате есть стабилизатор напряжения 3.3В, который питается от внешний 5В или USB.

Пины общего назначения GPIO — 26
Из них:
PWM — 12 (все пригодны для управления сервоприводами)
Входов АЦП — 6 (12 битный, 1мкс)
Периферия:
3x USART
2x I2C
2x SPI (18Mbit/s)
1 x CAN 2.0B
USB 2.0 FS (FullSpeed — 12Mbit)
3x 16 битных таймера + 1 PWM timer
DMA — 7 каналов (АЦП, SPI, I2C, USART)
RTC — часы реального времени (32768 Гц кварц уже распаян), могут работать от батареи, когда МК спит или вообще остановлен.
Backup registers — регистры, питающиеся от батарейки вместе с часами на время выключения МК от основного питания
CRC — блок вычисления контрольной суммы
96-bit уникальный ID МК

Программируется через SWD — 2 проводный интерфейс или JTAG (промышленный стандарт).
Есть аппаратная отладка — можно заглянуть в регистры процессора, посмотреть состояние всей периферии, пошагово выполнять программу, менять руками значения в RAM и Flash, посмотреть значения переменных в любой момент, поставить Breakpoint.
Также есть вшитый бутлоадер, который невозможно стереть и он позволяет прошить МК через обычный UART, переставив перемычку.

Фунцкионал платы

Функционал шикарный. Из недостатков только более высокий порог входа при обучении — МК так нафарширован возможностями, что не сразу получается с ними разобраться. Но есть подробная документация, есть примеры. Они не так примитивны как для AVR Atmega и тем более Arduino с ее Wiring, но и не особо сложны.

В общем, на мой взгляд плата по всем параметрам превосходит Arduino включая цену. А учитывая, что все МК STM32 серий STM32F100, F101, F102, F103, F104, F105, F107 в одном корпусе полностью pin to pin совместимы, можно расширить функционал платы, не меняя ее разводку, а просто заменив чип. Корпуса на выбор есть 48, 64, 100, 144 ноги. А у старших серий (например F4) есть и больше.

Разобрался вчера с USB HID для этой платы, проект без особых изменений адаптировал под этот МК. В итоге — подключаем плату USB шнурком. Никаких драйверов ставить не нужно — плата видится как стандартный HID девайс. Поддержка USB полностью аппаратная, до 8 endpoints. Я использую 1 endpoint для двусторонней связи с ПК. Программа на Delphi может управлять светодидами и получать состояния кнопок в виде обычных HID репортов. Пакетный обмен куда удобнее, чем UART поток, в котором нужно возиться с заголовками, поиском начала и конца пакета. Если COM порт занят программой, то уже никто подключиться не может. Если девайс отключить, то программа не сможет корректно закрыть COM-порт. С USB HID таких проблем нет. Полностью hot-plug. Выдернул, вставил девайс обратно, программа может на лету переподключиться к нему без перезапуска.

В МК все работает на прерываниях, поэтмоу большую часть времени он просто отдыхает и его можно занять полезными делами, в отличие от V-USB для AVR, где МК еле справляется с программной эмуляцией USB и то ущербно.
HelloWorld через USB 🙂

ravenium.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *