8 июля 2016 в 02:23

Дешевая STM32 плата + Arduino IDE UPD 15.07.2016 tutorial

image

Хотите прокачать ваши Arduino проекты? Заставить их работать быстрее, измерения и регулировку сделать точнее, ну и добавить баги(с новыми девайсами они неизбежны). Тогда эта статья для Вас.

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

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

Краткое изложение данной статьи в видео формате:



Ладно, меньше лирики и ближе к теме. В этой статье, я буду рассматривать дешёвую отладочную плату, которая основана на базе микроконтроллера STM32F103C8T6:

image

Для начала, сравним основные параметры 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 или интегрированные в микроконтроллер часы реального времени.

image

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

Приступим к подготовке платы, для работы с Arduino IDE. Первое что необходимо сделать — залить в микроконтроллер специальный загрузчик, который позволит прошивать плату через аппаратный USB, причём прямо из среды разработки. Для этого необходимо перевести верхний джампер(он же «BOOT0»), в положение «1»:

image

Для чего нужны BOOT0 и BOOT1 джамперы
Дело в том, что в STM32 с завода прошит, в так называемую системную память(system memory), специальный загрузчик, который позволяет прошивать плату через самый обычный USB to UART переходник, не прибегая к специфическим программаторам типа ST-Link V2.

image


Дальше нам понадобиться переходник с USB на UART. Стоит помнить, что STM32, это 3.3 В логика, совместимость с 5-ти вольтовой не гарантируется, поэтому рекомендовано использовать USB to UART, у которого есть возможность выбора режимов работы с 3.3/5В логикой. Я использовал дешёвый переходник на базе CH340G:

image
* как видно, производитель не стал заворачиваться со смывкой флюса, на работу, конечно, никак не влияет.

Плату подключил к USB to UART переходнику следующим образом:

G <-> GND;
5V <-> 5V;
PA10 <-> TXD;
PA9 <-> RXD.

image
* PA10/PA9 на плате подписаны просто как A10/A9 — эти порты являются первым аппаратным USART'ом, всего их на плате 3, так же тут 2 аппаратных I2C и 2 SPI.

Ради удобства запитал плату от 5 В, для питания от 3.3 В на плате есть пин «3.3». Внимание, 5 В может запросто вывести микроконтроллер из строя, так что уделите должное внимание подключению.

Качаем, устанавливаем и запускаем Flash Loader Demonstrator(есть в архиве к статье):

image

Выбираем номер COM-порта нашего переходника, в моём случае это COM43, потом нажимаем «Next»:

image

Так как у меня микроконтроллер новый, ещё муха не сидела на него никто ничего не записывал(разумеется кроме самого производителя), то тут по умолчанию стоит защита от чтения, программа нас предупреждает, что если нажать кнопку «Remove protection», Flash память будет очищена, то есть если бы там была какая-то прошивка — она удалится. В моём случае там ничего полезного нет, так что смело жму. Далее вижу следующее:

image

Жмём «OK»:

image

Так как моя отладочная плата основана на микроконтроллере STM32F103C8 — здесь 64 Кбайт Flash памяти, есть ещё STM32F103CB микроконтроллер, где в два раза больше Flash.

Дальше кликаем «Next»:

image

Опять «Next», и видим следующее окно:

image

Выбираем «Download to device» и жмём на "...":

image

Меняем тип файлов на *.bin и открываем файл «generic_boot20_pc13.bin»(тоже присутствует в архиве) который можно взять из проекта STM32duino-bootloader.

Дальше кликаем на кнопку «Next», после прошивки загрузчика мы увидим зелёный свет:

image

Потом надо скачать, для среды разработки Arduino IDE, специальное STM32 ядро(так же есть в архиве к статье). Тут есть один нюанс, на момент написания статьи, ядро не работает на версиях среды разработки свыше 1.6.5, у меня стоит 1.6.5-r5 которую скачал тут.
Проверенна работоспособность ядра на Arduino IDE версии 1.6.9.

Дальше разархивируем содержимое по адресу Мои Документы\Arduino\hardware:

image

В моём случае полный путь выглядит вот так — «C:\Users\RSK\Documents\Arduino\hardware»

Разумеется, что система устройство определить не сумеет, поэтому надо ещё установить драйвера на плату. Заходим в папку «Мои Документы\Arduino\hardware\Arduino_STM32\drivers\win»(или «drivers\win», в случае архива к статье), и запускаем от имени администратора файл «install_drivers.bat»:

image

После этого верхний джампер(тот что «BOOT0»), переводим в положение «0» и подключаем плату к компьютеру через microUSB кабель:

image

Она должна в диспетчере устройств определиться или как «Maple DFU» или «Maple Serial (COM*)»:

image

Не совсем понятно почему после первого подключения плата определяется по-разному, на разных компьютерах, но не суть, приступаем к настройке Arduino IDE.

Запускаем среду разработки, дальше Инструменты -> Плата -> Boards Manager:

image

Здесь нужно установить ядро для платы Arduino Due. Выбираем последнюю версию и нажимаем «Install»:

image

Потом Инструменты -> Плата -> «Generic STM32F103C», дальше Variant: «STM32F103C8 (20k RAM. 64k Flash)», Upload Method: «STM32duino bootloader», Порт — номер COM-порта платы, вообщем всё как на скрине:

image

Всё, плата готова к прошивке и программированию в среде разработки Arduino IDE. Давайте прошьём какой-то скетч из примеров, которые «вшиты» в ядро, заходим Файл -> Папка со скетчами -> hardware -> Arduino_STM32 -> STM32F1 -> libraries -> A_STM32_Examples -> Digital -> Blink:

image

Классический «Hello World» в мире микроконтроллеров. Изменяем PB1 на PC13, так как светодиод, что на плате, подключен к этому порту:

image
* К стати, загорается он по низкому уровню на ножке PC13.

Нажимаем кнопку «Вгрузить», после прошивки среда разработки выдаст что-то типа:

image

«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
Когда видите, сообщение типа:

image

«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]...
Когда среда разработки выдаёт:

image

«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 отладочной платы росла, поэтому делитесь этой статьей с друзьями, особенно с друзьями программистами.

По поводу распиновки:

Кликабельно
Лучшее что мне удалось найти, это распиновка самого микроконтроллера(открывайте в новой вкладке):

image
(с) 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, правда на английском языке.

Я порылся в файлах ядра, и нашёл один интересный файл:
Documents\Arduino\hardware\Arduino_STM32\STM32F1\variants\generic_stm32f103c\board.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-х долларовый кусок стеклотекстолита с чипом, а материнская плата компьютера.


Схема отладочной платы:



Ну и на последок:

image

Привет geektimes.ru
//https://github.com/mk90/LiquidCrystalRus

//STM32 в массы!

#include <LiquidCrystalRus.h>

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.

UPD 15.07.2016
Проверенна работоспособность ядра на Arduino IDE версии 1.6.9:
geektimes.ru/post/277928/#comment_9532576

P.S.
Что ещё забыл
Забыл добавить фото платы с обратной стороны:

image

Тут почти ничего нет, стабилизатор и немного резисторов с конденсаторами.

Так же не рассказал, что дополнительно пропаивал microUSB разъем:

image

Потому что не особо внушала доверие пайка, точнее, её полное отсутствие.
Techn0man1ac @HWman
карма
42,0
рейтинг 0,0
Техноманьяк до последней капли крови.
Похожие публикации
Самое читаемое

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

  • 0
    Всем хорош STM32, одно плохо — EEPROMа в нём нет. Ну и не все порты 5 вольт-толерантны, да и нагрузочная способность у портов меньше.
    • +1
      Sun-ami Ну… По поводу нагрузочной способности, я бы не сказал что всё так плохо:

      image

      У ATmega328, если мне не изменяет память, столько же.

      А вот отсутствие EEPROM — да, смущает немного. Хотя слыхал про Backup Domain:

      http://mcu8.ru/wp-gull/mylinks/2012/04/08/stm32-sohranenie-parametrov/

      Пока что не разобрался особо, но как понял — специальная память, которая питается от отдельного источника, например как ионистора, и в паре с часами реального времени она себе работает и кушает какие-то микроамперы.
      • +1
        Отсутствие EEPROM компенсируется циклической записью во FLASH (под 1 байт полезной информации резервируется, например, 10 байт памяти, зависит от частоты записи и срока службы), благо флеш-памяти на STM32 хватает.
        Специальная память — это Backup registers (BKP). Позволяет хранить 84 байта, пока имеется питание на Vbat.
        • 0
          да не так то уж и много этой флеш памяти в конкретно этой стмке. что не делай, но бинарник получается поувесистее чем на той же меге и 64кб на стм32 сравнимы с 32кб на меге.
          • +1
            Все, в конечном счете, зависит от задачи, которую необходимо решить микроконтроллером. Хорошо, когда выбор есть и обоими инструментами умеешь пользоваться.
            • 0
              Память не единственный решающий параметр. Например в этом STM32 есть USB, он и дороже поэтому. Есть STM32F100 без USB, памяти столько же, + еще есть ЦАП и дешевле, чем ATMEGA328.
              • +1
                речь идет о плате, которая целиком дешевле чем эта же стмка с usb в рознице
                • +1
                  А сколько ее надо, той EEPROM (объем)?
                  Конечно, удобно когда «на борту», но если «стремно» за флеш и нужно долговременно хранить данные можно прицепить внешнюю EERPOM по, например, I2C и нужные данные хранить там.

                  Microchip-Technology 24AA08T-I-OT
                  Memory Type EEPROM
                  Memory Size 8K (4 x 256 x 8)
                  Speed 100kHz, 400kHz
                  Interface I²C, 2-Wire Serial
                  Voltage — Supply 1.7 V ~ 5.5 V
                  Operating Temperature -40°C ~ 85°C (TA)
                  Package / Case SC-74A, SOT-753

                  розница порядка $0,23 за штуку.
                  • +1
                    Прицепить конечно можно, но здесь речь идёт о девайсах, собираемых из дешевых готовых плат, без пайки. К тому же I2C — это дополнительные сложности. Ниже по теме описано как народ отказавшись от аппаратного ST-шного I2C свои чисто программные реализации пишет. Я тоже сталкивался с тем, что при сбоях в обмене по I2C с термодатчиком DS1621 удаётся восстановить обмен с ним только вручную, переводя линии I2C в режим GPIO (хотя это — недостаток DS1621).
                    • 0
                      Про проблемы с I2C тоже видел ниже. Но не совсем понял — это конкретно глюк аппаратной реализации у STM/конкретного МК, или это все же недоработка библиотек ST-DUINO? В первое не сильно верится.

                      Касательно дешевых плат — за все в этой жизни приходится платить. :) Тем более, что все же в МК есть флеш-память.

                      Если без пайки — в принципе, есть EEPROM-шилды для ардуины с Serial-интерфейсом. Конечно по цене получается сравнимо с самой платой (где-то от $1,6 и до наглости продавца), зато EEPROM, шилд (без пайки) и объем 128-256 кбит, хватит надолго. Их еще часто и каскадом несколько штук можно прицепить.

                      Для прототипирования покатит, а в готовом девайсе развести память которая подходит.
                      • 0
                        С другими микросхемами (EEPROM, цифровые потенциометры, усилитель) у меня проблем с I2C не было. И испытания на ЭМС нормально проходит. Я использую свой драйвер на основе драйвера из SPL. Так что дело, похоже, не в железе. Хотя с F103 я не работал, у меня F217, F407, F427
                  • 0
                    а при чем тут EEPROM? вы наверно веткой ошиблись.
                    • 0
                      Почему ошибся? Выше есть «претензия», что у STMок нет EEPROM.
                      Но во-первых у них есть флеш, а во-вторых, если нужен именно EEPROM для долговременного хранения неких данных, а ограничения по количеству перезаписей флеша встроенного в МК мало, то есть микросхемы внешнего EEPROM, которые при необходимости можно прицепить по I2C или SPI. Если брать чисто микросхему, то микруха будет от $0,2 за 8Кбит за голый чип (правда не в самом удобном для новичков корпусе) до $1.5 за ардуино-совместимый «шилд» на 256 Кбит. О чем я и написал.
      • +1
        Насчёт нагрузочной способности я конечно придрался, но все же нужно иметь ввиду — у ATmega328 максимальный ток порта — 40 мА и 200 на чип.
        • +1
          40 это абсолютный максимум, долго порт так не проработает ;)
    • +1
      Вместо EEPROM в STM32 можно использовать Flash.
      • 0
        Pakila А как насчёт энергонезависимости?
        • +2
          Flash не трбует питания для хранения данных, это часть памяти программ. Flash хуже eeprom только по циклам перезаписи.
        • +1
          С Flash другие нюансы.
          — Меньший ресурс, чем у eeprom.
          — Необходимость писать блоками, даже если нужно записать 1 байт
          • +2
            Меньший ресурс — да, но компенсируется объемом.
            1 байт, действительно, не запишешь. Но во флеш можно писать по 2 или 4 байта за раз. А вот чтобы стереть 1 байт, необходимо стирать всю страницу (1кБ или 2кБ). Ниже Anthrax_Beta уже дал ссылку на апнот AN2594 — там есть методика, как использовать флеш вместо eeprom.
    • 0
      EEPROM есть, но в L1 серии (и L0 вроде)
  • 0
    Интересно, из arduino ide возможно использовать, например, DMA и и всякие хитрые циклические режимы сбора с АЦП? Понимаю, что скорее всего нет, но всё же.
    Как вообще проживает проект maple? Не забрасывают его разработчики?
    • +1
      maple помер давным-давным давно. у меня даже одна плата лежит которую я не могу использовать потому, что… винда x64 :/
      • 0
        Ну вот, теперь будет повод ;)
      • 0
        таки вопрос по DMA открыт. работа с периферией по прерываниям снижает производительность до уровня той же AVR. так что вопрос сильно важный.
        • 0
          Arduino и производительность — вещи диаметрально противоположные, и DMA там особо не поможет.
    • 0
      Проект maple всё ещё жив благодаря товарищу Roger Clark, вот эго форум http://www.stm32duino.com/index.php
      • +1
        интересно. спасибо.
      • 0
        Вроде как mbed сейчас успешно заменяет maple. Работал и с тем и с тем. Года 4 назад адаптировал maple bootloader для своей платы в STM32F103RBT.
    • 0
      На сколькоя в курсе, то на Ардуино ИДЕ можно писать Сишный код, Спп и ардуиновский с фреймворком. Больше чем уверен, с этой платой дела обстоят точно так же.
      • 0
        а зачем тогда ардуино иде вообще?
  • +1
    По поводу отсутствия EEPROM частично не соглашусь. Да в явном виде она отсутствует, но у ST есть дока goo.gl/WKsbA3 в которой говорится как эмулировать EEPROM используя встроенную flash память.
    • 0
      Спасибо.
  • 0
    Для использования со средой ардуино лучше использовать именно клоны Maple Mini а не обычные демоплатки, что бы не дёргать их вручную.
    Не все библиотеки можно использовать в прямую, приходится допиливать на ходу.
    На винде7 х64 всё живёт прекрасно.
    • 0
      Клон Maple Mini стоит 5 баксов, а это почти как Arduino Mega 2560.
      • 0
        во первых стоит 4. Для разовых поделок это не имеет никакого значения. А если предполагается изготовление продукта большим количеством, то для отладки всё равно проще взять мэпл мини, отладить на ней без лишних танцев с бубном и потом эту прошивку закинуть уже на что подешевле.
    • 0
      Расскажите, что конкретно приходилось допиливать и с какими отличиями плат это было связано?
      • 0
        Платы идентичные (мэпл мини и минимальная отладочная), отличие только в распиновке и авторебут для заливки прошивки у мэпл мини.
        У стм32 на ардуино иде i2c работает постоянно с глюками, особенно если использовать обе шины.
        ШИМ другой, если использовать для чего то более серьёздного чем просто поморгать.
        Надо несколько костылей для корректного использования ком порта через усб.

        Вообще мой путь начинался с ардуино на авр, потом ардуино дуэ (арм), стм32. Начиная с арм, почти всегда приходится лезть в кишки библиотек и что-нибудь допиливать. Код постепенно обрастает ассемблерными вставками заточенными на проц.
        • 0
          как Вы решили вопрос с глюками I2C?
          • 0
            Оооо, это великое колдунство… Неделя ковыряния и что-нибудь происходит и она начинает работать.
            Сейчас у меня завис проект усилителя. Там темброблок управляется по и2ц, никак не могу победить. Похоже придётся переходить на авр :( и отказыватся от ряда функций.
            • 0
              для ненагруженного i2c проще сделать софтовую реализацию.
              • 0
                От авр не подходит, те что для стм32 работают криво.
                У вас есть опыт софт и2ц на стм32 в ардуино иде? Если есть нормальная рабочая либа?
                • 0
                  софтовая реализация достаточная для редкого чтения/записи нескольких байт пишется простым ногодрыгом за пол часа. какие еще либы тут нужны?
            • 0
              Сталкивался с темброблоком, который не поддерживает 400КГц по I2C, только 100. Может в этом причина?
  • 0
    ядро не работает на версиях среды разработки свыше 1.6.5
    — это странно, у меня на 1.6.9 все работает, проверял буквально пару дней назад на чистой виртуалке.

    Так же не понял танцев с загрузкой «STM32duino-bootloader» — в МК встроенный загрузчик есть, хотя тут не поручусь — т.к. со своей платой уже проводил эксперименты раньше.

    В качестве отправной точки использовалась эта статья (похоже — перепечатка, но оригинала я не нашел)
    • 0
      У меня ничего не компилируется на версии 1.6.7:
      image

      А встроенный загрузчик есть, он он не даёт возможность прошивать плату по аппаратному USB.
      • +1
        Вы хочите пруфов?
        Их есть у меня! :)



        Варнинг, непонятный — напрягает слегка.

        И, да с загрузчиком проянилось — есть же разные варианты загрузки в том числе «STM32duino bootloader», я пользуюсь «Serial» — встроенным загрузчиком.
        • 0
          Действительно, на версии 1.6.5 библиотека OLED_I2C заработала:



          Но LCD дисплей перестал выводить русские буквы. В версии 1.6.5 всё было гладко:

          Заголовок спойлера
          image


          А сейчас выводит тупо geektimes.ru.
          • 0
            Блин, протупил, писал про версию 1.6.9.
            • 0
              То есть пропали русские буквы. Думаю надо посмотреть в сторону кодировки. Что там реально улетает на LCD? В UTF-8 латиница так и останется, а вместо кирилицы будет что-то двухбайтовое.
              • 0
                Короче говоря библиотека LiquidCrystalRus.h перестала отображать русские символы.
    • 0
      Загрузчик есть, но он слыхом не слыхивал про какую-то там ардуину, и ждёт совсем других протоколов для прошивки поэтому его надо менять.
  • 0
    а примеры по работе с USB есть?
    например эмуляция клавиатуры
  • +2
    Есть чуть более простой способ.
    Можно не прошивать загрузчик. Нужен ST-Link и тот же репозиторий от Роджера.
    В папке с библиотеками (точнее в папке Arduino, где лежат библиотеки) создать рядом папку hardware и туда поместить все содержимое репозитория.

    Настройка для 103С8T6:
    Выбрать палату: Generic STM32F103C series
    В опциях платы выбрать метод загрузки: STLink

    На этом все, и не нужно будет мучатся с ресетом, устанавливать драйвера, прошивать загрузчик.
    Бонусом на будущее будет программатор, но это будущее, и сами потом поймете зачем :)
    • 0
      ST-Link неизбежно появится у всех кто захочет чуть серъезнее заняться stm32 (- быстрая прошивка, отладка, незанятые пины), но в качестве задела сойдет и загрузка по uart

      >На этом все, и не нужно будет мучатся с ресетом, устанавливать драйвера, прошивать загрузчик.
      лукавите — драйвер понадобится уже для ST-Link'а )
      • 0
        китайцы кстати торгуют вполне годными стлинками по 2-3 бакса. купил пол дюжины после того как один оригинальный помер после небольшого чиха.
      • 0
        Да вы правы. Запамятовал, что под виндой ставились вместе с IAR. Под OSX ничего не ставил, а так как это было недавно, то и осталось в памяти.
  • +1
    У меня была проблема с аппаратным интерфейсом I2C. Раз в секунду читались датчики — первое чтение правильное, остальные ерунду давали.
  • +1
    STM32F103C8T6 хитовый микроконтроллер, с отличной периферией по отличной цене.
    Думаю лучше всё таки научиться программировать его с помощью обычных библиотек (HAL, SPL или libopencm3).
    Тогда можно раскрыть все возможности микроконтроллера.
    Ещё один хит от стм, это STM8S003, очень дешёвый. Применяю его там, где STM32 явно избыточны.
  • 0
    В STM32 есть BKPSRAM — 4 КБ энергонезависимой SRAM (питается от батарейки часов). Правда в моделях постарше, а не в бюджетном STM32F103C8T6.
    • 0
      BKP register есть и в STM32F103C8T6, ну только их мало.
      • 0
        BKP register и BKP SRAM — разные вещи. С практической точки зрения сильно разные объемы (84 B и 4 КБ)
        • 0
          Ну с практической да, объем конечно меньше. С другой стороны 84 байта, они есть:)
          Всё зависит от задачи, я всего 1 байт использую, только для того чтобы флаг загрузчику передать.
          • 0
            Я 4 KB использую как буфер значений датчика. При отключаниях питания буфер не стирается, этим гарантируется непрерывный мониторинг.

            Ну и плюс в этих 4 KB хранится запись SytemHealth, там вся инфа о возникших ошибках/ассертах, срабатываниях вочдога и т.д. за все время работы. Очень помогает увидеть качество работы устройства в реальных условиях у заказчика. А то может быть ситуация когда девайс у заказчика перезагружается по вочдогу, а разработчик об этом никогда и не узнает.
            • 0
              Конечно присутствие такой памяти радует. Хотя батарейка тоже имеет свойство садится.
              • 0
                Ну CR1220 хватит девайсу на год без питания. А в реальных условиях год без питания наберется лет за 10 работы.
  • +1
    Arduino тема всё больше захватывает умы человечества

    image

    • –1
      Постарался вложить всю суть данной статьи в одной картинке :)
  • 0
    1. сколько можно уже сравнивать устаревшие АТмеги и СТМ? Ближайший родственник ХМега и то приблизительный...
    2. У СТМ наиотвратительнейшая документация (против Атмеловской), с этим не раз соглашались сами разработчики на СТМ (и сам же производитель, выпустивший визард). По поводу Дунь: так вообще черный ящик, вы на СТМ одну только периферию замучаетесь настраивать, придется юзать всякие Кубы и полученные данные не сможете толком прикрутить к проекту, т.к. это уже другой уровень разработки, выходит, что если "дядя вася" не напишет готовую библиотеку, вы ничего сделать не сможете.
    3. Ценовой диапазон плат пока конкурентен...
    4. Чип весьма не маленький, для весьма простых задач — избыточно. Но да, поморгать светодиодиком можно.)))
    • 0
      Можно и квадкоптер сделать, при желании:

      https://youtu.be/Ze6q6NidS5w?t=27
      • 0

        при желании можно и утюг включать, а квадры и на дуня/атмегах тоже делают) https://www.youtube.com/watch?v=Dk_ni3oX-KE
        и в робототехнике используют: https://youtu.be/PL4174oBPTs?t=2m25s
        и CNC/3D принтеры фигачат)))

        • +1
          Вообщем как говорил Сократ, «Кто хочет, тот ищет возможности, а кто не хочет — причины».
          • 0
            ардуино в классическом виде даст на стм32 сделать ровно столько же, сколько и на авр. Если надо большего — нужно просто забыть об ардуино. А искать возможности сделать именно на ардуино — это как искать иголку в стогу сена при том что рядом стоит ведро с иголками
            • 0
              Как минимум 12-ти битный АЦП и 16-ти битный ШИМ на 12-ти портах, вот чем эта плата заметно отличается от Arduino плат основанных на AVR-ках.
              • +1
                Есть один такой интересный чип, для светодиодов предназначенный и с интерфейсом SPI — 24-битный ШИМ 12 каналов с 6-битной индивидуальной регулировкой тока по каждому выходу. И наращивай сколько хочешь таких выходов… интерфейс ведь SPI.
                • 0
                  Конечно есть, но это ведь отдельная железка, тем более, как Вы говорите, специализированная.
                  А так, всё под рукой и на одной платке.
                  • +1
                    Так и эти чипы можно развести на одной платке, сколько душе угодно а не строго фиксированное количество.
              • 0
                если для 12-бит АЦП я применения еще и смогу найти, то для 16-бит ШИМ — вряд ли.
                • +1
                  Управлять светодиодами, 8 бит довольно мало — слишком заметный шаг между уровнями что сразу становится заметным на плавных переходах яркости. А 16 бит уже позволяет развернуться.
                  • 0
                    хм. при наличии гамма-коррекции 8 бит обычно хватает.
                    • 0
                      Гамма-коррекция делает переходы ещё сильнее, и она нужна будет в любом случае.
                • 0
                  Как я говорил в ролике — цифровой ЛБП может получится отличный.
                  • 0
                    в ЛАБОРАТОРНЫЙ блок питания можно думаю и на цап раскошелиться.
                    • 0
                      Посмотрим, я то всё не перестаю думать про тему ЛБП на этой STM32 плате…
                      • 0
                        вообще я для себя решил что цифровой лабораторник плохая идея, особенно самодельный. пользуемся rigol dp832 только когда нужны конкретно фишки цифрового, в других случаях берем аналоговых собратьев ибо удобнее.
                        • 0
                          Ну… У меня то крутится идея сделать аналоговый БП, но с цифровым управлением.
                        • 0

                          Да, только эти аналоговые собратья имеют манеру начинать шуршать регуляторами после некоторого времени эксплуатации. Вплоть до того, что могут выдать при повороте несколько импульсов максимального напряжения или тока и выжечь напрочь питаемое устройство.

  • 0
    Вы тоже это видели?

    image
  • 0
    «интегрированные в микроконтроллер часы реального времен» — не следует некритически повторять неудачные фразы из рекламных листовок, нет их там.
    • +1
      Странно, а в даташите написано что есть.
      Да и народ вроде как использует http://golf2109.blogspot.ru/2014/05/backup-domain-control-register-rccbdcr.html
      • +2
        RTC там есть, но упрощенные, по сути — микропотребляющие генератор и 32-битный счётчик с предделителем, с возможностью отдельного питания от батареи. Вопрос только в том, можно ли это считать RTC. По определению которое даёт википедия — нельзя. Но я считаю — можно, раз это специально предназначено для счёта реального времени.
        • 0
          DS12887 — вот это часы реального времени, то есть собственно модуль счета времени, модуль учета даты, таймер прерываний, и, конечно же, модуль переключения питания + встроенная резервная батарейка на весь срок службы (10 лет).
          • +2
            На самом деле представление времени в виде 32-битного или 64-битного числа секунд даже удобнее. Когда нужно выполнять какие-либо расчёты времени — его всё равно придётся преобразовывать к этому формату. Такой формат компактен и потому удобен для меток времени в логах. Кроме того он избавляет от заморочек с переводом времени — привязываемся к UTC и тогда временные уставки и таймстампы не сбиваются при переводе часов. А для конвертирования можно использовать стандартные функции C, лучше 64-битные чтобы избежать проблемы 2038 года. Мне RTC в STM32F1xx нравится даже больше чем «полноценные» RTC в STM32F2xx и STM32F4xx — они более универсальны, их можно настроить так чтобы считать и доли секунды. А регистр будильника и прерывание есть и там и там.
            • 0
              Да, жаль в stm8 rtc нет. Приходится вешать внешний типа ds1307.
          • 0
            DS12887A со встроеным кварцем и батарейкой вероятно хорошая… микросборка. Но! Она дорогая и большая.
            • 0
              За все в этом мире надо платить…
              Хотя лично я юзал встроенный генератор с внешним кварцем 32768 и питал все это от ионистора и ионистора 4.7 Ф за вроде 40 рублей хватало на неделю точно.
              • 0
                Тогда CR2032 хватит на год как минимум.
  • 0
    -
  • 0
    Коллеги, а есть у кого-нибудь электрическая схема именно этой платы, что на фото? То, что легко гуглится, немного отличается…
    • 0
      В статье есть, посмотрите внимательнее.
      • 0
        Спасибо!

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