STM32 vs Arduino

в 12:49, , рубрики: arduino, stm32f103, Программинг микроконтроллеров, метки:

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

STM32F103C8 Front STM32F103C8 Front

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

Для масштаба положил рядом с Arduino Pro, которая меньше обычной Arduino Uno:
Arduino vs STM32F103C8_r
По размерам сам микроконтроллер точно такой же, только шаг ножек не 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

Автор: RaJa

Источник

Поделиться

* - обязательные к заполнению поля