STM32 vs Arduino

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

    STM32F103C8 Front STM32F103C8 Front

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

    Для масштаба положил рядом с Arduino Pro, которая меньше обычной Arduino Uno:
    Arduino vs STM32F103C8_r
    По размерам сам микроконтроллер точно такой же, только шаг ножек не 0.8, а 0.5мм, поэтому их поместилось в тот же корпус 48, а не 32. А вот плата с ним поменьше и стоит от $10 с доставкой.
    А что у нас с функционалом?

    Arduino


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

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

    STM32F103C8


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

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

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

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

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

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

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

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

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



    Скоро выложу у себя на сайте инструментарий для разработки под STM32: IDE EmBlocks вместе с тулчейном, который я доработал для поддержки ColinkEx и немного причесал шаблоны под часто используемые мной МК: STM32F103VE, STM32F103C8, STM32F100RB
    Метки:
    Поделиться публикацией
    Похожие публикации
    Комментарии 259
    • 0
      Похожа на аналогичную, с дисплеем, но тут, я смотрю, вообще ничего кроме контроллера и питания.
      Даже транзистор на подтяжку USB пожалели…

      Цену не углядел сначала, 10 баксов?
      Тогда норм)
      • 0
        Да, все просто и минималистично. Размер, комплектация, цена :)
        Кстати, на плате с LCD какие-то проблемы с USB — не хочет инициализироваться, видимо подтяжка неправильно настроена.
        • 0
          У меня три платы на STM с LCD, нигде проблем не замечал.
          Как отладочная, наверное, приятнее та, что с LCD, есть что пощупать, а избыточности и монструозности в ней не чувствуется. Правда стоит она подороже, 30 баксов почти.
          • 0
            Ну вот у меня почему-то не хочет подключаться, скорее всего дело в подтяжке. Не разбирался в деталях, пока оставил ее.
            На том же STM32F103VE у меня есть другая плата, более удобная для отладки.
            Кстати, моя с LCD стоила еще дороже — почти 50, правда брал давно.
            Кстати, а пример кода под нее для тач. скрина есть?
            • 0
              У меня тоже такая есть. Брал за 45, сейчас подешевело все.
              Тач не заводил, нужды не было, но знаю, что в ядре линуха есть дрова под него.
              • 0
                Вот у меня тоже не было, но сейчас есть идея сделать девайс с GPS. Мне тут один хороший человек передал GPS/GLONASS модуль.
              • 0
                У меня есть образ диска, на котором среди прочего есть новый архив с примерами для подобной платы. Могу выложить куда-нибудь.
                • 0
                  Напишите в личку, придумаем куда выложить
                  • 0
                    Коллеги, поделитесь поиумом! Вообще, может, на гитхаб примеры?
        • –13
          попытка продвинуть сайт?
          • +2
            Нет, всего лишь информация для тех, кто обычно пишет мне на почту или в личку — где найти подробности по моим проектам. Потому что я сам их периодически ищу, чтобы дать ссылку и уже немного надоело это.
            • 0
              а вы набиваете себе карму такими нелепыми комментариями?
            • +1
              Если девайс отключить, то программа не сможет корректно закрыть COM-порт.

              Это почему?
              • –1
                Потому что дескриптор будет некорректным. Прога об этом не узнает — нет способа узнать о том, что девайс исчез, если мы работаем с COM портом. Потому что COM порт это — это по сути файл. Ситуация такая же как выдернуть флешку из компа, с открытым на ней файлом Word. Word очень обидится, что файл посреди работы отобрали.
                • +1
                  вообще то есть — можно просто через определенные промежутки времени слать команду в комп, а он уже смотрит — если по таймауту не получили команду — либо ребутаем ком порт, либо закрываем. Но usb конечно для пользователя удобней и быстрее
                  • –1
                    Вы пробовали? А я пробовал — при попытке записать в отсутствующий девайс, который просто выдрали из компа, мы получим Exception. И все на этом. Порт ни закрыть ни снова открыть при подключении девайса, пока не перезапустим прогу. Разница капитальная. К тому же есть проблемы, когда девайс подключен постоянно к компу, а комп уходит в слип и возвращается. Там проблемы еще больше. Комп может запросто потерять несколько пакетов, пока просыпается, и пакеты битые могут быть.
                    С USB HID такого не бывает. И девайс может отслеживать спит комп или нет, и обмен гораздо правильнее, надежнее и удобнее организуется. Я с COM портами работал начиная с 2001 года. В разных девайсах. С обеих сторон — и с МК и с ПК. И могу сказать, их достоинство — распространенность и простота. На этом они заканчиваются, а недостатков море.
                    • +3
                      да ладно вам страху нагонять — все нормально программируется — USB удобен для пользователя и совершенно не удобен для программиста, com порт в этом плане гораздо удобнее, а поскольку вы можете как писать программу на стороне ПК, так и программу на стороне устройства — наладить коммуникацию с учетом всех исключений — не составляет проблем
                      • 0
                        Лично мне, как программисту, USB гораздо удобнее. Не проще, нет, но удобнее. Это да. удобство — это не тупой код, который глючит при работе девайса из-за его принципиальной ущербности, а тот, который работает надежно.
                        Для меня работа с девайсом, когда его не надо опрашивать, а он сам шлет данные по готовности и в пакетом режиме очень удобна.
                        Я написал свою реализацию пакетного обмена по USART, но USB все равно удобнее и функциональнее. Я могу в одном девайсе сделать и управление компом и кучу событий и обмен данными и вообще всего дофига, чего на UART не сделать никак. Это я и ценю в USB. А еще то, что не нужно искать какой же из десятков COM портов приинадлежит моему девайсу, не нужно ставить драйверов FTDI, CP2102 и тому подобных конвертеров. Не нужно самих конвертеров в конце концов. Пара резюков и все — девайс напрямую подключается к компу. Это удобно.
                        • +1
                          А уж HID и вовсе приятен, дров на хосте не нужно, программировать удобно.
                          • 0
                            А то! и функционал офигенный. не понимаю тех, кто делает CDC, когда есть HID. И потом ищет дрова под это убожество. А все потому, что кроме как UART они ничего не знают для коммуникаций.
                            • +1
                              CDC тоже не требует драйверов в общем случае.
                              • –1
                                В каком общем? Не только драйвер потребует но и либу скорее всего. Большинство девайсов делается как libusb. А я терпеть не могу таскать за приложением еще и dll лишние. особенно когда без них можно обойтись. Не надо плодить лишних сущностей. UART для взаимодействия с компом на постоянной основе подходит плохо.
                                • 0
                                  Делал на PIC18F2550 CDC устройство, которое не требовало драйверов. Вот втыкаешь, а оно сразу определяется.
                                  Не понимаю в чем проблема.
                                  • 0
                                    На компе вполне могли стоять драйвера ранее. По умолчанию их нет.
                                    • +1
                                      По умолчанию usbserial.sys в винде есть как бы…
                                      • +1
                                        Вот только каждый девайс вроде FTDI, CP2102 и любой другой требует свой драйвер — потому что это не является стандартным девайсом.
                                        • +2
                                          Потому что это FTDI и CP2102. CDC -стандартный девайс как ни крути.
                          • 0
                            я согласен, все зависит от задачи, на usb конечно это все лучше делается, но вы написали, что на COM порте этого сделать невозможно — возможно, была бы смекалка и желание)
                            • 0
                              Невозможно. То, что хочу я невозможно. даже приближенно реализовать — нужны усилия лишние. Вопрос — зачем? Зачем заниматься извратом, когда есть в девайсе встроенный функционал правильный, быстрый, надежный, удобный.
                              Я знаю, что есть любители оправдывать занятия ерундой и кривые реализации, но я их не поддерживаю и оправданий им нет.
                            • 0
                              А какие там максимальные скорости в случае с HID а то нам из контроллера надо максимум возможностей выжать. Как минимум мегабит а лучше два или десять даже.
                              • 0
                                Не тестировал, но HID вообще говоря не особо предназначен для суперскоростей с большими объемами. Когда нужно максимум выжать, тут и работать надо как следует — например сделать Mass Storage класс. Драйверов тоже не требует, передача Bulk, скорости — сколько может USB. Можно просто рассматривать как флешку и писать/читать файлы. Если не хватает — ставьте старший МК — там есть USB HS поддержка.
                                • 0
                                  Сейчас мы вообще на ethernet'е и tcp/ip сидим банально, но с его настройкой пришлось конкретно так повозиться.
                                  • 0
                                    Ну Ethernet только на coonectivity line или F4, а там совсем другие цены, да и камушки покрупнее будут :)
                                    Кстати, а разработка секретна или поделитесь?
                                    • 0
                                      Да нет, ПО для фрезерных станков, способное работать в микрошаговом режиме, в отличии от популярных ширпотребных решений. Вот для того, чтобы успевать ездить в микрошаге и нужен интенсивный обмен с контроллером.
                                      • 0
                                        Не ширпотребное решение на шаговике?
                                        • 0
                                          и почему не контроллером отрабатывать микрошаг?
                                          • 0
                                            Так он его и отрабатывает, просто точек очень много в траектории и отрабатывает он их крайне быстро, нужно успевать вовремя новые закидывать. Памяти в контроллере мало.
                                          • 0
                                            В смысле, что многое ПО, которое используется для управления шаговиками, оно привязано к винде и просто ему не хватает времени отклика для микрошага.
                              • +1
                                Я вам расскажу одну байку, основанную на реальных событиях. Делали мы один девайс как раз на вышеописанном процессоре. Одна индустриальная машинка, управляемая с компа. Модулей несколько, от трёх до много, все подключены к компу и им дирижируются. Увы, изначальный дизайн платы был не наш, потому на некоторые решения повлиять было сложно в процессе работы — у нас были примерно 10 готовых плат, в которые мы могли вносить минимальные изменения, на них нужно было отладить работу, чтобы потом заказать редизайн и новые платы.

                                Так вот, изначально когда-то было принято решения, что устройства управляются через RS-232. Потом наши предшественники решили, что это не очень OK, потому как в компах количество компортов со временем стремится к нулю, и заменили их на USB CDC. На платах были разведены USB-хабы, девайсы были подключены друг к другу по цепочке, а хвост втыкался в USB-порт управляющего PC. В итоге софт переделывать практически не пришлось. И вот в таком виде девайс попал к нам.

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

                                Вот когда мы начали этим интерлоком часто пользоваться, выяснилось, что одновременное выключение нескольких десятков работающих моторов и прочего просто начисто убивает USB. Т.е. сбрасываются все хабы и вообще всё, что есть на шине. Более того, ну ладно, сбрасываются они — и пусть, ведь подключаются сразу же назад. Оказалось, что не каждая операционная система с этим умеет бороться. К нашему сожалению, наши предшественники решили писать софт на C# и крутить его на Windows XP Embedded. Так вот, при каждом срабатывании интерлока ОС выпадала в «синий экран» в драйвере USB CDC. В качестве пробы я подключал свой лаптоп с Linux — устройства пропадали и возвращались, система никак не страдала. Мы перепробовали всё. Пробовали определять пропадание устройств, чтобы сразу же закрывать порт, думали о том, чтобы переписать нафиг драйвер (в каком-то SDK от MS есть исходники простого CDC-драйвера), была мысль даже написать userspace-драйвер на libusb (почти получилось, надо сказать). В конце концов избавились вообще от USB в пользу мультипортовой PCI-платы расширителя RS-232 и десятка экранированных кабелей. При всех теоретических недостатках RS-232 работало намного стабильнее.

                                Ну а следующая редакция платы просто использовала CAN (как и стоило бы делать с самого начала).
                                • +5
                                  Вы зафейлили топологию платы, разведя без учета защиты от движков и мусора, что он активно поставляет в схему. Либо использовали сторонние девайсы не приспособленные для того. USB тут совсем не при делах. CAN конечно лучше будет, но и с ним могут быть фейлы если плата кривая.
                                  • +1
                                    Читайте выше, изначальный дизайн платы не наш. Кроме того, в плате всё разведено было с учётом всего, что надо.

                                    Ну и вообще речь не о том, а о том, какова поддержка USB CDC в Windows, и каких проблем можно отгрести, если попробовать на неё положиться.
                                    • 0
                                      этот вариант я тоже упомянул в комментах.
                                  • +3
                                    Ну USB сам по себе не пром. стандарт, там длина кабеля, если я правильно помню, по стандарту около метра. В таких условиях как у вас из простых шин часто 485 юзают, ибо дифференциальная (в отличие от 232).
                                    • 0
                                      485 можно было, но требовало переразводки платы.
                            • +3
                              Почему дескриптор будет некорректным? Можно ничего не подключать к порту и писать туда сколько угодно. Все будет корректно, только ответа не будет. Проблема у вас не в порте и не в девайсе, а в программе, которая с портом работает.
                              • –1
                                вообще есть, и работает. реинициализация вполне прекрасно ловится.
                                есть проблема с FTDI чипом, который может от ЭМ помехи зависнуть так, что только перезапуск USB порта по питанию работает, но на вин8 это починили.
                                на линухе нет проблем и так с ними
                                • 0
                                  Ок, как? пример под Win7 или 8
                                  • 0
                                    на питоне pyserial обычный.
                                    обормачиваем в try: except: — и работает даже когда отваливается как ридер, так и врайтер.
                                    после этого надо просто открыть порт еще раз с небольшим таймаутом
                                    • 0
                                      А теперь давайте попробуйте это в реальной жизни. USB CDC на Windows — да больше никогда в жизни.
                                      • 0
                                        Я в реальной жизни это и использую. FTDI, в форме VCP — работает без проблем.
                                        Единственная проблема, которая есть — это WinXP/Win7 при высоком уровне ЭМ помех.
                                        Но даже там нашел способ — выключается-включается корневой USB хаб, и это обесточивает нижестоящий, и требуемый порт — всё отвисает и начинает работать.
                            • 0
                              Тоже присмотрел такую плату, только потестировать никак не доберусь… А не встречали что-то подобное но с ZigBEE на борту? Желательно чтобы цена была минимальной.
                              • 0
                                С ZigBee не может быть минимальной по определению — стандарт закрытый. Xbee еще куда ни шло. А зачем? любые беспроводные интерфейсы правильнее располагать отдельно, чтобы не мешать антенне.
                                • 0
                                  Xbee и ZigBee кажется согласуются, так что можно и его. Для меня в данном случае критичны размеры (максимум 60*60 мм), цена (не более 25-30 у.е.) и хотя бы 20 пинов I/O. Готовлю один проект где потребуется много таких модулей, потому параметры и критичны. Правильней оно конечно да, но вот тут например ничто никому не мешает, только к сожалению радиоканал не тот? который мне нужен.
                                  • 0
                                    Ну когда нужно много, то Ariman прав — можно и самому развести. Тем более, что это не ПЛИС разводить. 48 ножек вполне можно и в 1-2 слоя уложить.
                                    • 0
                                      Можно то можно, но как показывает практика нервов, времени и денег иногда на самостоятельное изготовление уходит больше, чем если покупать модули и из них что-то делать. Я сейчас уже стараюсь делать платы только если они совсем не типовые, нужно сделать быстро или покупные модели стоят неправомерно дорого.
                                      А плану нашел вот такую SPZB32W1A2.1 и стоит не очень дорого — меньше 600р. Надо посмотреть что она из себя представляет.
                                      • 0
                                        Времени и нервов уж точно. Я несколько устройств сделал, могу сказать, что это самая трудная часть — разработка и изготовление железки правильно, так. чтобы она работала.
                                        За 1 модуль это многовато. Учитывая что ни антенны ничего подобного нет.
                                        Модуль на 100мВт на 433 или 915 МГц с антенной, готовый к использованию столько стоит (3DR Radio).
                                        • 0
                                          Да, модель очень интересная, наверняка для каких-то задач этот модуль подходит, но MASH-сеть на нем не построить, по крайней мере без дополнительного геморроя и хитрого программирования (а может быть и вообще это окажется невозможным).
                                          Судя по документации A — означает встроенную антенну, а на картинке в документации изображен модуль с внешней антенной.
                                          • 0
                                            Что за MASH сеть?
                                            • 0
                                              Опечатался, имел ввиду MESH (ячеистая топология).
                                              • 0
                                                Почему бы нет? все девайсы с одним ID друг друга слышат
                                  • 0
                                    Xbee — это одна из железок, которая говорит по ZigBee, а вам нужен 802.15.4, скорее всего :-)
                                • +1
                                  Перечесал кучу IDE для работы с STM32, остановился на CooCox IDE (http://coocox.org/index.html).
                                  Там уже есть все что нужно, включая поддержку STLink, J-Link и т.д.
                                  • +1
                                    CooCox есть, но у него проблема с тем, что нет поддержки С++ и не будет никогда. А есть проекты, в которых код написан на С++ и переписывать его долго и муторно.
                                    К тому же мне не нравится то, что он — обрезанный Eclipse. Настроить в нем что-то под себя почти нереально. Надо либо рыться в конфигах либо вообще никак. В частности никак не добавить недостающие горячие клавиши. Ну и eclipse не самое быстрое, что есть.
                                    EmBlocks в native коде написан, хорошо расширяется (в основе его CodeBlocks, который я тоже юзаю), он не требует установки, можно носить на флешке. Проекты из CooCox легко в него переносятся, я перенес пару своих проектов. Редактор в EmBlocks настраивается очень неплохо. В общем, с кастомизацией у него лучше. Но CooCox тоже использую, просто он тяжеловесный и медлительный, но проверить идею по-быстрому в нем не проблема.
                                    • +1
                                      народные умельцы прикрутили к нему поддержку C++, но на самом деле чаще всего в проектах под МК с низкоуровневым программированием в C++ нет нужды просто
                                      • 0
                                        А вы видели сколько манипуляций для этого нужно и как криво это реализовано? Вот пусть умельцы этим и пользуются.
                                        С++ мне лично нужен. По эффективности кода он бывает даже лучше С, это уже тоже проверено, в том числе и для МК. А писать удобнее.
                                        У вас нет нужды? я рад за вас. Многим разработчикам хватает блокнота и они готовы каждый раз писать make руками или переделывать выдранный из другого проекта. Я нет.
                                        Я люблю проверять идеи быстро — нажал кнопочку создать проект, получил заготовку, в которую пишу только нужный мне код и нажав две кнопки получаю прошитый девайс. Вот это удобство. Если мне нужно для проверки идеи создавать и настраивать новый проект более 1 минуты, то я этого делать не буду.
                                        • +2
                                          тем самым вы сами себе роете яму — программирование МК это в первую очередь знание устройства на низком уровне, потом уже удобство программирования, преимущество C++ для ПК — возможность использования фреймворков и т.д. и т.п., программы для мк(если не ставить ОС) обычно довольно просты и не требуют возможностей C++ — без классов спокойно можно обойтись, используя структуры и указатели на функции — про создание проекта — никак не относится к C/C++ — зависит от среды разработки
                                          • 0
                                            Ничего подобного :)
                                            Вы давно распиливали девайс и изучали его на уровне транзисторов? Я нет. и не буду. Мне достаточно логики работы девайса и схемы из даташита. а в идеале и еще проще — только логики. Обойтись можно без чего угодно, но я люблю удобство, особенно когда оно бесплатное. можно и на одной руке ходить научитсья, а зачем?
                                            У меня, например, программы не всегда просты, к тому же я часто использую код в последующих проектах и код на С переносить неудобно, а на С++ классы переносятся бесшовно. Я пишу и под МК и под ПК сам, один. Поэтому проект в целом может быть очень большим. Лишние телодвижения мне ни к чему.
                                            Еще раз — если можно получить простоту и удобство бесплатно с точки зрения производительности и инструментария, то почему не получить?
                                            • +2
                                              потому что в программировании МК — СИ это стандарт, а СИ++ — экзотика — вам просто проще будет договориться или адаптировать код с другими разработчиками
                                              • 0
                                                Ерунда, в том же STM32 STDPeriphLib есть заготовка под С++, чтобы корретно компилировалось. Так что проблем не будет.
                                                А больше разработчиков потому, что вендоры ленятся сделать поддержку, опрадывая это своей ленью такими вот странными способами. С++ уже много лет как не то, что не экзотика, а мэйнстрим.
                                                • +4
                                                  Вы так наивно полагаетесь на STPL. А в ее код пробовали заглядывать? Там адский трешак, такое ощущение, что многое оттуда было написано индийскими студентами на зачет по лабе.
                                                  • +1
                                                    Кто сказал, что я на него полагаюсь? :) Просто с ним быстрее делать пробы, примерно как с Arduino — попробовал идею на платке — сделал свой девайс. Что там трешак, я видел. Но для большинства случаев работает. Когда не работает или нужен надежный чистый код, садимся и пишем сами. Чисто и аккуратно. Для экспериментов этого не требуется. Для несложных устройств — тоже.
                                                    Пример из мира ПК — есть VCL, есть MFC и куча других библиотек, они довольно увесистые, но добавляют удобства. Я могу написать программу на чистом WinAPI, но это как пилить ручным лобзиком морскую яхту.
                                                    Кстати, за статьи спасибо :)
                                            • 0
                                              Встречный вопрос на засыпку: Для чего в современных МК по 128кБ флеша?
                                              • 0
                                                в смысле? — есть меньше, есть больше
                                                • +1
                                                  во первых программы даже на Си могут быть достаточно большими, во вторых — этот флеш можно использовать для своих нужд как энергонезависимую память
                                                  • –1
                                                    Это очень редко. Когда прикладная программа для МК весит СТОЛЬКО.
                                                    Как раз для бесконтрольного использования тяжелых языков это все и сделано.
                                                    • +1
                                                      Прикладная программа может содержать большие таблицы констант, шрифты, изображения.
                                                      • 0
                                                        Может, а может и не содержать. Поэтому не понимаю почему мигание светоидиодами и кручение сервомашинок ШИМом не может быть описано на плюсах?
                                                      • +1
                                                        Да на C++, мне кажется, тоже не сделаешь настолько громоздкий код.
                                                        Можно данными забить, можно виртуальную машину какую, специфичную для области, вот этим самое оно.
                                                        Вон даже в АВР явамашину упихивали, в 8 кб…
                                                        • 0
                                                          Когда девайс только и делает что дергает парой ног, я вообще не вижу смысла делать девайс. МК для меня — это в первую очередь обработка информации из реальногом мира. То есть интерфейс и интеллектуальная обработка сенсоров и управление исполнительными девайсами. Маленький такой компьютер. Давняя мечта. которая теперь — реальность. А не просто набор резисторов и транзисторов в одном корпусе, тупой как и раньше.
                                                          Самое ценное в МК — возможность писать программу любой сложности и связываться с ней извне.
                                                          • 0
                                                            Это субъективщина.
                                                            Когда от девайса нужно только дергать ногами — это тоже девайс. И делать его в ряде случаев проще именно на МК.
                                                            Как пример могу привести устройство, которое переключает питание между насосами(неграмотная разводка отопления в цеху заставила переключать насосы, иначе один остается холодный почему-то).

                                                            Так вот… штука только и умеет, что раз в минуту переключать состояние реле. Можно было бы рассчитать мультивибратор… но зачем, если у меня вагон PIC12F629 и программатор и рыба под прогу под рукой.
                                                            Выставил таймер, прошил — свободен. Дело реально заняло минут 20 от начала до конца.
                                                            Без рассчетов и настройки. Тайминг — естественно отличный.
                                                            • 0
                                                              Вот, чтобы не было «почему-то» МК должен не просто тупо переключать ножки, а должна быть обратная связь, которую он обязан учитывать прежде чем выключить или включить исполнительный девайс. На то он и МК, а не схема переключения реле с термостатом по принципу автомобильного радиатора.
                                                              Я считаю, что там где устройство может решить проблему, что им нужно управлять и следить за ним, оно должно ее решать. В этом ценность МК — возможность к исполнительным устройствам и сенсорам прикрутить логику.
                                                              • 0
                                                                «Почему-то» касается исключительно разводки отопления. Гидродинамическое сопротивление одной ветви сильно отличается от второй.
                                                          • 0
                                                            Java это уже извращение на МК. Squawk для cortex M3. Хм даже на роутерах с 128Мб RAM и 500MHz MIPS процом Java SE крайне неотзывчива.
                                                            • +1
                                                              Там специальная ява) Squawk по сравнению с ней — тяжеленный монстр.
                                                          • 0
                                                            Это написано на С с использованием STM32StdPeriphLib. + Debug информация.
                                                            И это еще очень простой функционал. Я люблю функциональные девайсы.
                                                            А верх тупизны — это Hydra с встроенным интерпретатором .Net и то, что RPi предлагают программить на питоне! Вот это изврат. Там и так кот наплакал производительности и памяти.
                                                            • 0
                                                              Отнюдь не очень редко. «Во-вторых..», упомянутое SlavikMIPT, вполне себе имеет место быть. Я видел не так уж и мало проектов на работе, где большой flash в микроконтроллере использовался именно что для хранения различных неизменяемых в процессе работы ресурсов (например, нижеупомянутые шрифты), исполняемого кода виртуальных машин, специальных загрузчиков и так далее…

                                                              Так что, говорить, что в микроконтроллерах теперь есть много flash-памяти только ради бесконтрольного использования тяжелых языков — как минимум однобоко. Ведь микроконтроллеры — они не для программистов, а для выполнения поставленных в ТЗ задач.
                                                          • 0
                                                            Мой текущий проект в DEBUG target имеет размер 40 кБ. Там только примерно 2/3 функционала реализовано. Будет еще. Да, release будет гораздо компактнее, но пока так. И мучаться с тем, что не влезает не хочется.
                                                            • +1
                                                              Есть и мегабайтные. А в современных телефонах под baseband прошивку уходит порядка 20мбайт кода. Еще столько же на кастомизацию.

                                                              Но для не совсем простых задач — 128 кб это очень и очень нужно. И этого реально мало. Поддержка нормальной ОС — килобайта 32 минимум. Математика — сразу килобайт 20 прийдет из stdlib/newlib. Нужен защищенный загрузчик? отведите еще килобайт 10 на реализацию какого-нибудь нормального шифрования. Шрифты, тексты, протоколы. Что остается под логику? Да почти ничего.

                                                              Остальное — просто уходит под эмуляцию EEPROM. У EEPROM было гарантированное количество циклов перезаписи 1 млн. У флеша — 10 тысяч. Вот и посчитайте, во сколько раз нужно дублировать область перезаписи, чтобы добиться схожих характеристик.
                                                              • 0
                                                                Не поверите, но нам на C не хватало.
                                                                • 0
                                                                  Легко поверю.
                                                        • 0
                                                          А я разобрался с настройкой Eclipse + GNU ARM plugin + Sourcery CodeBench Lite + OpenOCD, и теперь у меня есть полноценная IDE с поддержкой C++ в том числе. Пишу для STM32, шью и отлаживаю через OOCDLink-s (на FT2232D) и через ST-Link 1 и 2.
                                                          • +2
                                                            А если не только похвастаться, а и поделиться со всеми статьей и сборкой?
                                                            Я про свой вариант на Emblocks вскоре напишу.
                                                            OpenOCD кстати довольно медленная, я пробовал этот вариант. Самый быстрый получается на ST-Link + его GDB сервер.
                                                            Неплохо черех ColinkEx с его GDB сервером.
                                                            • 0
                                                              Вылетело из головы. Вот моя статья. Правда, писал я её давно, и тогда я использовал проект stlink с GitHub. Сейчас в этом уже смысла нет, т.к. прекрасно работает OpenOCD. Есть ещё чья-то статья на we.easyelectronics.ru, где настраивают с OpenOCD.
                                                              • 0
                                                                А, видел :) Мне не понравилось, что нужно испортить STLink в Discovery чтобы заработало. Плюнул и вернул на место родной вариант, так его видят CooCox и другие. И OpenOCD очень медленно работал.
                                                                • 0
                                                                  «Портить» нужно только под виндой. Может, вы какой-то старый OpenOCD использовали? Я начал им пользоваться с версии 0.6.0 — там всё, как надо: скорость прошивки 10-17 кбайт/c в зависимости от конкретного камня. Опять же, я всё делал в Ubuntu.
                                                                  • 0
                                                                    Ну так я под виндой и работаю. Linux у меня только на ноуте второй системой стоит для экспериментов. Хотя бы потому, что EmBlocks под линух нет. И я говорю не о скорости прошивки, а о скорости запуска дебаггера, подключения к плате и скорости отладки. Вот отладка идет очень медленно. Не знаю почему. STLinkGDB и тот, что идет с колин кексом существенно быстрее.
                                                                    Ubuntu у меня стоит, но не радует удобством разработки под ней.
                                                                • 0
                                                                  я достаточно долго разбирался, как работать с STM32F4 под ubuntu, и, на мой взгляд, самый адекватный howto embeddedprogrammer.blogspot.ru/2012/09/stm32f4discovery-development-with-gcc.html
                                                                  С ним завелось все достаточно быстро, только единственное НО. Работает только с версиями, которые указал автор, с более свежими версиями почему-то у меня не завелось.
                                                                  И вообще: порог вхождения программиста STM32F4 мне показался гораздо выше, чем FPGA Altera и Xilinx(с ними тоже есть заморочки). Про Wing вообще молчу.
                                                                  Еще не по теме, но у меня есть FRDM-KL25Z c M0+, так под него запилили mbed.org/, она пока очень-очень далека от нормальной среды, но кроссплатфомренность создает магию.
                                                        • 0
                                                          Странная плата. Ее по идее сделать можно было еще меньше и получить более конкурентное преимущество.
                                                          Вот кому, скажите, нужен JTAG?
                                                          Пол человека на сотню его используют.
                                                          • 0
                                                            согласен с тем, что можно было обойтись 4 проводами SWD. Но принято ставить этот громоздкий интерфейс 2х10. он и на программаторе ST-Link V2 и на CoLinkEx и вообще везде. С чистым SWD не видел. Я тоже ругаюсь периодически по поводу дуракцих плат. Уже писал на эту тему.
                                                            • +1
                                                              Таких плат можно вагон наделать, кстати — цены на производство очень сильно упали.
                                                              Только стоит ли? ИМХО делать плату с одной STMкой смысла нет, это же не процессорный модуль с DRAMами.
                                                              • 0
                                                                Можно, вот только сидеть и самому паять вагон плат смысла не вижу, а для экспериментов — самое то. Ну и девайс штучный собирать можно надевая вторым этажом исполнительную часть. Суть та же, что у Arduino. Это так называемая CoreBoard. Я себе заказал 5 штук STM32F103CB. Но нужно развести и изготовить плату, а в один слой я пока не смог сделать что-то приличное, а двухслойных сразу десяток заказывать пока нет нужды.
                                                                • 0
                                                                  Почему не процессорный модуль? Это он самый и есть. Поэтому меня возмущают эти габариты в угоду устаревшему оборудованию.
                                                                  SWD есть? Есть. Зачем тут 20пиновая пластмасска, которая занимает 20%(!) полезной площади.
                                                                  • 0
                                                                    Потому что он нафиг не нужен. Процессорный модуль с DRAM разработать на порядок сложнее, двусторонней платой не обойтись, разводить надо вдумчиво и правильно, иначе не заведется память. Поэтому использование таких вот модулей оправдано и снижает время и стоимость разработки.

                                                                    А «модуль» на СТМке бессмысленный, чем клепать под него хостовую плату, можно его сразу на нее и поставить, техпроцесс тот же.
                                                                    • +1
                                                                      Модуль никогда не бессмысленный. Всегда найдется тот, кто не захочет паять TQFP. Вот вообще никак не захочет.
                                                                      • +1
                                                                        Купит отладочную тогда.
                                                                        Если он не захочет паять TQFP, то в его поделке уже пофиг на JTAG.
                                                                        • +1
                                                                          Отладочная не стоит 10$ и несет на себе массу бесполезного мусора, в виде кнопочек, светодиодиков, разъемчиков и прочего-прочего.
                                                                          Моя концепция: чем меньше — тем лучше, но не в угоду отсутствию юзабилити.

                                                                          Вот яркий пример моей концепции habrahabr.ru/post/177803/
                                                                          Хоть и не АРМ.
                                                                          • 0
                                                                            См. пост. Эта отладочная стоит 10$. Это же не пинбоард, тут мало всего натыкано.
                                                                            А вообще, проверить проект хватит любой отладочной, в том числе и с «мусором». А после проверки надо бы уже проектировать нормальную плату, а не пихать этих монстров в итоговый девайс.
                                                                            • –1
                                                                              Правильно, монстров пихать в девайс не нужно. А что монстров делает монстрами — обилие ненужной периферии.
                                                                              • 0
                                                                                От того, что кто-то поленится развести место под контроллер на плате и сделает «нашлепку» в виде такого модуля, этот модуль монстром быть не перестанет, даже если там только контроллер.
                                                                                • 0
                                                                                  Зато сделает быстро, и может даже денег заработает?
                                                                                  • 0
                                                                                    Совершенно точно. Я так вообще купил плату под штучный заказ, но оказалось, что она вообще полезна и удобна :)
                                                                                    • +2
                                                                                      Это верно в случае с многослойными платами и тяжелыми процессорами. Если речь идет об TQFP — STMке, то никакого «зато» не будет.
                                                                                      • 0
                                                                                        .
                                                                                        • 0
                                                                                          Это очень расплывчато. Ваяющие сайтики на PHP тоже могут заработать 200$ в день ничего не паяя.
                                                                                          Хостовая плата из воздуха появится? И модуль к ней сам прилипнет? Или как вы собрались без пайки и изготовления платы этот модуль использовать?

                                                                                          Если речь о макетке, тогда, опять же, это значит, что требования к габаритам у вас более чем мягкие.
                                                                                          Поэтому случай, когда «я могу себе позволить делать нашлепки и использовать макетку без пайки, но не могу позволить наличия там одного 20-контактного разъема» очень и очень редок, вырожден почти.
                                                                                          • 0
                                                                                            У вас редок, у меня част. О чем спор?
                                                                                            • 0
                                                                                              Вы упорно игнорируете вопрос — «откуда у вас хостовая плата»)
                                                                                              А то очень интересно получается, как будто проектировать плату, изготавливать, паять не собираются, но хостовая плата под модуль внезапно откуда-то возьмется.
                                                                                              • 0
                                                                                                Я ответил ниже.
                                                                                          • 0
                                                                                            удалил
                                                                                          • 0
                                                                                            Очень даже будет. Я недавно 200$ за день заработал, и при этом ничего не паял.
                                                                                            Хотя мог бы… Но не захотел, потому что было бы не 200$ за день, было бы 200$ за два дня.
                                                                                  • +1
                                                                                    Вот лично я не хочу ни травить ни паять ни тем более тратить время и разводить эту дурацкую плату. Для меня вообще работа с любым трассировщиком и рисование плат — мучение. Ненавижу эту работу. Если бы можно было получить плату просто нарисовав блоки, которые мне нужны, я бы так и делал. А пока самый простой способ — именно такой — взять процессорный модуль и сделать к нему «шилд». Это быстрее и проще. А по моему времени — еще и дешевле. Вот когда будет на девайс спрос, тогда и сделаем все на одной плате, а для небольших проектов и экспериментов — самое оно.
                                                                                    Профессиональных разработчиков в расчет вообще не беру. Они могут себе позволить и мучаться с KEIL и IAR и заказывать платы в резоните и поддерживать зоопарк МК. Это их хлеб.
                                                                                    мне нужно просто, дешево и удобно.
                                                                                    • +1
                                                                                      Профессиональных разработчиков в расчет вообще не беру. Они могут себе позволить и мучаться с KEIL и IAR и заказывать платы в резоните и поддерживать зоопарк МК. Это их хлеб.

                                                                                      Зоопарк МК, профессиональные разработчики держать не любят, это я вам как профессиональный разработчик говорю.
                                                                                      • 0
                                                                                        Тем более. Так что вопли о том, что есть же море разных уникальных плат для меня выглядит странно — учить что-то, чтобы использовать в одном проекте? нафиг.
                                                                                        Я уже прошел то время, когда каждая железка вызывала восторг. Сейчас от железок мне нужна простота, надежность, дешевизна и гибкость. и желательна унификация. Почти все из этого списка я нашел. Не в идеале, но уже сносно.
                                                                                      • 0
                                                                                        И какая вам разница, вести несколько дорожек в «шилде» к этому модулю, или к самому контроллеру?
                                                                                        • 0
                                                                                          Разница достаточно большая, если вас этот ответ устроит.
                                                                                          • 0
                                                                                            Нет, не устроит, ответьте конкретнее.
                                                                                            Если уж стали изготавливать плату (или откуда возьмется «шилд»?), то в чем такая уж «достаточно большая разница»?
                                                                                            В шаге между выводами?
                                                                                            Тех, кто добрался до кастомной платы, обычно это не останавливает. А если проект закончился на макетке, то не пугает «мусор» на отладочных.
                                                                                            • 0
                                                                                              Как вы не поймете, что мусор на отладочных не пугает, он просто занимает место. Там куда влезет модуль, нет необходимости травить плату, но туда не поместится отладка.
                                                                                              И вот когда не влазит модуль, вот тогда нужно травить-паять.
                                                                                              Соответственно если модуль маленький, то случаев «травить-паять» становится еще меньше.
                                                                                              Добавлю, что в посте не отладочная плата, а именно процессорный модуль. Он сам ничего не умеет.
                                                                                              Отладочные платы позволяют отлаживать код без внешнего обвеса, а которые не позволяют — это процессорные модули.
                                                                                              • 0
                                                                                                Модуль это или отладочная плата вопрос спорный, границы размыты. Если мне требуется USB-устройство, я смогу отладить на этой плате код без внешнего обвеса, например.
                                                                                                А хостовую плату вы откуда берете тогда? И все остальное, чем модуль этот управляет?
                                                                                                • 0
                                                                                                  Хостовая плата делается под задачу. Часто это просто кусок FR4 с вырезанными ножом или гравером дорожками.
                                                                                                  Все остальное это что?
                                                                                                  У меня, например, часто это вские оптосиммисторы, которые подключаются натурально проводами и болтиками, и на плату не паяются.
                                                                                                  • +1
                                                                                                    Ага. И все остальные компоненты на хостовой плате имеют такой шаг и ширину выводов, что можно плату вырезать ножом? И все упирается только в сам STM?
                                                                                                    Ну поздравляю, если у вас такие задачи «часто», то у вас уникальное производство, для вас эти модули в самом деле имеют смысл.
                                                                                                    • 0
                                                                                                      Шаг стандартный для выводных компонентов — 2.54
                                                                                                      Это естественно не для серийного производства изделий, а для технологических нужд.
                                                                                                      Серийное производство у меня основано на простейшей продукции Ti и Microchip.

                                                                                                      Подобное как в посте изделие в серийное устройство я бы не поставил по нескольким причинам.
                                                                                                      • 0
                                                                                                        Я понимаю, просто сейчас далеко не все можно найти в выводном корпусе. И далеко не всегда по требованиям пройдет плата, вырезанная ножом. На моей практике это редкость. Обычно заказчики за каждый миллиметр бьются, там не до ножа, даже TQFP вместо QFN не поставить.
                                                                                                        • 0
                                                                                                          Не всегда. Я же не говорю что всегда надо делать так как я.
                                                                                                          Я и сам делаю печатные платы, когда этого требуют обстоятельства, но вот когда обстоятельства этого не требуют, предпочитаю экономить время.
                                                                                                          • 0
                                                                                                            Я тоже, просто не сталкивался с возможностью экономить время на мелочи типа TQFP.

                                                                                                            А вот с тяжеловесными процами — это да, сам уже сколько вот разные модули рассматриваю. И, кстати, вот там-то точно прямо зло берет — китайцы делают на гигагерцовом проце, с гигом оперативки миникомпьютер размером 85х27 — при том что там еще левая фигня типа HDMI, разъемы, прочая дрянь.

                                                                                                            А самый близкий по размерам девелоперский модуль оказывается сильно хреновее. Вот почему не сделают дев.модули на той же базе, на которой китайцы свои мини-компы клепают?
                                                                                                            • 0
                                                                                                              Мини-компы для широкой публики и цену свою имеют благодаря массовости.
                                                                                                              Отладочные платы же — товар штучный.
                                                                                                              Тут прямая аналогия с измерительной техникой, например.
                                                                                                              Ведь осциллограф Agillent на 500MHz стоит 10 килобаксов не потому, что там себестоимость 8, а потому что покупают их один в неделю(грубо говоря).
                                                                                                              • 0
                                                                                                                Я не о стоимости даже, а о наличии.
                                                                                                                Стоимость это уже второй вопрос, но их просто нет.
                                                                                                                • 0
                                                                                                                  Их потому и нет, что никто их не покупает так, как андроидобалалайки.
                                                                                                                  • 0
                                                                                                                    Дык нет, почему андроид-то? На них вон дебиан спокойно встает.
                                                                                                                    Покупают аналогичные, но хуже по всем характеристикам. Вот и интересно, почему никак не сделают на этой схематике (пусть даже по цене больше, чем китайские микрокомпы)
                                                                                                                    • 0
                                                                                                                      Потому что продаются они, как правило, с предустановленным андроидом.
                                                                                                                      При чем без подписания NDA, и договора поставки хотя бы на 100000 в год, вы даже пдфку на их проц адекватную не найдете. Производители делают девборды только из того, что доступно в штучных количествах. То есть 100 штук топовых квалькомов или топовых омапов вы никогда и ни при каких условиях у производителя не купите. Поэтому в девборде смысла нет.

                                                                                                                      А современные АРМы это как современные видюхи. Через год про них забывают, потому что появляются новые. Потреблядство достигло даже эмбеддинга. Благодаря ему, вы не найдете скоро документации по нынешним младшим кортексам, да и купить не сможете. В отличие от того же PIC16F84A, который хоть и по невменяемой цене, все еще доступен для покупки прямо у производителя, т.е. до сих пор производится.
                                                                                                                      • 0
                                                                                                                        Ну вот конкретно с Allwinner вроде как раз все полегче. Я потому и говорю — есть на нем опенсорсная CubieBoard же. Доки есть, официально. Линукс портирован официально, самими разработчиками процессора.

                                                                                                                        Но почему-то нормальных процессорных модулей нет! А КубиБоард — это ардуиноподобная плата, не то что нужно. Если бы сделали проц. модуль на нем в формфакторе того китайского миникомпьютера (а то и меньше, там же большую часть можно выкинут), цены бы ему не было.
                                                                              • 0
                                                                                Согласен, к счастью, на этой плате ее можно просто отпилить :) под ней ничего ценного нет, так что просто плата станет короче :)
                                                                          • 0
                                                                            Надеюсь, вы имеете в виду SWD, как альтернативу, а не прошивку через встроенный уартовский загрузчик.
                                                                            • 0
                                                                              Кстати, SWD действительно полноценная альтернатива JTAG — и по скорости и по функционалу отладки. И это тоже плюс STM32 на мой взгляд.
                                                                              Тот же TI со своим странным ICDI мне нравится куда меньше.
                                                                              • 0
                                                                                Ну я работаю в режиме SWD, пока не сталкивался ни с какими заморочками, да.

                                                                                Правда, насколько я знаю, JTAG-то позволяет работать с большим количеством устройств, подключенных к одному и тому же отладочному интерфейсу, так что, скорее всего, тут SWD не поможет.
                                                                                • 0
                                                                                  Не очень представляю где это может пригодиться :) Поэтому использую только SWD. Кстати, JTAG по-умолчанию включен вроде, как его отрубить, чтобы ножки не занимать?
                                                                                  • 0
                                                                                    Ремапом скорее всего можно.
                                                                                    • 0
                                                                                      Не, не ремапить его на другие ноги, а выключить нафиг вообще. Он мне никогда не понадобится, мне нужен только SWD. Вроде были где-то описания, надо посмотреть.
                                                                                • 0
                                                                                  STM тут не при чем, SWD это стандарт ARM, покажите хотя бы один Cortex M без него.
                                                                                  • 0
                                                                                    Жтаг все же чуть чуть побыстрей будет.

                                                                                    А пихают его везде не только ради отладки, а еще ради граничного сканирования. Собственно то ради чего он и был задуман.
                                                                                • 0
                                                                                  Не судите по себе — полчеловека на сотню радиолюбителей.

                                                                                  JTAG это deprecated. SWD его полноценная замена. Если вы не программируете под ARM7/9 можно с ним и не начинать разбираться.

                                                                                  Но если вы занимаетесь embedded linux, то с прошивкой бута через jtag для ARM9 рано или поздно Вам придется столкнуться.
                                                                                  • +1
                                                                                    SWD не поддерживает граничное сканирование и не может быть заменой JTAG для JTAG отладка это вообще побочная фича. Ее может и не быть.
                                                                                    • 0
                                                                                      Хотелось бы узнать, а как Вы на практике это используете?
                                                                                      • +1
                                                                                        Предположу, что проверка плат на производстве.
                                                                                        • 0
                                                                                          Спасибо, кэп. Хотелось бы детали.