Многие приобрели «голубую таблетку» на попробовать. Но из-за сложности программирования данная вещь оказалась где то на полке, до лучших времен.

Будем считать, что «лучшие времена» — наступили.

Что необходимо для экспериментов:


  • Аппаратные средства
  • Программное обеспечение

Аппаратные средства


Все используемые детали / компоненты можно приобрести на aliexpress.com

  • Конечно, в первую очередь сам контроллер.«Голубая Таблетка»
  • адаптер USB-UART
  • Кабель Micro-USB
  • набор проводов для соединения компонент между собой

Для более быстрой, по сравнению с UART загрузкой «прошивки» и отладки программ рекомендуется использовать программатор ST-Link V2

Программное обеспечение



Что такое модуль


Модуль это совокупность аппаратной и программной частей. Аппаратная часть — «таблетка» STM32F103C8T6, программная часть — «шаблон прошивки», созданный при помощи программы MIOC Данная программа — OpenSource.

Порты микроконтроллера


У микроконтроллера есть выводы или ножки. Часть из них это питание микроконтроллера, часть имеют специальное назначение (например Reset ), часть — интерфейс ввода/вывода общего назначения (англ. general-purpose input/output, GPIO).

Порты объединены в группы ( A; B; C... ). Каждая группа содержит до 16 портов, пронумерованных от 0 до 15. В итоге нумерация портов выглядит как PA0, PA1,…

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

На плате «таблетки» нанесена маркировка портов.

GPIO — Интерфейс ввода/вывода общего назначения


В модуле IO основные типы портов представлены в таблице:



В качестве датчиков, исполнительных механизмов будем использовать различные устройства от Arduino.

Программа MIOC ( Module Input-Output Configurator )


С помощью данной программы создаем / конфигурируем шаблон прошивки (проект для Embitz; Keil) модуля IO. Программа установки не требует. Скачали, запустили. С помощью данной программы создаём глобальные переменные, которые будем использовать в своих прошивках. Переменные могут быть ассоциированы с портами.

Окно первого запуска:



Создадим проект:



Выбрать папку для проекта. Папка, для проекта должна быть пуста!







Первая программа — «hello word» для микроконтроллера


Поморгаем светодиодом, что имеется на «голубой таблетке». Данный светодиод подключен к порту PC13.

Добавить строку в таблицу переменных





Генерируем BSP код (кнопка F8)



Далее, каждый раз после изменения проекта, обязательна генерация BSP!

Открыть созданный проект в среде разработки EmBitz или Keil. EmBitz пока как временное решение. Похоже автор забросил данный проект. По всей видимости в дальнейшем в проекте будет использоваться Code::Blocks.

В файле main.c напишем следующее:


(Для увеличения размера картинки откройте её в новой вкладке)

В EmBitz нажать F2, после появления окна информации нажать F7. Должна выполниться компиляция.

Повторное нажатие F2 скроет информационные закладки.



Загружаем в микроконтроллер, смотрим, как работает.

Кнопка


Добавим кнопку, например такую:



Схема подключения:



Добавим переменную в таблицу:



Генерируем BSP.

Изменим программу на следующую:



Создаём новую BSP (F8), компилируем, загружаем в микроконтроллер.

Нажимаем на кнопку — светодиод зажигается, отпускаем — тухнет.

Вместо светодиода на другой порт можно подключить реле, например:



И управлять какой либо полезной нагрузкой.

Вывод сообщений на консоль


Нужно определить, что будет консолью.

Возможны варианты:

  • адаптер USB-UART
  • виртуальный COM-порт (кабель Micro-USB)

Если в конфигурации выбраны одновременно UART1 и USB as Console, при этом USB VCP не выбран, то консоль будет назначена «в никуда». Т.е. ругаться на функцию print_str ( или макрос print ) не будет, но и вывода не будет никакого. Такое же поведение будет если не выбрать ни один интерфейс, или выбрать USB VCP но не выбрать ни UART1 ни USB as Console.

Конфигурация консоли:



Подключим TettaTerm к COM-порту (консоли). Если загрузку прошивки производим через UART1, то не забываем отключать/подключать COM-порт. В TerraTerm «горячие кнопки» Alt+I; Alt+N Для варианта загрузки через ST-Link этого делать не требуется.

Отредактируем программу:



Теперь на консоли будет отображаться состояние кнопки:



DS18B20


Подключим к «таблетке» температурный датчик DS18B20.



Поместим в таблицу переменную:



Изменим программу на следующую:



Создаём новую конфигурацию, компилируем, загружаем в микроконтроллер.

На консоли будет отображаться температура, измеряемая датчиком.



АЦП


В качестве примера работы с АЦП можно использовать потенциометр:



Или датчик влажности почвы



Остановимся на последнем:

Конфигурируем порт:



Редактируем программу:



Компилируем, загружаем.

В консоли наблюдаем:



adc — текущее показание АЦП. max и min — зафиксированные минимальное и максимальное показания датчика, совсем сухой (0%) и совсем мокрый (100%).

Совсем мокрый (100%) — опустим датчик в стакан с водой. Совсем сухой (0%) — лежит на открытом воздухе.

По сути мы сделали калибровку датчика влажности почвы от 0 до 100%. Максимальное и минимальное значения поместим в текст программы.



Результат работы. Датчик помещен в землю цветочного горшка:



Данный проект — шаблон решения для полива растений.

На этом пока всё. Программа MIOC будет пополняться дополнительными возможностями.

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


  1. devprodest
    08.09.2019 23:16
    +2

    Чем вам куб не угодил для конфигурирования ног, раз самому писать лень?


    1. HardWrMan
      09.09.2019 06:16

      Кубик требует некоторой подготовленности. А тут почти как Arduino.


      1. melodictsk
        09.09.2019 09:38

        А чем stm32duino не угодил? Делал много проектов в том числе и с RTOS, работает великолепно. И самое главное ещё проще.


    1. alex-open-plc Автор
      09.09.2019 07:06

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


  1. madcatdev
    09.09.2019 00:16

    Спасибо за подробный туториал. Как раз завалялась в коробке с модулями такая плата, теперь есть еще один повод познакомиться с STM32.


  1. atemik
    09.09.2019 05:45

    Делать код программы скриншотами — очень, очень оригинальное решение.


    1. barbos6
      09.09.2019 09:37

      Это — продвинутый подход для эффективной дрессуры тренировки,
      развивающий память, навыки работы с клавиатурой, умение правильно располагать в рабочем пространстве исходное изображение и окошко редактора.
      Такая подача материала, благодаря известной серии книг, вырастила многие миллионы чайников. :)


      1. Rim13
        10.09.2019 21:59

        А кипятить воду они умеют?


  1. REPISOT
    09.09.2019 06:10
    -1

    А в чем именно «эксперименты»? Я ожидал разгон или заморозку до -60 или там, попытку сжечь статикой. А тут quick start.


    1. gorbln
      09.09.2019 11:41

      Если Вам интересна заморозка до -60, сообщаю: STM32 нормально работает при такой температуре. Проверял штук 70 — работают при -62. А вот при -75 уже начинают подглючивать — циклично перезагружаться (хотя, я подозреваю, что это не процессор, а конденсаторы в блоке питания). Встроенный датчик температуры прилично врёт, можно использовать только как показометр в общих чертах, разница температуры достигает 6 градусов у разных процессоров, и обычно выше, чем температура окружающей среды.


      1. Virtu-Ghazi
        09.09.2019 12:47

        Жидкий азот?


        1. ODware
          09.09.2019 13:33

          имхо сухой лёд


          1. dubakov
            09.09.2019 13:43
            +1

            Оймякон


          1. gorbln
            09.09.2019 16:56

            -75° — да, сухой лёд.
            а — 60° — в климатической камере, она до -70 морозит.


    1. IRFC
      09.09.2019 14:55

      У BarsMonster была статья про разгон ардуино под жидким азотом. Я думаю, что с stm32 можно сделать то же самое.


  1. anton19286
    09.09.2019 06:19

    Самое простое программирование микроконтроллеров, которое мне доводилось видеть — проект Espruino с почти полноценным Javascript на борту. Интерпретатор даёт непривычный опыт, особенно в отладке.
    Заливал на Maple mini, плата вроде Bluepill, но вдвое дороже, чип там CB вместо C8.
    Для экономии сейчас можно смотреть на esp8266.


    1. alex-open-plc Автор
      09.09.2019 07:15

      Как бы не совсем дороже вдвое. На али поштучно:
      STM32F103C8T6 — 60,28 руб.
      STM32F103CBT6 — 73,82 руб.
      Оба чипа смотрел малазийские. Эти ребята пока ещё вроде не подделывают…


      1. Disasm
        09.09.2019 08:29

        Только с большой вероятностью на C8T6 будет столько же флэша, сколько и на CBT6. Зачем платить больше?


        1. barbos98
          09.09.2019 17:45

          Согласно даташиту
          Flash memory size
          8 = 64 Kbytes of Flash memory
          B = 128 Kbytes of Flash memory
          Но не факт — проскакивала информация, что наши товарищи из Китая перепиливали камни. Я с такими не сталкивался. Только Attiny залоченные под паралельное программирование. Продавец заморозился — типа сам дурак.


          1. Disasm
            09.09.2019 23:50

            Ну, в теории в даташите всё правильно написано. На практике — нет.


    1. Dima_Sharihin
      09.09.2019 11:26

      Maple Mini имел, как мне кажется, более вменяемое качество текстолита. А вот чипы от ST знамениты тем, что у них куда меньше реальных исполнений, чем заявлено. Так, у китайцев в ST-Link стоит STM32F100, у которого по даташиту и USB-то нет, и ядро не может работать на скорости, на которой запустится USB FS-блок. Но работает же...


      1. alex-open-plc Автор
        09.09.2019 11:34

        В китайском свистке стоит STM32F101
        У STM32F100 USB нет в принципе… И частота 24 МГц. Но зато есть ЦАП и таймеров поболее.


    1. quwy
      09.09.2019 21:22

      Когда уже за джаваскрипт в эмбеде будут наказывать по закону?


      1. shiotiny
        10.09.2019 05:29

        Простите, но javascript в эмбеде очень помогает, когда надо сделать, например веб интерфейс для эмбеда.


        Мой проект ShIoTiny shiotiny.ru осуществлен только благодаря связке javascript и С++.


        Или я вас както не так понял?


        1. quwy
          10.09.2019 17:38

          Простите, но javascript в эмбеде очень помогает, когда надо сделать, например веб интерфейс для эмбеда.

          Речь о такой заразе, как программирование кристалла непосредственно на js. Когда среднестатистический скрипткодер, не имеющий даже базового понятия о битовых операциях (а нафига ему в браузере такие низкие материи?), начинает тянуть свои браузерные привычки на систему, в которой считанные килобайты ROM и RAM, и где буквально все завязано на работу с четко определенными типами данных и детерменированное время выполнения.


      1. anton19286
        10.09.2019 08:22

        Эмбед разный. Инструмент по задаче.
        Не всем надо гнать десятки мегабайт данных в секунду. Если мне нужно раз в минуту взять число из датчика CO2, выложить его на OLED экран и отдать по вайфаю, скриптовый язык подойдет оптимально. С использованием готовых модулей такой проект редко превышает десяток строк кода. Правда, в 128 килобайт флэша это всё лезет с трудом, модули приходится минифицировать. Но и с плюсами порой удивляешься, как резко растёт бинарник после всего одного дополнительного библиотечного вызова.


        1. shiotiny
          10.09.2019 14:56

          Эмбед разный. Инструмент по задаче.


          Абсолютно согласен.

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


          Многие библиотеки, по моему опыту, пишутся очень неоптимально. Особенно на плюсах. Например, если не задумываясь использовать шаблоны — можно мгновенно наворотить столько кода, что обалдеешь.


        1. quwy
          10.09.2019 17:12
          +2

          раз в минуту взять число из датчика CO2, выложить его на OLED экран и отдать по вайфаю, скриптовый язык подойдет оптимально

          Что именно тут «оптимально»? Эта задача делается на C ровно тем же количеством кода, но не тянет за собой тонну скриптовых помоев на кристалл.

          Правда, в 128 килобайт флэша это всё лезет с трудом

          Ага, 128 килобайт ради опроса одного датчика. Оптимально до одури.

          Сейчас я вижу только одну «оптимальность» такого с позволения сказать «программирования». Это отсутствие необходимости изучать нормальный язык хипстерам-формошлепам, которые за пределы браузера носу ни разу не высовывали, и которым теперь приспичило мегадевайсину слепить (и непременно с OLED-экраном, иначе ж не тру).


          1. anton19286
            11.09.2019 05:13

            Хипстеры используют E-ink. OLED для нищебродов, он сейчас дешевле экрана от Нокии. Какой смысл в экономии флэша, если чипы с 4к и 128к стоят ровно те же 100 рублей? Да, код будет близким, если библиотеки похожие. Только и размер примерно совпадёт. Добавить WiFi и сервер с TLS и привет, мегабайт.
            Новые языки не так плохи, удобство разработки быстро перевешивает накладные расходы на рантайм, особенно в разовых проектах.


            1. YegorVin
              11.09.2019 14:53
              +1

              Смысл экономить ресурсы планеты Земля есть всегда.
              Тяжелый код как минимум будет потреблять больше энергии при выполнении.


            1. quwy
              11.09.2019 18:25

              Какой смысл в экономии флэша, если чипы с 4к и 128к стоят ровно те же 100 рублей?

              Смысл в том, что если проект с трудом влез в 128k, то наращивать его по сути уже некуда. Чипы с 256k и стоят дороже, и отличаются сильнее. А 512+k — вообще совсем другая категория. А что такое пол мегабайта для обнаглевшего от халявных пользовательских гигабайтов скрипткодера? Плюнуть и растереть.

              Добавить WiFi и сервер с TLS и привет, мегабайт

              Давайте еще добавим машинное обучение и блокчейн. А то не тянут ваши требования под контроллер с парой-тройкой десятков ножек (см. сабж).

              Для всяких WiFi, GSM и иже с ними, используются совсем иные SoC-и, в которых необходимый стек уже прошит в отдельное адресное пространство, а в «юзерспейс» торчит только API, который и будет дергать прошивка. И в этом API часто уже есть и TLS, и HTTP, и даже POP3/SMTP всякие.

              Новые языки не так плохи, удобство разработки быстро перевешивает накладные расходы на рантайм

              Я бы очень многое мог сказать про «удобство» джаваскрипта как языка. И про «стройность» дизайна. И про «логичность» работы. И про то, что в последнее время он в каждой дырке затычка. Но статья не об этом совсем. Тем более никто не предлагает писать на ассемблере. Но использовать насквозь динамический интерпертируемый язык на голом железе с килобайтами памяти — это клиника.


  1. sfrolov
    09.09.2019 08:25

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


    1. Arcuen
      09.09.2019 08:38

      Всяко проще, чем какой-нибудь Renesas или пока что самое адское зло, которое встречал — BLE-чип от TexasInstruments CC2650 и софт для него.

      А STM32 можно и через регистры конфигурировать, и через API, и вообще.


      1. sfrolov
        09.09.2019 08:45

        Для начинающего проще будет сначала освоить STM32 CubeMX с HAL, а потом после продвижения уже переходить на API, регистры и т. д.
        И эти уроки обязательно
        narodstream.ru/programmirovanie-mk-stm32


        1. 8street
          09.09.2019 09:48

          HAL требует продвинутого знания языка C. Плюсы HAL: с ним очень легко работать, многое в нём уже реализовано. Минусы: если не знать язык, то разобраться, что делает та или иная HAL функция очень сложно. Новичкам прыгать с ардуино на STM с HAL очень сложно. Могу посоветовать раскопать мануалы по старой STLIB (standard peripheral library), она полегче в освоении. Но следует помнить — это путь в никуда, она уже не обновляется.


        1. IgorPie
          09.09.2019 10:05

          Тут зависит от сорта начинающего. После AVR и dsPIC, вполне можно на кокосе все сделать (если лень эклипс настраивать с gcc), под SPL или CMSIS.
          И проекты из куба в него таскать, там дел на 5 минут.

          Куб, как уже многие отметели, не мёдом мазан. Например, SPI у нас 16 бит, а куб DMA на SPI не моргнув глазом подымет на 32 бит.
          А i2c — вообще кошмар. Ставишь галку «у меня слэйв», а в библиотеках вместо define'ов под конкретную настройку — тащится общий вагон софта.
          Прерывание неспешно определяет какой режим, что произошло и т.п. И пока дойдет до дела, что у нас все же слейв, прилетает ошибка, потому что мастер не ждет.

          Это очевидные косяки куба, а чем дальше в лес, тем толще партизаны.


          1. SergeyMax
            09.09.2019 15:10

            Прерывание неспешно определяет какой режим, что произошло и т.п. И пока дойдет до дела, что у нас все же слейв, прилетает ошибка, потому что мастер не ждет.
            Где-то в документации есть табличка, в которой указаны предельные скорости для всех режимов работы I2C через HAL.


            1. IgorPie
              09.09.2019 16:52

              Дело не в табличке. Если у меня слейв, то разумно все что связано с мастером отсечь директивами компилятора, а не тратиться на if().
              Так-то конечно можно дернуть все нужное с SPL и получить желанные 400 кбит.


              1. SergeyMax
                09.09.2019 17:43

                Если у меня слейв, то разумно все что связано с мастером отсечь директивами компилятора, а не тратиться на if().
                Нет, не разумно, так как режим шины может меняться в рантайме.


                1. IgorPie
                  09.09.2019 19:26

                  Тогда я хочу в кубе иметь галку «оставить возможность меняться в рантайме», только и всего. Галки нет, зато есть галка «слейв», остальное должно умереть.


                  1. SergeyMax
                    09.09.2019 19:29

                    Вообще не вижу проблемы, выбираете в вашем кубе LL вместо HAL, и всё остальное умирает.


                    1. IgorPie
                      09.09.2019 20:58

                      В сухом остатке: все, или ничего. А хотелось бы именно слэйв, например.


                      1. SergeyMax
                        10.09.2019 09:35

                        Осенняя депрессия у меня ещё не началась, поэтому предложу другую формулировку: для любых мыслимых задач существуют все необходимые инструменты.


  1. vvzvlad
    09.09.2019 11:40

    Зачем так странно? Почему не взять какой-нибудь MBED?


  1. Koyanisqatsi
    09.09.2019 12:08

    Довольно странный выбор ПО и железки для старта. Есть огромная линейка отладочных плат Nucleo, к которым подходят платы расширения от ардуино. Есть TrueStudio — IDE на основе эклипса, поддерживаемое самим ST. HAL и STM32CubeMX делают старт просто элементарным (да и последующую работу тоже, но попробывать конфигурировать регистры тоже стоит хотя бы ради опыта).


    1. IgorPie
      09.09.2019 13:26

      у этих плат есть несколько весомых плюсов:
      1) цена
      2) доступность (на авито без проблем, если с али лень ждать)
      3) возможность установки в breadboard

      и если надо что-то быстро накидать, таблетка годна очень даже.
      SPI на 18МГц у меня вполне работал на ржавых китайских проводах на не менее китайском breadboard.
      А платы с 2 рядами пинов с каждой стороны — можно заблудиться, поэтому лень выходить за периметр платы. Поэтому, для cm4 у меня сделана своя таблетка. Опять-таки, в breadboard — без проблем.


  1. Tiamon
    09.09.2019 15:02

    Не взлетит STM32 пока не будет полноценная интеграция с Arduino и библиотеками под неё. Я бы на месте производителя серьезно так вложился в это дело, если это конечно технически осуществимо, тут я увы не знаю. Но получить такое же распространение как Atmel, без этого не сможет.
    Низкая цена и полная интеграция с Arduino, секрет успеха для них )
    А пока она так и будет валятся на полке, проще взять Atmel который более или менее понятен, взять готовые библиотеки под него и лепить свои поделки. Чем входить в незнакомую среду. )


    1. dm128
      09.09.2019 17:47

      Увы, STM32 уже давно взлетел. Политика компании на весьма агрессивный выход на рынок одноядерных АРМ процов. А про полный спектр продукции СТМ можно вообще не говорить — у них есть все и идут в новые направления. BLE чипы, к примеру. А кроме MCU вышли более тяжелые MPU, и есть линейка продуктов под AI. Ардуино это детский образовательный проект, который проигрывает начиная со среды разработки. И в лучшем случае что от них можно позаимствовать — шилды. Которые автор и привязывает через свои библиотеки.


      1. Tiamon
        09.09.2019 17:55

        Вы немного не поняли о чем я )
        Я не говорю про профессиональный рынок, я говорю про рынок аля Arduino, то есть рынок не профессионалов, рынок поделок своими руками. Было бы конечно интересно на цифрах сравнить сколько Atmel продает микропроццов которые используются в Arduino на проф рынок и на рынок Arduino. Но чисто умозрительно не мало, Arduino создало огромный рынок, и при условиях указанных мной выше STM8 & STM32 вполне могли бы занять в нем хорошую нишу. Я об этом, а так да в проф. нише STM крут ).


        1. Polukar
          09.09.2019 18:43
          +2

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


          1. Tiamon
            09.09.2019 19:13

            Сомневаюсь ) Но это разговор без фактов, нет цифр, может есть в открытой отчетности www.microchip.com/documentlisting/investors-home
            Если смотреть просто по atmel то рост у них хороший, только не понятно что из этого atmega, нужно копаться в релизах, но лень )


            1. IgorPie
              09.09.2019 19:28

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


  1. stavinsky
    09.09.2019 15:17

    Мое знакомство с МК началось с avr и arduino. Но достаточно быстро я понял что это достаточно неудобно. Arduino как ide больше очень неудобно если цель больше чем мигать лампочками. Достаточно быстро я перешел на eclipse и компиляцию makeфайлами.
    Далее когда я увидел bluepill (купил в магазине ради интереса). Мой восторг от stm32 по сравнению arduino было не передать. HAL конечно имеет недостатки но всеже он задокументирован, cube позволяет настроить необходимое в большинстве случаев без проблем. Сейчас перешел в любимый vim и makefile'ы от CubeMX.
    По поводу статьи — поддержу других комментаторов, набор софта для начала разработки немного странный. Начинающему лучше всеже HAL + eclipse от ST. Bluepill как и MappleMini — прекрасны и дешевы(что немаловажно в условиях когда новичек может что-нибудь подпалить).
    Китайский STLink всеже советую иметь так как отладка становится в разы легче(это кстати было еще одной причиной восторга)


    1. Dima_Sharihin
      09.09.2019 15:50
      +1

      HAL — это худший способ обернуть в софт периферию, который я встречал. Это такой страшный overbloated индусский код, в котором без поллитра и разобраться-то тяжело. Из-за чего многие адепты AVR говорят, что MCU на ARM Cortex M* сложны для понимания. Но дело в том, что сама периферия зачастую проще того огорода, что нагородил вокруг ST.


      1. stavinsky
        09.09.2019 16:03

        Не буду спорить из вышеописанного я мало что видел. Написал лишь что оно работает и в целом мне было сложно разобраться. Сейчас вообще думаю на stm32-rs попробовать перейти хоть и сыро, но rust )


      1. HardWrMan
        09.09.2019 16:07

        Вот почему StdPeriph пользуется спросом в отличии от HAL от кубика. С другой стороны, лично я использую кубик при распределении ресурсов (назначение лапок, интерфейсов, растактовка). А потом генеришь проект и смотришь получившиеся цифры. И вставляешь их в свой код. Использовать темплейт кубика — это только на уровне начинающего, который копипасту привык использовать. Уж лучше тогда MikroBasic или MikroPascal от MikroE взять и забыть про периферию совсем.


        1. IgorPie
          09.09.2019 16:53

          Еще USB в нем реализован человекоподобно.


          1. HardWrMan
            09.09.2019 17:47

            USB там идет как миддлваря. Отдельно корка и отдельно хост/выбранный девайс. К HAL оно не имеет отношения.


            1. IgorPie
              09.09.2019 19:29

              все равно человекоподобно, а не как fatfs (тоже мидлваря), где плохо понятно чего замутили.


            1. holomen
              09.09.2019 20:14

              Вот только от хала это якобы мидлеваре не оторвать. Так что та реализация USB — она да, в HALе.


              1. HardWrMan
                10.09.2019 06:12

                Оно из HAL/StdPeriph использует только настройку оборудования, не связанного с USB: лапки и NVIC (иногда DMA). А с самим USB оно работает напрямую с регистрами. Я один раз переписывал USB HID в отдельный юнит и оно работает автономно без проблем. Так что оторвать можно (и даже иногда — нужно).


  1. igrushkin
    09.09.2019 15:43

    Не хочу разжигать холивары, но упорно не понимаю, зачем «жевать кактус» в виде stm32?
    Для разгона есть Ардуино, потом можно уйти или на nrf52 и прочие кортексы, или на esp32, хоть это и китайчатинаю
    Но stm… зачем???


    1. Dima_Sharihin
      09.09.2019 15:52

      Ну хотя бы потому, что в большом количестве голов почему-то ужилось, что ARM Cortex M* это и есть STM32. Вообще я мало имею что против самих микроконтроллеров от ST, вопрос, что у других производителей есть контроллеры поинтереснее.


      А, ну и таймеры у ST — это страх и ужас, да.


      1. HardWrMan
        11.09.2019 06:44
        +2

        А в чём заключается «страх и ужас»™ таймеров в STM?


        1. Dima_Sharihin
          11.09.2019 08:13
          +1

          1. Они разные в рамках одного кристалла
          2. HAL не покрывает и трети сценариев их использования

          Для сравнения рекомендую ознакомиться с таймерами серии eHRPWMePWM от Texas Instruments на микроконтроллерах C2000: все действия разложены по функциональным блокам, на каждый блок таймера отдельная исчерпывающая документация, и, о чудо, за исключением High Resolution, все таймеры полностью идентичны на кристалле.


          1. HardWrMan
            11.09.2019 08:33
            +1

            А кто сказал, что если в кристалле заявлено 10 таймеров, то они должны быть абсолютно идентичными? Ведь, например, логично, если есть 2 таймера с хорошим блоком захвата и генерации формы для использования в ШИМ (в том числе и с блокировкой конфигурации для предотвращения деструктивной конфигурации, которая может сжечь силовую схему) и 8 таймеров попроще для, собственно, измерения некоторых интервалов времени, для которых, внезапно, изначально таймеры и делались? Это же экономит кристалл для других функций и периферии.

            Что касается HAL, то моё отношение к нему можете прочитать в моём комменте выше.


            1. Dima_Sharihin
              11.09.2019 08:39

              если в кристалле заявлено 10 таймеров, то они должны быть абсолютно идентичными

              Но называются они все TIMx. Вообще это довольно напрягает ST-шная политика запоминания функционала периферии по ее номеру. У C2000 для захвата таймер называется eCAP, к примеру, а базовый таймер вообще часть CPU.


              1. alex-open-plc Автор
                11.09.2019 09:11

                Так вот тут и помогает кубик, причём сильно помогает. Потом, для уточнения функционала читаем даташит.


              1. HardWrMan
                11.09.2019 09:21

                Ну, т.е., это уже из разряда привычек и холивора. Тем не менее, что касается TIMx, то где тут ошибка, если это действительно всё таймеры и позволяют измерять интервалы времени? Да, у некоторых есть блок расширения функций, а некоторые ещё более урезанные (последние обычно с двухзначным номером), но это всё таймеры. С другой стороны, системный таймер там как раз SysTick (и он тоже расположен в CPU), что аналогично приведённому примеру от TI.


            1. alex-open-plc Автор
              11.09.2019 09:14

              Отношение к HAL у меня схожее. Поначалу идея понравилась, но реализация… Пробовал LL. В большинстве случаев он тащит за собой библиотеки HAL. Да, из HAL можно «выпилить» необходимый функционал. Но лучше от этого не станет.


          1. im_stD
            11.09.2019 09:18

            1. И что в этом плохого. Они же не принципиально разные, а разделены на три группы с уменьшающемся функционалом.
            2. HAL покрывает все возможности таймера, и упрощает работу с ними.


    1. IgorPie
      09.09.2019 16:55

      цена, доступность, богатство периферии и накопленная библиотека граблей.


      1. igrushkin
        09.09.2019 16:58

        вы про ардуино. да?
        Мне кажется «богатство периферии» (кстати, в чем оно заключается на stm?) нивелируется полным отсутствием библиотек


        1. IgorPie
          09.09.2019 17:14

          Справедливости ради, куча интерфейсов и событий, триггеров и т.д. и библиотеки основные — есть. Где нет библиотек — есть примеры и сниппеты. Нет библиотек для свистков типа maple leaf maple mini.
          Конечно, майкрочип с его атмеловскими кортексами на пятки наступает, но стм все еще дешевле и доступней, и по кое-каким ТТХ все же впереди.


  1. arkamax
    09.09.2019 18:26

    А ковырял ли кто-нибудь современные модели Cortex-M0+ от NXP (серия KL и иже с ними)? Лет несколько назад, когда их только запустили, они были весьма интересны в перспективе, IDE была тяжеловата (хоть и работоспособна), но платформа мне показалась интересной, равно как и спеки / цены на сами МК.


  1. im_stD
    09.09.2019 22:57
    -1

    Если есть BluePill и Вы не знаете что делать, то загляните сюда, и ещё различные примеры.

    Представленным в статье «туториалом» точно не стоит пользоваться.


  1. kylroma
    10.09.2019 15:33

    Спасибо большое! Давно хотел попробовать что-то поделать с микроконтроллером. Но нет опыта и нет уверенности, что что-то смогу сделать полезное.
    Благодаря статье понял, что мне нужно купить, чтоб не дорого, но и функциональное. Уже заказал на али микроконтроллер + программатор = 4$. Думаю, что бы ещё интересного прикупить к контроллеру.


  1. alex-open-plc Автор
    10.09.2019 15:42

    Я планирую скоро включить в прошивку
    BME280 — температура, давление, влажность
    BH1750 — освещенность
    BH1750 — CO2
    EC11 — энкодер

    Уже готово, но тестирую дисплейчики (I2C)
    1602 — англ/рус
    SSD1306