Записки программиста
Тема программирования микроконтроллеров ранее многократно поднималась в этом блоге, но исключительно в контексте микроконтроллеров AVR и, соответственно, Arduino.
Сегодня же речь пойдет о микроконтроллере STM32F103C8T6 на базе ядра ARM 32 Cortex-M3.
Вы наверняка слышали об архитектуре ARM — она используется в большинстве современных телефонов и планшетов, а также Raspberry Pi, полетных контроллерах для квадрокоптеров, некоторых осциллографах, и много где еще.<\p>
Список покупок
Для повторения шагов из сей заметки вам понадобится следующие железки:
К моменту, когда вы будете читать эти строки, ссылки могут устареть. Однако необходимые товары легко находятся по запросам «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, 1082×759, 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 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
Источник: https://eax.me/stm32-arduino-ide/
Ардуино vs STM32
Меня часто спрашивают, почему я так плохо отношусь к ардуино. Вопросов этих стало так много, что я хочу наконец оформить это в виде статьи.
Целевая аудитория ардуины (точно так же как и распберри пай) — это дизайнеры, хипстеры, яркие представители поколения Z: то есть все те, мозги которых сначало изнасиловало MTV, потом появилась куча возможностей, и почему-то появилось отношение что нужно попробовать всё. Отсюда потрясающая неспособность концентрироваться дольше пяти минут, желание испробовать как можно больше — а времени-то нету, поэтому надо пробежать по верхам и бежать дальше.
Сюда же все эти «визуалы», которым ни черта не ясно в академическом изложении материала, им нужно как детском садике, книжку с яркими картинками, и чтобы дядя подошёл и всё объяснил. Все эти наглядные принципиальные схемы, сделанные в редакторе Fritzing — ну натурально же раскраска для детей.
Теперь к самому девайсу. Девайс этот — по сути АВРка со стабилизатором питания, кварцем и программатором. Ничего особенного оно из себя не представляет, подтверждением этому становится выпуск сотен клонов — на AVR, PIC, уже и на STM32.
По сути это очень похоже на платы Discovery, но ST не старается выходить на хипстерский рынок и упрощать разработку под STM до уровня «программирования мышкой».
Даже на момент выпуска в ардуино использовался очень слабый процессор, сейчас же это и вовсе выглядит смехотворно.
В чём прелесть ардуины? Весь воркфлоу («среда разработки», да и сама плата) построен так, чтобы можно было программировать не приходя в сознание.
Я видел много фанатов ардуины — конечно, никакой конкуренции электронщикам они составить не могут, однако очень пыжатся доказать «я тоже могу!».
Собственно, почему мне и небезразлична ардуина — потому что уже давно началось проникновение этих недодельщиков на рынок труда, и заказы на фрилансе.
Вместе с тем, я не хочу сказать что обучение и популяризация науки — это плохо, более того я сам занимаюсь этим в блоге, наверное успешно. Ведь мы все были детьми и начинающими, и нас тоже кто-то учил.
Проблема лишь в том, что этими людьми выбран заведомо тупиковый путь.
Эффект Даннинга-Крюгера проявляется здесь в полной мере, примером тому публикации «ардуино управляет промышленным грузовым лифтом» (простите, ЧЕМ??!! Кто его туда пустил?) или «зрение для Arduino».
Кстати, насчёт зрения — в среде ардуинщиков очень популярно выбрать относительно сложную задачу, выбрать заведомо неподходящий сверхслабый процессор (пардон, слово «выбрать» лишнее — потому что они умеют только ардуино) и доблестно решить её, чего-то кому-то там доказав. Онанизм в чистом виде.
Итог
Подводя итог, хочу лишь сказать что я хорошо отношусь к ардуино как к бизнесу. Это прям Apple в миниатюре — не было никакой потребности в ардуино, а её разработчик понял её потенциал и буквально создал рынок под неё. Теперь гребёт большие деньги и часто светится в интернете.
Я лишь испытываю снисхождение к тем, кто выбрал для себя этот путь. Перефразируя известное изречение Эдсгара «наше всё» Дейкстры, можно сказать — тот, кто начинал с ардуино, навсегда останется умственным инвалидом (кстати, в оригинальной фразе речь шла про бейсик).
Источник: http://catethysis.ru/arduino-vs-stm32/
Дешевая STM32 плата + Arduino IDE
Хотите прокачать ваши Arduino проекты? Заставить их работать быстрее, измерения и регулировку сделать точнее, ну и добавить баги, с новыми девайсами они неизбежны. Тогда эта статья для Вас.
Arduino тема всё больше захватывает умы человечества, но рано или поздно мы встречаемся с тем, что нам чего-то не хватает, например бюджета/размеров/пиновпортов/разрядности/производительности… Как говорил один мудрый человек — «Кто хочет, тот ищет возможности, кто не хочет — ищет причины».
Хорошие люди это понимают, и потихоньку начинают приобщать STM32 к ардуино теме, ибо восьмибитные AVR микроконтроллеры, на которых основано немало ардуино плат, не всегда могут справиться с поставленными задачами.
Краткое изложение данной статьи в видео формате:
Ладно, меньше лирики и ближе к теме. В этой статье, я буду рассматривать дешёвую отладочную плату, которая основана на базе микроконтроллера STM32F103C8T6:
Для начала, сравним основные параметры STM32 платы, и её аналога по цене — Arduino Nano V3.0:
- Рабочая частота 72 МГц, против 16 у ардуино;
- Объем Flash памяти 64 Кбайта, против 32;
- Оперативной памяти, она же RAM(где хранятся переменные), у STM32 целых 20 Кбайт, у ардуинки всего лишь 2;
- Быстрый 12-ти битный АЦП, в то время как у Arduino плат, что на базе AVR микроконтроллеров(это как правило большинство) используется 10-ти битный. Это означает, что в случае STM32, функция analogRead(*); будет возвращать 0..4095 против 0..1023, что в первом случае ведёт к более точным измерениям;
- 16-ти битный аппаратный ШИМ, против 8-ми у Arduino плат, то есть, функция analogWrite(*);pwmWrite(*); может принимать значение 0..65535, против убогих 0..255. Это позволит ещё точнее управлять нашими двигателями, сервами и прочими девайсами, которые рулятся при помощи ШИМ;
- Аппаратная работа с USB, чем не может похвастаться не одна Arduino плата стоимостью менее 2 долларов;
- Напряжение питания — от 2 до 3.6В(прямо таки заточено под 2 AA батарейки), против 2.7…5В у ардуино плат;
- Цены на момент написания статьи — 1.9 доллара против 1.8(алиэкспресс).
Очевидно, что отладочная плата на базе STM32 выигрывает по всём параметрам у Arduino Nano, исключением является разве что стоимость, но согласитесь 10 центов — хорошая цена за большую производительность, а про периферию, которой нафарширован STM32, так я вообще молчу, чего только стоят DMA или интегрированные в микроконтроллер часы реального времени.
Всё это в сумме делает данную плату крайне привлекательной во всём, кроме одного — новичку, как например мне, тема STM32 кажется слишком затратной по времени, есть целые сайты посвящённые программированию этих микроконтроллеров. А вот если подружить STM32 с Arduino IDE, то порог вхождения опускается до крайне низкого уровня. Хотя, как говориться, «В каждой бочке мёда, есть ложка дёгтя», но об этом чуть ниже.
Приступим к подготовке платы, для работы с Arduino IDE. Первое что необходимо сделать — залить в микроконтроллер специальный загрузчик, который позволит прошивать плату через аппаратный USB, причём прямо из среды разработки. Для этого необходимо перевести верхний джампер(он же «BOOT0»), в положение «1»:
Для чего нужны BOOT0 и BOOT1 джамперыДело в том, что в STM32 с завода прошит, в так называемую системную память(system memory), специальный загрузчик, который позволяет прошивать плату через самый обычный USB to UART переходник, не прибегая к специфическим программаторам типа ST-Link V2.
Дальше нам понадобиться переходник с USB на UART. Стоит помнить, что STM32, это 3.3 В логика, совместимость с 5-ти вольтовой не гарантируется, поэтому рекомендовано использовать USB to UART, у которого есть возможность выбора режимов работы с 3.3/5В логикой. Я использовал дешёвый переходник на базе CH340G:
* как видно, производитель не стал заворачиваться со смывкой флюса, на работу, конечно, никак не влияет.
Плату подключил к USB to UART переходнику следующим образом:
G GND; 5V 5V; PA10 TXD;
PA9 RXD.
* PA10/PA9 на плате подписаны просто как A10/A9 — эти порты являются первым аппаратным USART'ом, всего их на плате 3, так же тут 2 аппаратных I2C и 2 SPI.
Ради удобства запитал плату от 5 В, для питания от 3.3 В на плате есть пин «3.3». Внимание, 5 В может запросто вывести микроконтроллер из строя, так что уделите должное внимание подключению.
Качаем, устанавливаем и запускаем Flash Loader Demonstrator(есть в архиве к статье):
Выбираем номер COM-порта нашего переходника, в моём случае это COM43, потом нажимаем «Next»:
Так как у меня микроконтроллер новый, ещё муха не сидела на него никто ничего не записывал(разумеется кроме самого производителя), то тут по умолчанию стоит защита от чтения, программа нас предупреждает, что если нажать кнопку «Remove protection», Flash память будет очищена, то есть если бы там была какая-то прошивка — она удалится. В моём случае там ничего полезного нет, так что смело жму. Далее вижу следующее:
Жмём «OK»:
Так как моя отладочная плата основана на микроконтроллере STM32F103C8 — здесь 64 Кбайт Flash памяти, есть ещё STM32F103CB микроконтроллер, где в два раза больше Flash.
Дальше кликаем «Next»:
Опять «Next», и видим следующее окно:
Выбираем «Download to device» и жмём на “…”:
Меняем тип файлов на *.bin и открываем файл «generic_boot20_pc13.bin»(тоже присутствует в архиве) который можно взять из проекта STM32duino-bootloader.
Дальше кликаем на кнопку «Next», после прошивки загрузчика мы увидим зелёный свет:
Потом надо скачать, для среды разработки Arduino IDE, специальное STM32 ядро(так же есть в архиве к статье). Тут есть один нюанс, на момент написания статьи, ядро не работает на версиях среды разработки свыше 1.6.5, у меня стоит 1.6.5-r5 которую скачал тут.
Дальше разархивируем содержимое по адресу Мои ДокументыArduinohardware:
В моём случае полный путь выглядит вот так — «C:UsersRSKDocumentsArduinohardware»
Разумеется, что система устройство определить не сумеет, поэтому надо ещё установить драйвера на плату. Заходим в папку «Мои ДокументыArduinohardwareArduino_STM32driverswin»(или «driverswin», в случае архива к статье), и запускаем от имени администратора файл «install_drivers.bat»:
После этого верхний джампер(тот что «BOOT0»), переводим в положение «0» и подключаем плату к компьютеру через microUSB кабель:
Она должна в диспетчере устройств определиться или как «Maple DFU» или «Maple Serial (COM*)»:
Не совсем понятно почему после первого подключения плата определяется по-разному, на разных компьютерах, но не суть, приступаем к настройке Arduino IDE.
Запускаем среду разработки, дальше Инструменты -> Плата -> Boards Manager:
Здесь нужно установить ядро для платы Arduino Due. Выбираем последнюю версию и нажимаем «Install»:
Потом Инструменты -> Плата -> «Generic STM32F103C», дальше Variant: «STM32F103C8 (20k RAM. 64k Flash)», Upload Method: «STM32duino bootloader», Порт — номер COM-порта платы, вообщем всё как на скрине:
Всё, плата готова к прошивке и программированию в среде разработки Arduino IDE. Давайте прошьём какой-то скетч из примеров, которые «вшиты» в ядро, заходим Файл -> Папка со скетчами -> hardware -> Arduino_STM32 -> STM32F1 -> libraries -> A_STM32_Examples -> Digital -> Blink:
Классический «Hello World» в мире микроконтроллеров. Изменяем PB1 на PC13, так как светодиод, что на плате, подключен к этому порту:
* К стати, загорается он по низкому уровню на ножке PC13.
Нажимаем кнопку «Вгрузить», после прошивки среда разработки выдаст что-то типа:
«Done! Resetting USB to switch back to runtime mode
error resetting after download: usb_reset: could not reset device, win error: Не удается найти указанный файл.».
Но прошивка то загрузилась успешно, хотя не всегда так, иногда Arduino IDE выдаёт другие сообщения.
Couldn't find the DFU deviceКогда видите, сообщение типа:
«dfu-util — © 2007-2008 by OpenMoko Inc. Couldn't find the DFU device: [1EAF:0003]
This program is Free Software and has ABSOLUTELY NO WARRANTY»
Это означает, что плату прошить не удалось.
Searching for DFU device [1EAF:0003]…Когда среда разработки выдаёт:
«Searching for DFU device [1EAF:0003]…
Assuming the board is in perpetual bootloader mode and continuing to attempt dfu programming…»
И больше ничего не происходит, попробуйте в этот момент перезагрузить плату клацнув кнопку ресет. По аналогии это как с Arduino Pro Mini.
А теперь про «ложку дёгтя», о которой я писал вначале статьи, почему-то не всегда получается прошить плату в среде разработки, даже больше, она не всегда определяется компьютером. Я для себя это решил следующим образом, перед тем как загрузить прошивку(перед нажатием кнопки «Вгрузить»), клацаю «Reset» на плате, и после прошивки, ещё раз перезагружаю плату.
В этом случае процент вероятности, что плата прошьется, равен 99%. Непонятно почему работает именно так, но факт. Думаю, что рано или поздно этот косяк поправят, и всё будет автоматом перезагружаться как нужно.
А чтобы это быстрее поправили, надо чтобы комьюнити этой замечательной STM32 отладочной платы росла, поэтому делитесь этой статьей с друзьями, особенно с друзьями программистами.
По поводу распиновки:
КликабельноЛучшее что мне удалось найти, это распиновка самого микроконтроллера(открывайте в новой вкладке):
(с) www.stm32duino.com/viewtopic.php?p=11137
К порту нужно обращаться по полному имени, например:
digitalWrite(PB0, LOW);
analogWrite(PA8, 65535);pwmWrite(PA8, 65535); analogRead(PA0);
LiquidCrystal lcd(PB0, PA7, PA6, PA5, PA4, PA3);
Ещё рекомендую зайти на сайт docs.leaflabs.com/docs.leaflabs.com/index.html там есть много чего интересного по теме программирования в Arduino IDE, правда на английском языке.
Я порылся в файлах ядра, и нашёл один интересный файл:
DocumentsArduinohardwareArduino_STM32STM32F1variantsgeneric_stm32f103cboard.cpp
Там прописаны все порты, которые поддерживают:
- ШИМ, то есть функция analogWrite();pwmWrite(); — PB0, PA7, PA6, PA3, PA2, PA1, PA0, PB7, PB6, PA10, PA9, PA8, а это далеко не все, которые размечены на распиновке чипа;
- АЦП, аля analogRead(); — PB0, PA7, PA6, PA5, PA4, PA3, PA2, PA1, PA0.
Так что имейте это ввиду. Хотя этого более чем достаточно от платы, стоимостью в 1.9 доллара.
Ещё заметил, что пины PA12/PA11 подключены к D+/D- USB, их лишний раз лучше вообще не трогать, ибо чуть что, на кону не 2-х долларовый кусок стеклотекстолита с чипом, а материнская плата компьютера.
Схема отладочной платы:
Кликабельно
Ну и на последок:
Привет geektimes.ru//https://github.com/mk90/LiquidCrystalRus //STM32 в массы! #include LiquidCrystalRus lcd(PB9, PB8, PB7, PB6, PB5, PB4); void setup() { lcd.begin(16, 2); lcd.print(“Привет”); lcd.setCursor(0, 1); lcd.print(“geektimes.ru”);
} void loop() { lcd.setCursor(14, 1); lcd.print(millis() / 1000);
}
Ссылки:
Архив к статье;
Сайт товарища Roger Clark, посвящённый портированию STM32, вопросы/предложения/благодарности, всё туда;
https://github.com/rogerclarkmelbourne/Arduino_STM32;
http://docs.leaflabs.com/docs.leaflabs.com/index.
html — именно этот проект был взят Роджером за основу, поэтому там много чего полезного, правда, на английском языке;
Arduino IDE версии 1.6.
5-r5 скачать можно тут;
Моя статья, в какой-то мере пересекается с “STM32 vs Arduino” товарища RaJa ;
Даташит на STM32F103C8T6;
Все мои публикации на geektimes.
P.S.
Что ещё забылЗабыл добавить фото платы с обратной стороны:
Тут почти ничего нет, стабилизатор и немного резисторов с конденсаторами.
Так же не рассказал, что дополнительно пропаивал microUSB разъем:
Потому что не особо внушала доверие пайка, точнее, её полное отсутствие.
Источник: http://www.pvsm.ru/arduino/152569
Быстрый старт STM32F103C8T6 + Arduino IDE
Подробности Создано: 25 февраля 2016
Отладочная плата F103C8T6 на базе STM32 по параметрам значительно опережает аналогочные по размеру Arduino Nano или Leonardo, а по скорости близка к Arduino DUE. Есть интерес попробовать, но у новичка могут возникнуть трудности с первым запуском и программированием данной платы. Теперь есть возможность заливать скетчи через Arduino IDE. Подробности далее…
Содержание
1. Отличия STM32F103C8T6 от Arduino Nano v3.0
Частота ядра | 72 МГц | 16 МГц |
Память для кода (Flash) | 64 кбайта | 32 кбайта |
Память для переменных ОЗУ (SRAM) | 20 кбайт | 2 кбайта |
Рабочее напряжение | 3.3В | 5В |
Память EEPROM | отсутствует, но существуютпрограммные эмуляторы | 1 кбайт |
2. Подготовка железа
Для работы нам понадобится:
Для активации режима программирования на плате STM следует преставить перемычки: первая на 1, вторая на 0.
Конвертер FTDI переключить на питание 3.3 Вольта (перемычкой/джампером)
Соединить проводами плату (П) и конвертер (К):
П(A9) -> K(RX)
П(А10) -> К(TX)
П(GND) -> K(GND)
П(3.3) -> K(VCC)
3. Подготовка ПО
- Скачать дополнение для Arduino IDE, которое будет поддерживать платы STM32
- Распаковать архив в папаку HARDWARE, которую можно найти в папке вашей Arduino IDE
- Запустить Arduino IDE (или перезапустить если была открыта) и проверить появился ли раздел STM32 Boards в списке Плат
4. Закачка скетча (blink) в плату
В папке которую мы распаковали в п.3.б заходим по следующему пути: Arduino_STM32examplesDigitalBlink и через 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 конвертеру)
Жмем кнопку Вгрузить и результат сразу должен быть виден.
Источник: http://www.2150692.ru/faq/112-quick-start-stm32f103c8t6
Программирование STM32F103C8T6 в среде Arduino IDE
Отладочная плата STM32F103C8T6 по параметрам значительно опережает схожие по размеру Arduino Nano или Leonardo, а по скорости близка к Arduino DUE.
Такие характеристики вызывают большой интерес к такой плате, но у новичков могут возникнуть трудности с первым запуском и программированием данной платы. Теперь есть возможность заливать скетчи через Arduino IDE.
Для этого достаточно лишь добавить STM32 в менеджер плат и воспользоваться программатором.
Основные отличия STM32F103C8T6 от Arduino Nano v3.0
Частота ядра | 72 МГц | 16 МГц |
Память для кода (Flash) | 64 кбайта | 32 кбайта |
Память для переменных ОЗУ (SRAM) | 20 кбайт | 2 кбайта |
Рабочее напряжение | 3.3В | 5В |
Память EEPROM | отсутствует, но существуютпрограммные эмуляторы | 1 кбайт |
Подготовка аппаратной части
Для работы нам понадобится:
Для активации режима программирования на плате STM следует переставить перемычки: первая на 1, вторая на 0.
Конвертер FTDI переключить на питание 3.3 Вольта (перемычкой/джампером)
Соединить проводами плату (П) и конвертер (К):
П(A9) -> K(RX)
П(А10) -> К(TX)
П(GND) -> K(GND)
П(3.3) -> K(VCC)
Подготовка программной части
- Скачать дополнение Arduino STM32F4 Boards для Arduino IDE, которое будет поддерживать платы STM32 непосредственно из Arduino IDE.
- Установить скачанное дополнение.
- Перезапустить Arduino IDE и проверить появился ли раздел STM32 Boards в списке Плат
Заливка скетча
Создаем файл со следующим содержимым:
// initialize digital pin PB1 as an output.// the loop function runs over and over again forever 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 конвертеру)
Жмем кнопку Загрузка и результат сразу должен быть виден.
https://www.youtube.com/watch?v=-swzPsSIkEw
Материал взят отсюда — http://www.2150692.ru/faq/112-quick-start-stm32f103c8t6
Источник: http://arduino-geek.pp.ua/programmirovanie-stm32f103c8t6-v-srede-arduino-ide/
Обзор микроконтроллеров семейства STM32F4 – Мир Электроники
Основанные на ARM Cortex-M4 микроконтроллеры серии STM32 F4 являются продолжением ведущей линейки STM32, обладая еще более высокой производительностью.
Так же, как серия STM32 F2, эти микроконтроллеры изготавливаются по 90нм-технологии и используют запатентованный ST Microelectronics’ом ART Accelerator для достижения наилучших результатов тестов среди основанных на ядре Cortex-M микроконтроллеров, достигая показателей в 225 DMIPS/606 CoreMark и работая с флеш-памятью на частоте 180 МГц.
Инструкции DSP и модуль операций с плавающей точкой дают возможность применять данные контроллеры в широком спектре проектов. Динамическое потребление питания позволяет снизить потребление тока при выполнении кода из флеш-памяти до 140 мкА/МГц для STM32F401 (максимальная частота до 84 МГц) и до 238 мкА/МГц для STM32F42x/43x, работающих на частоте до 180 МГц.
Микроконтроллеры серии STM32 F4 являются сигнальными микроконтроллерами (англ. digital signal controller, DSC). Серия состоит из пяти классов продуктов, которые полностью совместимы по выводам, периферии и програмному коду.
Характеристики серии:
- STM32F401– 84 MHz CPU/105 DMIPS. Является экскурсом в серию STM32 F4, предлагая низкое потребление питания и корпуса малых размеров, в отличии от остальных классов серии STM32 F4.
- STM32F405/415 – 168 MHz CPU/210 DMIPS, до 1 МБайт флеш памяти с расширенными возможностями сопряжения и шифрования.
- STM32F407/417 – 168 MHz CPU/210 DMIPS до 1 МБайт флеш памяти с наличием Ethernet MAC и интерфейсом камеры для STM32F405/415.
- STM32F427/437 – 168 MHz CPU/210 DMIPS, до 2 МБайт флеш, дополняя STM32F407/F417 расширенными возможностями сопряжения и шифрования.
- STM32F429/439 – 180 MHz CPU/225 DMIPS, до 2 МБайт двухбанковой флеш-памяти с интерфейсом SDRAM, контроллером TFT LCD, технологией акселлерации Chrom-ART, последовательным аудиоинтерфейсом, предлагая большую производительность и меньшее энергопотребление по сравнению с STM32F4x7/F4x5.
1.2. Общие характеристики семейства
Общие характеристики МК семейства:
- ARM 32-bit Cortex-M4 CPU;
- Частота тактирования 168МГц, 210 DMIPS/1.25 DMIPS/МГц (Dhrystone 2.1);
- Поддержка DSP-инструкций;
- Новая высокопроизводительная AHB-матрица шин;
- До 1 Mбайта Flash-памяти;
- До 192 + 4 кбайт SRAM-памяти;
- Напряжение питания 1,8…3,6В (POR, PDR, PVD и BOR);
- Внутренние RC-генераторы на 16МГц и 32кГц (для RTC);
- Внешний источник тактирования 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;
- CAN (2,0 B Active);
- USB 2.0 FS/HS OTG;
- 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-битный уникальный ID;
- Модуль шифрования AES 128, 192, 256, Triple DES, HASH (MD5, SHA-1), HMAC;
- Расширенный температурный диапазон -40…105°C.
1.3. Встроенные интерфейсы коммуникации
Ethernet. Данный блок присутствует не во всех продуктах семейства, а лишь в контроллерах STM32F407 / STM32F417. Блок выполнен в строго по стандарту IEEE802.3.
Возможна передача данных со скоростью 10/100 Мбит/с. Доступна синхронизация часов для чего протокол IEEE1588 v2 реализован аппаратно. Для оптоволоконной либо медной линии требуется применение стороннего приемопередатчика.
PHY-трансивер соединяется напрямую с портом MII или RMII.
USB (Universal Serial Bus). На борту присутствует два раздельных блока USB.
- Первый – USB OTG full-speed, является полностью аппаратной реализацией и совместим со стандартами USB 2.0, а также OTG 1.0. Работает на скорости до 12 Mбит/с. Поддерживается работа в режиме Host/Device/OTG. Присутствует SRP (Session request protocol) и HNP (Host negotiation protocol).
- Второй – USB OTG high-speed работает в режиме Host/Device/OTG с высокой скоростью 480 Мбит/с, для чего необходим блок приемопередатчика, работающего на высокой скорости через специальный ULPI-интерфейс.
SDIO (Secure Digital Input/Output). Интерфейс позволяет работать с картами SD/SDIO/MMC-картами памяти и дисковыми контроллерами CE-ATA.
В восьмибитном режиме несущая частота обмена данными составляет 48 MHz. Контроллер соответствует таким стандартам: SD Memory Card 2.0, MultiMediaCard System 4.
2 (работа в режимах 1/4/8 бит), SD I/O Card 2.0 (режимы 1го и 4х бит), CE-ATA 1.1.
SPI (Serial Peripheral Interface). Устройство оснащено тремя блоками SPI, каждый из которых работает в режиме Мaster (Мultimaster) либо в режиме Slave, передавая данные полудуплексно, полнодуплексно либо симплексно.
Поддерживается аппаратный расчет контрольных сумм CRC для повышения помехоустойчивости канала связи: так CRC может быть передан последним байтом слова в режиме Tx, присутствует автопроверка правильности CRC последнего пришедшего байта.
Блок устройства SPI1 работает на скоростях вплоть до 37,5 Mбит/с. Другие ограничены максимальной скоростью в 21 Мбит/с.
Передача данных идет в виде 8- или 16-битных блоков, вперед младшим либо старшим битом. При чем допускается программная замена фазы и полярности сигнала тактирования.
USART (Universal Synchronous Asynchronous Receiver Transmitter). В микроконтроллер встроено четыре блока USART и два UART (Universal Asynchronous Receiver Transmitter).
Блоки USART1 и USART6 допускают высокоскоростной обмен данными на скорости до 10,5 Mбит/с. Другие же поддерживают скорость не более 5,25 Mбит/с.
На нативном уровне присутствует поддержка передачи данных согласно стандарта NRZ (Non Return to Zero).
Обмен данными осуществляется с использованием 8- либо 9-битных блоков, один или два бита которых выделены как стоп-биты и биты проверки четности. USART можно сконфигурировать на режим SPI, блок USART при этом выступает в роли ведущего устройства SPI.
Используя блок USART можно организовать подключение к интерфейсу LIN, нашедшему применение в автомобильной промышленности, либо настроить на энкодинг/декодинг ИК-сигнала IrDA. Возможна работа с модемами по линиям управления RTS и СTS.
Поддерживается работа со смарт-карточками.
I2C (Inter-Integrated Circuit). На борту МК содержится три блока I2C, поддерживающих работу в режиме Master/Slave (ведущий или ведомый), а также в режиме Мultimaster (режим в котором на шине присутствуют несколько Master-устройств, разделяющих общие ресурсы Slave, либо поочередно изменяющих свое состояние с Master на Slave и обратно).
В составе устройства имеется модуль диагностики и исправления пакетных ошибок PEC. Используется 7-битный и 10-битный режим адресации. Поддерживаются общепринятые для протокола скорости обмена данными до 100 kHz в простом режиме и 400 kHz в режиме сверхбыстрого обмена данными. Модули могут быть сконфигурированны на расширенные протоколы SMBus 2.0 и PMBus.
I2S (Inter-Integrated Sound). В микроконтроллере присутствуют два мультиплексированных блока I2S со встроенным SPI. Оба модуля могут быть сконфигурированны на работу в режиме Мaster либо Slave. Данные передаются по 16, 24 или 32 бита полнодуплексно или симплексно.
Среди поддерживаемых протоколов такие: Phillips I2S, PCM, MSB и LSB с выравниванием данных. Интерфейс I2S был разработан для обмена звуковыми данными в цифровом формате. Отныне для тактирования присутствует отдельный PLL, делающий возможным генерацию частот сэмплов аудио от 8 до 192 kHz с погрешностью не более 0,01%.
CAN (Controller Area Network). На борту находится два CAN-модуля, работающих по стандартам 2.0А и 2.0В, скорость работы при этом достигает 1 Мбит/с. Модули могут работать со стандартными, а также с расширенными кадрами. Модуль CAN содержит три буфера передачи, трехкаскадный FIFO-стек и 28 банков фильтров (распределены и масштабируемы).
DCMI (Digital Camera Interface). Присутствует в контроллерах STM32F407 и STM32F417. При помощи данного интерфейса можно организовать прямое подключение к камере или CMOS-матрице.
Возможна внутренняя и внешняя синхронизация покадрово или построчно, работа в непрерывном режиме, автообрезка лишних частей изображения.
Среди поддерживаемых форматов 8/10/12/14-битное прогрессивное видео, YCbCr 4:2:2 и RGB 565, JPEG.
FSMC (Flexible Static Memory Controller). Блок используется для подключения жидкокристаллических дисплеев либо внешней памяти напрямую. Блок содержится лишь в 100-, 144- или 176-пиновых корпусах.
Возможно сопряжение с подключенной синхронной либо асинхронной памятью или PCMCIA-устройствами. В основном блок предназначен для выдачи данных МК в соответствующем подключенным устройствам виде без лишних затрат процессорного времени на перекодирование данных.
Таким образом каждое внешнее устройство имеет собственный адрес из пула, собственные сигналы для управления. Подав необходимый сигнал выбора микросхемы можно получить доступ к тому или иному внешнему устройству (одновременное использование не допустимо).
Возможно подключение таких типов памяти как NAND Flash, Compact Flash, NOR Flash, SRAM и PSRAM.
Интерфейс сконфигурирован для работы с LCD-контроллерами Motorola 6800 и Intel 8080, однако может быть легко использован для сопряжения с контроллерами других производителей.
1.4. Блок-схема переферии
На рис. изображена переферия МК STM32F407VGT6, использующегося в рекомендованой производителем отладочной плате для быстрого старта STMF4-DISCOVERY
Переферия STM32F405xx, STM32F407xx
1.5. Работа с аналоговыми сигналами
На борту содержится три АЦП и два одноканальных ЦАП.
АЦП имеет хорошую разрешающую способность 12 бит и очень высокую скорость преобразования, составляющую 2,4 МСемпла в одиночном режиме и 7,2 МСемпла – в тройном режиме. Максимально доступное число аналоговых каналов – 24. Как и в большинстве современных МК, присутствует генератор опорного напряжения.
Гибкая система настроек встроенного аналогового мультиплексора позволяет задавать любые последовательности преобразования аналоговых каналов (за исключением одновременного преобразования одного канала на нескольких АЦП). Настройки АЦП позволяют производить однократные и циклические измерения.
Для проведения преобразования на максимальных скоростях необходимо соблюдать диапазон напряжения питания 2,4…3,6 В. При снижении напряжения до 1,8 (1,7) В скорость преобразования снижается до 1,2 мегасемплов. Для контроля внутренней температуры микроконтроллера встроен температурный датчик. На его выходе формируется напряжение в зависимости от окружающей температуры.
Выход датчика через мультиплексор подключается к АЦП. Используя температурный датчик, можно измерять температуру от -40 до 125°C с точностью ±1,5°C.
ЦАП обладает разрешающей способностью 12 бит, преобразование возможно в 8/12-битовом формате с выравниванием этого результата по левому или правому краям. Так как ЦАП содержит два канала, то есть возможность формирования стереосигнала. Доступна функция автоматической генерации шумового сигнала с меняющейся амплитудой или треугольного сигнала.
1.6. Быстрый старт и отладка
Для подключения микроконтроллера к отладочным средствам используется четырехпроходный JTAG-интерфейс или двухпроводный SWD (Serial Wire Debug). Выходы SWD-интерфейса мультиплексированы с выходами JTAG. Разработчику дается возможность в выборе интерфейса отладки/программирования.
Интегрированная макроячейка трассировки (Embedded Trace Macrocell) значительно расширяет функции отладки, позволяя наблюдать за потоком инструкций и данных внутри ядра CPU в реальном времени. Данные выводятся через небольшое количество ETM-ножек на внешний TDA-анализатор.
Существует также специальный пакет в Matlab для генерирования и создания кода алгоритмов цифровой обработки сигналов для ядра Cortex-M4. Это заметно облегчяет применение ЦОС в микроконтроллерах на ядре Cortex-M4.
ST Microelectronics предлагает разработчикам начать знакомство с микроконтроллерами STM32F4 с приобретения недорогой отладочной платы STM32F4-DISCOVERY (рис. 5, 6) из серии плат Discovery, хорошо известных разработчикам на рынке.
За невысокую цену(заявленная производителем стоимость составляет 14.25 у.е.), разработчик получает полноценную отладочную плату с программатором-отладчиком ST-Link и может начинать осваивать STM32 без дополнительных затрат.
На этот раз в плате помимо встроенного программатора-отладчика присутствуют такие опции как МЭМС-датчики (акселерометр и микрофон), USB и аудиокодек с разъемом для подключения наушников или колонок.
Новые компоненты на отладочной плате вкупе с ядром Cortex-M4 и периферией STM32F4x позволяют быстро освоить микроконтроллеры данного семейства.
Источник: http://electronicsworld.ru/intro-stm32f4/
32-разрядные платы Arduino
Микроконтроллерная платформа Arduino популярна во всем мире. Благодаря бесплатной среде разработки, простому языку программирования и неплохой архитектуре, эту платформу выбирают множество пользователей.
В сети интернет можно найти огромное количество разнообразных проектов, практически на любой вкус. В последнее время интерес разработчиков смещается в сторону 32-разрядных систем.
Следует веяниям моды и платформа Arduino.
Проект Arduino появился сравнительно давно, чем объясняется использование в нем 8-битного микроконтроллера серии AVR. Хотя вычислительных возможностей, особенно у последних моделей, вполне достаточно для начинающих, опытные разработчики могут испытывать нехватку ресурсов.
Проблема частично снимается вариантом MEGA, но и его быстродействие не велико. К тому же в последнее время на рынке появилось большое число моделей 32-разрядных микроконтроллеров, по очень привлекательной цене.
Учитывая общую идеологию проекта Arduino, нацеленную на минимальную зависимость разработчика от аппаратных ресурсов, использование современных процессоров стало вопросом времени.
Пробным шагом, на пути внедрения 32-разрядных микроконтроллеров в архитектуру Arduino-подобных систем, выступил NETDuino. Базовая плата этого проекта совместима по разъемам с платформой UNO, но построена вокруг чипа AT91SAM7X512-AU.
Несмотря на название, созвучное с итальянским наименованием исходной платформы, этот проект не является полноценной реализацией идеологии Arduino. Причиной тому – применение технологии .NET для разработки программ.
Но несмотря на поддержку Microsoft, NETDuino не получил большой популярности, которую можно было бы сравнить с прототипом.
Первой, полностью совместимой с Arduino платформой (по заявлениям производителя), стал проект ChipKIT32. При этом разработчики несколько отошли от базового форм-фактора, увеличив количество периферийных выводов.
Платы ChipKIT32 существуют в двух вариантах – UNO32 и MAX32. Их основу составляют микроконтроллеры PIC32 со 128 кБ памяти программ.
Программирование производится в среде mpIDE, представляющей фактически родную IDE от Arduino с добавленным компилятором для контроллеров Microchip.
Микроконтроллер PIC32 использован для еще одного проекта под названием PINGUINO-PIC32, предлагаемого одним из крупнейших производителей отладочных плат – Olimex.
В отличие от ChipKIT32, данная плата полностью совпадает с форм-фактором Arduino UNO, зато содержит несколько дополнительных устройств, среди которых, например, контроллер заряда Li-Ion аккумуляторов и держатель карт SD/MMC.
Программирование PINGUINO производится в одноименной среде, опять же повторяющей ArduinoIDE.
Еще одной разработкой от OLIMEX стала плата OLIMEXINO-STM32. При почти полностью одинаковой с PINGUINO-PIC32 начинке, данный проект базируется на микроконтроллере STM32, модели STM32F103 от STMicroelectronics. Среда программирования для этой платы носит название MAPLE IDE.
Не отстают от других разработчиков и сами создатели Arduino. В своем проекте под названием Arduino Due, они использовали 32-разрядный контроллер Atmel SAM3U. Проект выполнен в форм-факторе MAX, и соответственно предлагает расширенные возможности. Этому способствуют и 256кБ памяти программ.
Похоже, что в ближайшем будущем полностью произойдет переход на 32-разрядные процессоры. Большая вычислительная мощность позволит создавать новые интересные устройства. Платы типа Arduino станут еще более востребованными.
Последнее связано не столько с широкими возможностями, сколько со сложностью монтажа современных электронных компонентов.
Некоторым недостатком становится увеличение разнообразных средств программирования, которые постепенно отходят от стандартов классической системы, что скорее всего приведет к появлению нескольких ветвей устройств, не совместимых между собой.
You have no rights to post comments
Источник: https://mcucpu.ru/index.php/platformy-8-bit/arduino/95-arduino32bit
Почему я не люблю Arduino | avr | programming
Почему я не люблю Arduino |
Добавил(а) microsin |
Платформа Arduino как система программирования для микроконтроллеров AVR завоевала заслуженную популярность. Платы Arduino стали очень дешевы (не фирменные конечно, а те, которые делают китайцы и продают на ebay, aliexpress и dx. com), примеров кода очень много, среда программирования и язык хорошо описаны, для большинства электронных устройств и микросхем написаны готовые библиотеки.
Если Вы относитесь к абсолютным новичкам, которые ничего (или почти ничего) не понимают в схемотехнике, и совсем не умеют программировать (но очень хотят научиться), то вариантов для Вас нет – Arduino подойдет лучше всего. Если Вы продвинутый радиолюбитель, то из Arduino ничего полезного для себя не получите, Вы и так знаете что делать и как превратить микроконтроллер в рабочее устройство. Но если сомневаетесь в выборе, что для Вас лучше, то нужно изучить вопрос поподробнее – в чем преимущество каждого метода программирования?
Условно назовем программирование на Arduino как AVR Arduino, и традиционное программирование как AVR GCC. Для тестов возьмем обычную Arduino-совместимую плату metaboard [1] (микроконтроллер ATmega328P), попробуем написать для неё код AVR Arduino и код AVR GCC, и подробно разберем, в чем разница. В качестве примера разберем традиционный HelloWorld для микроконтроллеров – мигание светодиодом. Сравнивать обе системы будем по следующим параметрам, которые особо важны для новичков: • Среда программирования• Обзор языка, как построена программа• Как прошивать программу в память микроконтроллера платы• Отладка программы• Цена железа • Эффективность кода, дополнительные возможности [Среда программирования]
Оболочка среды разработки написана на Java, поэтому может работать на большинстве известных компьютерных систем – Windows, Linux, Mac OS. Это еще один плюс для Arduino IDE. |
Источник: http://microsin.net/programming/avr/why-i-hate-arduino.html
Adblockdetector