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_9436620

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

image

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

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

image

Потому что не особо внушала доверие пайка, точнее, её полное отсутствие.
Поделиться с друзьями
-->

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


  1. Sun-ami
    08.07.2016 03:08

    Всем хорош STM32, одно плохо — EEPROMа в нём нет. Ну и не все порты 5 вольт-толерантны, да и нагрузочная способность у портов меньше.


    1. HWman
      08.07.2016 03:45
      +1

      Sun-ami Ну… По поводу нагрузочной способности, я бы не сказал что всё так плохо:

      image

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

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

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

      Пока что не разобрался особо, но как понял — специальная память, которая питается от отдельного источника, например как ионистора, и в паре с часами реального времени она себе работает и кушает какие-то микроамперы.


      1. LineAir
        08.07.2016 07:23
        +1

        Отсутствие EEPROM компенсируется циклической записью во FLASH (под 1 байт полезной информации резервируется, например, 10 байт памяти, зависит от частоты записи и срока службы), благо флеш-памяти на STM32 хватает.
        Специальная память — это Backup registers (BKP). Позволяет хранить 84 байта, пока имеется питание на Vbat.


        1. nafikovr
          08.07.2016 11:07

          да не так то уж и много этой флеш памяти в конкретно этой стмке. что не делай, но бинарник получается поувесистее чем на той же меге и 64кб на стм32 сравнимы с 32кб на меге.


          1. LineAir
            08.07.2016 11:16
            +1

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


            1. LineAir
              08.07.2016 11:22

              Память не единственный решающий параметр. Например в этом STM32 есть USB, он и дороже поэтому. Есть STM32F100 без USB, памяти столько же, + еще есть ЦАП и дешевле, чем ATMEGA328.


              1. nafikovr
                08.07.2016 11:46
                +1

                речь идет о плате, которая целиком дешевле чем эта же стмка с usb в рознице


                1. compdemon
                  09.07.2016 17:59
                  +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. Sun-ami
                    09.07.2016 20:04
                    +1

                    Прицепить конечно можно, но здесь речь идёт о девайсах, собираемых из дешевых готовых плат, без пайки. К тому же I2C — это дополнительные сложности. Ниже по теме описано как народ отказавшись от аппаратного ST-шного I2C свои чисто программные реализации пишет. Я тоже сталкивался с тем, что при сбоях в обмене по I2C с термодатчиком DS1621 удаётся восстановить обмен с ним только вручную, переводя линии I2C в режим GPIO (хотя это — недостаток DS1621).


                    1. compdemon
                      09.07.2016 21:19

                      Про проблемы с I2C тоже видел ниже. Но не совсем понял — это конкретно глюк аппаратной реализации у STM/конкретного МК, или это все же недоработка библиотек ST-DUINO? В первое не сильно верится.

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

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

                      Для прототипирования покатит, а в готовом девайсе развести память которая подходит.


                      1. Sun-ami
                        09.07.2016 22:54

                        С другими микросхемами (EEPROM, цифровые потенциометры, усилитель) у меня проблем с I2C не было. И испытания на ЭМС нормально проходит. Я использую свой драйвер на основе драйвера из SPL. Так что дело, похоже, не в железе. Хотя с F103 я не работал, у меня F217, F407, F427


                  1. nafikovr
                    11.07.2016 07:33

                    а при чем тут EEPROM? вы наверно веткой ошиблись.


                    1. compdemon
                      11.07.2016 11:56

                      Почему ошибся? Выше есть «претензия», что у STMок нет EEPROM.
                      Но во-первых у них есть флеш, а во-вторых, если нужен именно EEPROM для долговременного хранения неких данных, а ограничения по количеству перезаписей флеша встроенного в МК мало, то есть микросхемы внешнего EEPROM, которые при необходимости можно прицепить по I2C или SPI. Если брать чисто микросхему, то микруха будет от $0,2 за 8Кбит за голый чип (правда не в самом удобном для новичков корпусе) до $1.5 за ардуино-совместимый «шилд» на 256 Кбит. О чем я и написал.


      1. Sun-ami
        08.07.2016 10:33
        +1

        Насчёт нагрузочной способности я конечно придрался, но все же нужно иметь ввиду — у ATmega328 максимальный ток порта — 40 мА и 200 на чип.


        1. HWman
          08.07.2016 13:27
          +1

          40 это абсолютный максимум, долго порт так не проработает ;)


    1. Pakila
      08.07.2016 07:23
      +1

      Вместо EEPROM в STM32 можно использовать Flash.


      1. HWman
        08.07.2016 07:31

        Pakila А как насчёт энергонезависимости?


        1. Pakila
          08.07.2016 07:39
          +2

          Flash не трбует питания для хранения данных, это часть памяти программ. Flash хуже eeprom только по циклам перезаписи.


        1. ElectricFromUfa
          08.07.2016 07:40
          +1

          С Flash другие нюансы.
          — Меньший ресурс, чем у eeprom.
          — Необходимость писать блоками, даже если нужно записать 1 байт


          1. LineAir
            08.07.2016 07:45
            +2

            Меньший ресурс — да, но компенсируется объемом.
            1 байт, действительно, не запишешь. Но во флеш можно писать по 2 или 4 байта за раз. А вот чтобы стереть 1 байт, необходимо стирать всю страницу (1кБ или 2кБ). Ниже Anthrax_Beta уже дал ссылку на апнот AN2594 — там есть методика, как использовать флеш вместо eeprom.


    1. zloe_morkoffko
      08.07.2016 13:28

      EEPROM есть, но в L1 серии (и L0 вроде)


  1. ElectricFromUfa
    08.07.2016 07:02

    Интересно, из arduino ide возможно использовать, например, DMA и и всякие хитрые циклические режимы сбора с АЦП? Понимаю, что скорее всего нет, но всё же.
    Как вообще проживает проект maple? Не забрасывают его разработчики?


    1. abstracto
      08.07.2016 07:04
      +1

      maple помер давным-давным давно. у меня даже одна плата лежит которую я не могу использовать потому, что… винда x64 :/


      1. HWman
        08.07.2016 07:07

        Ну вот, теперь будет повод ;)


      1. nafikovr
        08.07.2016 10:17

        таки вопрос по DMA открыт. работа с периферией по прерываниям снижает производительность до уровня той же AVR. так что вопрос сильно важный.


        1. PKav
          08.07.2016 11:43

          Arduino и производительность — вещи диаметрально противоположные, и DMA там особо не поможет.


    1. HWman
      08.07.2016 07:06

      Проект maple всё ещё жив благодаря товарищу Roger Clark, вот эго форум http://www.stm32duino.com/index.php


      1. abstracto
        08.07.2016 07:12
        +1

        интересно. спасибо.


      1. igor_suhorukov
        08.07.2016 18:03

        Вроде как mbed сейчас успешно заменяет maple. Работал и с тем и с тем. Года 4 назад адаптировал maple bootloader для своей платы в STM32F103RBT.


    1. svd71
      09.07.2016 17:36

      На сколькоя в курсе, то на Ардуино ИДЕ можно писать Сишный код, Спп и ардуиновский с фреймворком. Больше чем уверен, с этой платой дела обстоят точно так же.


      1. nafikovr
        11.07.2016 07:38

        а зачем тогда ардуино иде вообще?


  1. Anthrax_Beta
    08.07.2016 07:22
    +1

    По поводу отсутствия EEPROM частично не соглашусь. Да в явном виде она отсутствует, но у ST есть дока goo.gl/WKsbA3 в которой говорится как эмулировать EEPROM используя встроенную flash память.


    1. HWman
      09.07.2016 19:06

      Спасибо.


  1. melodictsk
    08.07.2016 08:02

    Для использования со средой ардуино лучше использовать именно клоны Maple Mini а не обычные демоплатки, что бы не дёргать их вручную.
    Не все библиотеки можно использовать в прямую, приходится допиливать на ходу.
    На винде7 х64 всё живёт прекрасно.


    1. HWman
      08.07.2016 08:30

      Клон Maple Mini стоит 5 баксов, а это почти как Arduino Mega 2560.


      1. melodictsk
        08.07.2016 09:40

        во первых стоит 4. Для разовых поделок это не имеет никакого значения. А если предполагается изготовление продукта большим количеством, то для отладки всё равно проще взять мэпл мини, отладить на ней без лишних танцев с бубном и потом эту прошивку закинуть уже на что подешевле.


    1. ElectricFromUfa
      08.07.2016 08:45

      Расскажите, что конкретно приходилось допиливать и с какими отличиями плат это было связано?


      1. melodictsk
        08.07.2016 09:51

        Платы идентичные (мэпл мини и минимальная отладочная), отличие только в распиновке и авторебут для заливки прошивки у мэпл мини.
        У стм32 на ардуино иде i2c работает постоянно с глюками, особенно если использовать обе шины.
        ШИМ другой, если использовать для чего то более серьёздного чем просто поморгать.
        Надо несколько костылей для корректного использования ком порта через усб.

        Вообще мой путь начинался с ардуино на авр, потом ардуино дуэ (арм), стм32. Начиная с арм, почти всегда приходится лезть в кишки библиотек и что-нибудь допиливать. Код постепенно обрастает ассемблерными вставками заточенными на проц.


        1. Winnie_The_Pooh
          08.07.2016 09:58

          как Вы решили вопрос с глюками I2C?


          1. melodictsk
            08.07.2016 10:05

            Оооо, это великое колдунство… Неделя ковыряния и что-нибудь происходит и она начинает работать.
            Сейчас у меня завис проект усилителя. Там темброблок управляется по и2ц, никак не могу победить. Похоже придётся переходить на авр :( и отказыватся от ряда функций.


            1. nafikovr
              08.07.2016 11:09

              для ненагруженного i2c проще сделать софтовую реализацию.


              1. melodictsk
                08.07.2016 11:17

                От авр не подходит, те что для стм32 работают криво.
                У вас есть опыт софт и2ц на стм32 в ардуино иде? Если есть нормальная рабочая либа?


                1. nafikovr
                  08.07.2016 11:19

                  софтовая реализация достаточная для редкого чтения/записи нескольких байт пишется простым ногодрыгом за пол часа. какие еще либы тут нужны?


            1. Sun-ami
              12.07.2016 01:54

              Сталкивался с темброблоком, который не поддерживает 400КГц по I2C, только 100. Может в этом причина?


  1. KonstantinSoloviov
    08.07.2016 08:05

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

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

    В качестве отправной точки использовалась эта статья (похоже — перепечатка, но оригинала я не нашел)


    1. HWman
      08.07.2016 08:19

      У меня ничего не компилируется на версии 1.6.7:
      image

      А встроенный загрузчик есть, он он не даёт возможность прошивать плату по аппаратному USB.


      1. KonstantinSoloviov
        08.07.2016 08:52
        +1

        Вы хочите пруфов?

        Их есть у меня! :)


        1. HWman
          15.07.2016 03:51

          Действительно, на версии 1.6.5 библиотека OLED_I2C заработала:



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

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


    1. Alexeyslav
      08.07.2016 14:40

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


  1. roboter
    08.07.2016 09:00

    а примеры по работе с USB есть?
    например эмуляция клавиатуры


  1. Bismuth208
    08.07.2016 09:06
    +2

    Есть чуть более простой способ.
    Можно не прошивать загрузчик. Нужен ST-Link и тот же репозиторий от Роджера.
    В папке с библиотеками (точнее в папке Arduino, где лежат библиотеки) создать рядом папку hardware и туда поместить все содержимое репозитория.

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

    На этом все, и не нужно будет мучатся с ресетом, устанавливать драйвера, прошивать загрузчик.
    Бонусом на будущее будет программатор, но это будущее, и сами потом поймете зачем :)


    1. KonstantinSoloviov
      08.07.2016 09:24

      ST-Link неизбежно появится у всех кто захочет чуть серъезнее заняться stm32 (- быстрая прошивка, отладка, незанятые пины), но в качестве задела сойдет и загрузка по uart

      >На этом все, и не нужно будет мучатся с ресетом, устанавливать драйвера, прошивать загрузчик.
      лукавите — драйвер понадобится уже для ST-Link'а )


      1. nafikovr
        08.07.2016 11:12

        китайцы кстати торгуют вполне годными стлинками по 2-3 бакса. купил пол дюжины после того как один оригинальный помер после небольшого чиха.


      1. Bismuth208
        08.07.2016 11:25

        Да вы правы. Запамятовал, что под виндой ставились вместе с IAR. Под OSX ничего не ставил, а так как это было недавно, то и осталось в памяти.


  1. Winnie_The_Pooh
    08.07.2016 09:41
    +1

    У меня была проблема с аппаратным интерфейсом I2C. Раз в секунду читались датчики — первое чтение правильное, остальные ерунду давали.


  1. dernuss
    08.07.2016 09:58
    +1

    STM32F103C8T6 хитовый микроконтроллер, с отличной периферией по отличной цене.
    Думаю лучше всё таки научиться программировать его с помощью обычных библиотек (HAL, SPL или libopencm3).
    Тогда можно раскрыть все возможности микроконтроллера.
    Ещё один хит от стм, это STM8S003, очень дешёвый. Применяю его там, где STM32 явно избыточны.


  1. softmart
    08.07.2016 12:38

    В STM32 есть BKPSRAM — 4 КБ энергонезависимой SRAM (питается от батарейки часов). Правда в моделях постарше, а не в бюджетном STM32F103C8T6.


    1. dernuss
      08.07.2016 12:48

      BKP register есть и в STM32F103C8T6, ну только их мало.


      1. softmart
        08.07.2016 12:51

        BKP register и BKP SRAM — разные вещи. С практической точки зрения сильно разные объемы (84 B и 4 КБ)


        1. dernuss
          08.07.2016 12:58

          Ну с практической да, объем конечно меньше. С другой стороны 84 байта, они есть:)
          Всё зависит от задачи, я всего 1 байт использую, только для того чтобы флаг загрузчику передать.


          1. softmart
            08.07.2016 13:05

            Я 4 KB использую как буфер значений датчика. При отключаниях питания буфер не стирается, этим гарантируется непрерывный мониторинг.

            Ну и плюс в этих 4 KB хранится запись SytemHealth, там вся инфа о возникших ошибках/ассертах, срабатываниях вочдога и т.д. за все время работы. Очень помогает увидеть качество работы устройства в реальных условиях у заказчика. А то может быть ситуация когда девайс у заказчика перезагружается по вочдогу, а разработчик об этом никогда и не узнает.


            1. dernuss
              08.07.2016 13:15

              Конечно присутствие такой памяти радует. Хотя батарейка тоже имеет свойство садится.


              1. softmart
                08.07.2016 13:25

                Ну CR1220 хватит девайсу на год без питания. А в реальных условиях год без питания наберется лет за 10 работы.


  1. aronsky
    08.07.2016 13:05
    +1

    Arduino тема всё больше захватывает умы человечества

    image


    1. HWman
      08.07.2016 13:37
      -1

      Постарался вложить всю суть данной статьи в одной картинке :)


  1. madf
    08.07.2016 16:52

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


    1. HWman
      08.07.2016 17:54

      Можно и квадкоптер сделать, при желании:

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


      1. madf
        08.07.2016 18:12

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


        1. HWman
          08.07.2016 18:49
          +1

          Вообщем как говорил Сократ, «Кто хочет, тот ищет возможности, а кто не хочет — причины».


          1. nafikovr
            08.07.2016 23:00

            ардуино в классическом виде даст на стм32 сделать ровно столько же, сколько и на авр. Если надо большего — нужно просто забыть об ардуино. А искать возможности сделать именно на ардуино — это как искать иголку в стогу сена при том что рядом стоит ведро с иголками


            1. HWman
              09.07.2016 00:54

              Как минимум 12-ти битный АЦП и 16-ти битный ШИМ на 12-ти портах, вот чем эта плата заметно отличается от Arduino плат основанных на AVR-ках.


              1. Alexeyslav
                10.07.2016 22:46
                +1

                Есть один такой интересный чип, для светодиодов предназначенный и с интерфейсом SPI — 24-битный ШИМ 12 каналов с 6-битной индивидуальной регулировкой тока по каждому выходу. И наращивай сколько хочешь таких выходов… интерфейс ведь SPI.


                1. HWman
                  11.07.2016 03:28

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


                  1. Alexeyslav
                    11.07.2016 08:38
                    +1

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


              1. nafikovr
                11.07.2016 07:46

                если для 12-бит АЦП я применения еще и смогу найти, то для 16-бит ШИМ — вряд ли.


                1. Alexeyslav
                  11.07.2016 10:04
                  +1

                  Управлять светодиодами, 8 бит довольно мало — слишком заметный шаг между уровнями что сразу становится заметным на плавных переходах яркости. А 16 бит уже позволяет развернуться.


                  1. nafikovr
                    11.07.2016 10:11

                    хм. при наличии гамма-коррекции 8 бит обычно хватает.


                    1. Alexeyslav
                      11.07.2016 11:49

                      Гамма-коррекция делает переходы ещё сильнее, и она нужна будет в любом случае.


                1. HWman
                  11.07.2016 12:20

                  Как я говорил в ролике — цифровой ЛБП может получится отличный.


                  1. nafikovr
                    11.07.2016 13:56

                    в ЛАБОРАТОРНЫЙ блок питания можно думаю и на цап раскошелиться.


                    1. HWman
                      11.07.2016 16:37

                      Посмотрим, я то всё не перестаю думать про тему ЛБП на этой STM32 плате…


                      1. nafikovr
                        12.07.2016 07:52

                        вообще я для себя решил что цифровой лабораторник плохая идея, особенно самодельный. пользуемся rigol dp832 только когда нужны конкретно фишки цифрового, в других случаях берем аналоговых собратьев ибо удобнее.


                        1. HWman
                          12.07.2016 11:05

                          Ну… У меня то крутится идея сделать аналоговый БП, но с цифровым управлением.


  1. HWman
    09.07.2016 10:45

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

    image


  1. GarryC
    11.07.2016 14:39

    «интегрированные в микроконтроллер часы реального времен» — не следует некритически повторять неудачные фразы из рекламных листовок, нет их там.


    1. dernuss
      11.07.2016 16:13
      +1

      Странно, а в даташите написано что есть.
      Да и народ вроде как использует http://golf2109.blogspot.ru/2014/05/backup-domain-control-register-rccbdcr.html


      1. Sun-ami
        11.07.2016 16:27
        +2

        RTC там есть, но упрощенные, по сути — микропотребляющие генератор и 32-битный счётчик с предделителем, с возможностью отдельного питания от батареи. Вопрос только в том, можно ли это считать RTC. По определению которое даёт википедия — нельзя. Но я считаю — можно, раз это специально предназначено для счёта реального времени.


        1. GarryC
          11.07.2016 17:07

          DS12887 — вот это часы реального времени, то есть собственно модуль счета времени, модуль учета даты, таймер прерываний, и, конечно же, модуль переключения питания + встроенная резервная батарейка на весь срок службы (10 лет).


          1. Sun-ami
            11.07.2016 18:03
            +2

            На самом деле представление времени в виде 32-битного или 64-битного числа секунд даже удобнее. Когда нужно выполнять какие-либо расчёты времени — его всё равно придётся преобразовывать к этому формату. Такой формат компактен и потому удобен для меток времени в логах. Кроме того он избавляет от заморочек с переводом времени — привязываемся к UTC и тогда временные уставки и таймстампы не сбиваются при переводе часов. А для конвертирования можно использовать стандартные функции C, лучше 64-битные чтобы избежать проблемы 2038 года. Мне RTC в STM32F1xx нравится даже больше чем «полноценные» RTC в STM32F2xx и STM32F4xx — они более универсальны, их можно настроить так чтобы считать и доли секунды. А регистр будильника и прерывание есть и там и там.


            1. dernuss
              11.07.2016 21:44

              Да, жаль в stm8 rtc нет. Приходится вешать внешний типа ds1307.


          1. dernuss
            11.07.2016 21:43

            DS12887A со встроеным кварцем и батарейкой вероятно хорошая… микросборка. Но! Она дорогая и большая.


            1. GarryC
              12.07.2016 10:55

              За все в этом мире надо платить…
              Хотя лично я юзал встроенный генератор с внешним кварцем 32768 и питал все это от ионистора и ионистора 4.7 Ф за вроде 40 рублей хватало на неделю точно.


              1. HWman
                13.07.2016 15:42

                Тогда CR2032 хватит на год как минимум.


  1. Sun-ami
    11.07.2016 17:57

    -


  1. rstepanov
    12.07.2016 14:45

    Коллеги, а есть у кого-нибудь электрическая схема именно этой платы, что на фото? То, что легко гуглится, немного отличается…


    1. HWman
      13.07.2016 15:41

      В статье есть, посмотрите внимательнее.


      1. rstepanov
        13.07.2016 15:53

        Спасибо!