Простые эксперименты с микроконтроллером STM32F103 («Голубая таблетка»)



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

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

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


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

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


Все используемые детали / компоненты можно приобрести на 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 будет пополняться дополнительными возможностями.

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 97

    +8

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

      –1
      Кубик требует некоторой подготовленности. А тут почти как Arduino.
        0
        А чем stm32duino не угодил? Делал много проектов в том числе и с RTOS, работает великолепно. И самое главное ещё проще.
        0
        Данный проект предпологается использовать не вместо куба, а вместе с кубом.
        +2

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

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

              +1
              А кипятить воду они умеют?
            +5
            А в чем именно «эксперименты»? Я ожидал разгон или заморозку до -60 или там, попытку сжечь статикой. А тут quick start.
              0
              Если Вам интересна заморозка до -60, сообщаю: STM32 нормально работает при такой температуре. Проверял штук 70 — работают при -62. А вот при -75 уже начинают подглючивать — циклично перезагружаться (хотя, я подозреваю, что это не процессор, а конденсаторы в блоке питания). Встроенный датчик температуры прилично врёт, можно использовать только как показометр в общих чертах, разница температуры достигает 6 градусов у разных процессоров, и обычно выше, чем температура окружающей среды.
                0
                Жидкий азот?
                  0
                  имхо сухой лёд
                    +4
                    Оймякон
                      0
                      -75° — да, сухой лёд.
                      а — 60° — в климатической камере, она до -70 морозит.
                  0

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

                  –1
                  Самое простое программирование микроконтроллеров, которое мне доводилось видеть — проект Espruino с почти полноценным Javascript на борту. Интерпретатор даёт непривычный опыт, особенно в отладке.
                  Заливал на Maple mini, плата вроде Bluepill, но вдвое дороже, чип там CB вместо C8.
                  Для экономии сейчас можно смотреть на esp8266.
                    0
                    Как бы не совсем дороже вдвое. На али поштучно:
                    STM32F103C8T6 — 60,28 руб.
                    STM32F103CBT6 — 73,82 руб.
                    Оба чипа смотрел малазийские. Эти ребята пока ещё вроде не подделывают…
                      –1

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

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

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

                      0

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

                        0
                        В китайском свистке стоит STM32F101
                        У STM32F100 USB нет в принципе… И частота 24 МГц. Но зато есть ЦАП и таймеров поболее.
                        +1
                        Когда уже за джаваскрипт в эмбеде будут наказывать по закону?
                          0

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


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


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

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

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


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

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


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

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

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

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

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

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

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

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

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

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

                                      Я бы очень многое мог сказать про «удобство» джаваскрипта как языка. И про «стройность» дизайна. И про «логичность» работы. И про то, что в последнее время он в каждой дырке затычка. Но статья не об этом совсем. Тем более никто не предлагает писать на ассемблере. Но использовать насквозь динамический интерпертируемый язык на голом железе с килобайтами памяти — это клиника.
                              +2
                              Непростой микроконтроллер, но если захотите начать его изучать, то эта плата — наверно лучшее для начала работы.
                                0
                                Всяко проще, чем какой-нибудь Renesas или пока что самое адское зло, которое встречал — BLE-чип от TexasInstruments CC2650 и софт для него.

                                А STM32 можно и через регистры конфигурировать, и через API, и вообще.
                                  0
                                  Для начинающего проще будет сначала освоить STM32 CubeMX с HAL, а потом после продвижения уже переходить на API, регистры и т. д.
                                  И эти уроки обязательно
                                  narodstream.ru/programmirovanie-mk-stm32
                                    0
                                    HAL требует продвинутого знания языка C. Плюсы HAL: с ним очень легко работать, многое в нём уже реализовано. Минусы: если не знать язык, то разобраться, что делает та или иная HAL функция очень сложно. Новичкам прыгать с ардуино на STM с HAL очень сложно. Могу посоветовать раскопать мануалы по старой STLIB (standard peripheral library), она полегче в освоении. Но следует помнить — это путь в никуда, она уже не обновляется.
                                      +4
                                      Тут зависит от сорта начинающего. После AVR и dsPIC, вполне можно на кокосе все сделать (если лень эклипс настраивать с gcc), под SPL или CMSIS.
                                      И проекты из куба в него таскать, там дел на 5 минут.

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

                                      Это очевидные косяки куба, а чем дальше в лес, тем толще партизаны.
                                        0
                                        Прерывание неспешно определяет какой режим, что произошло и т.п. И пока дойдет до дела, что у нас все же слейв, прилетает ошибка, потому что мастер не ждет.
                                        Где-то в документации есть табличка, в которой указаны предельные скорости для всех режимов работы I2C через HAL.
                                          0
                                          Дело не в табличке. Если у меня слейв, то разумно все что связано с мастером отсечь директивами компилятора, а не тратиться на if().
                                          Так-то конечно можно дернуть все нужное с SPL и получить желанные 400 кбит.
                                            0
                                            Если у меня слейв, то разумно все что связано с мастером отсечь директивами компилятора, а не тратиться на if().
                                            Нет, не разумно, так как режим шины может меняться в рантайме.
                                              +1
                                              Тогда я хочу в кубе иметь галку «оставить возможность меняться в рантайме», только и всего. Галки нет, зато есть галка «слейв», остальное должно умереть.
                                                0
                                                Вообще не вижу проблемы, выбираете в вашем кубе LL вместо HAL, и всё остальное умирает.
                                                  +1
                                                  В сухом остатке: все, или ничего. А хотелось бы именно слэйв, например.
                                                    –1
                                                    Осенняя депрессия у меня ещё не началась, поэтому предложу другую формулировку: для любых мыслимых задач существуют все необходимые инструменты.
                                  +1
                                  Зачем так странно? Почему не взять какой-нибудь MBED?
                                    0
                                    Довольно странный выбор ПО и железки для старта. Есть огромная линейка отладочных плат Nucleo, к которым подходят платы расширения от ардуино. Есть TrueStudio — IDE на основе эклипса, поддерживаемое самим ST. HAL и STM32CubeMX делают старт просто элементарным (да и последующую работу тоже, но попробывать конфигурировать регистры тоже стоит хотя бы ради опыта).
                                      0
                                      у этих плат есть несколько весомых плюсов:
                                      1) цена
                                      2) доступность (на авито без проблем, если с али лень ждать)
                                      3) возможность установки в breadboard

                                      и если надо что-то быстро накидать, таблетка годна очень даже.
                                      SPI на 18МГц у меня вполне работал на ржавых китайских проводах на не менее китайском breadboard.
                                      А платы с 2 рядами пинов с каждой стороны — можно заблудиться, поэтому лень выходить за периметр платы. Поэтому, для cm4 у меня сделана своя таблетка. Опять-таки, в breadboard — без проблем.
                                      –1
                                      Не взлетит STM32 пока не будет полноценная интеграция с Arduino и библиотеками под неё. Я бы на месте производителя серьезно так вложился в это дело, если это конечно технически осуществимо, тут я увы не знаю. Но получить такое же распространение как Atmel, без этого не сможет.
                                      Низкая цена и полная интеграция с Arduino, секрет успеха для них )
                                      А пока она так и будет валятся на полке, проще взять Atmel который более или менее понятен, взять готовые библиотеки под него и лепить свои поделки. Чем входить в незнакомую среду. )
                                        +2
                                        Увы, STM32 уже давно взлетел. Политика компании на весьма агрессивный выход на рынок одноядерных АРМ процов. А про полный спектр продукции СТМ можно вообще не говорить — у них есть все и идут в новые направления. BLE чипы, к примеру. А кроме MCU вышли более тяжелые MPU, и есть линейка продуктов под AI. Ардуино это детский образовательный проект, который проигрывает начиная со среды разработки. И в лучшем случае что от них можно позаимствовать — шилды. Которые автор и привязывает через свои библиотеки.
                                          0
                                          Вы немного не поняли о чем я )
                                          Я не говорю про профессиональный рынок, я говорю про рынок аля Arduino, то есть рынок не профессионалов, рынок поделок своими руками. Было бы конечно интересно на цифрах сравнить сколько Atmel продает микропроццов которые используются в Arduino на проф рынок и на рынок Arduino. Но чисто умозрительно не мало, Arduino создало огромный рынок, и при условиях указанных мной выше STM8 & STM32 вполне могли бы занять в нем хорошую нишу. Я об этом, а так да в проф. нише STM крут ).
                                            +2
                                            Копейки там, а не рынок. Для любого производителя несущественны хобийщики, делается что бы подсадить на свою продукцию это.
                                              –1
                                              Сомневаюсь ) Но это разговор без фактов, нет цифр, может есть в открытой отчетности www.microchip.com/documentlisting/investors-home
                                              Если смотреть просто по atmel то рост у них хороший, только не понятно что из этого atmega, нужно копаться в релизах, но лень )
                                                0
                                                во всем серийном новье идут атмел кортексы с USB.
                                                8битки для производителя — умерли, как и сам атмел, хвала сатане, что его выкупил некогда главный конкурент, которого тонко ненавидят в нашей стране
                                        +1
                                        Мое знакомство с МК началось с avr и arduino. Но достаточно быстро я понял что это достаточно неудобно. Arduino как ide больше очень неудобно если цель больше чем мигать лампочками. Достаточно быстро я перешел на eclipse и компиляцию makeфайлами.
                                        Далее когда я увидел bluepill (купил в магазине ради интереса). Мой восторг от stm32 по сравнению arduino было не передать. HAL конечно имеет недостатки но всеже он задокументирован, cube позволяет настроить необходимое в большинстве случаев без проблем. Сейчас перешел в любимый vim и makefile'ы от CubeMX.
                                        По поводу статьи — поддержу других комментаторов, набор софта для начала разработки немного странный. Начинающему лучше всеже HAL + eclipse от ST. Bluepill как и MappleMini — прекрасны и дешевы(что немаловажно в условиях когда новичек может что-нибудь подпалить).
                                        Китайский STLink всеже советую иметь так как отладка становится в разы легче(это кстати было еще одной причиной восторга)
                                          +2

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

                                            0
                                            Не буду спорить из вышеописанного я мало что видел. Написал лишь что оно работает и в целом мне было сложно разобраться. Сейчас вообще думаю на stm32-rs попробовать перейти хоть и сыро, но rust )
                                              0
                                              Вот почему StdPeriph пользуется спросом в отличии от HAL от кубика. С другой стороны, лично я использую кубик при распределении ресурсов (назначение лапок, интерфейсов, растактовка). А потом генеришь проект и смотришь получившиеся цифры. И вставляешь их в свой код. Использовать темплейт кубика — это только на уровне начинающего, который копипасту привык использовать. Уж лучше тогда MikroBasic или MikroPascal от MikroE взять и забыть про периферию совсем.
                                                0
                                                Еще USB в нем реализован человекоподобно.
                                                  0
                                                  USB там идет как миддлваря. Отдельно корка и отдельно хост/выбранный девайс. К HAL оно не имеет отношения.
                                                    0
                                                    все равно человекоподобно, а не как fatfs (тоже мидлваря), где плохо понятно чего замутили.
                                                      0
                                                      Вот только от хала это якобы мидлеваре не оторвать. Так что та реализация USB — она да, в HALе.
                                                        +2
                                                        Оно из HAL/StdPeriph использует только настройку оборудования, не связанного с USB: лапки и NVIC (иногда DMA). А с самим USB оно работает напрямую с регистрами. Я один раз переписывал USB HID в отдельный юнит и оно работает автономно без проблем. Так что оторвать можно (и даже иногда — нужно).
                                                0
                                                Я бы хотел не использовать IDE а программировать и прошивать STM с помощью Makefile. Куда посмотреть и что для этого необходимо купить?
                                                  0
                                                  Что купить для начала перечисленно в статье. На основе проекта для EmBitz сделать Makefile. LD файл — есть.
                                                  Ну и в принципе, если добавить в bin папку компилятора make.exe, то можно собирать прошивку из командной строки win.
                                                    0
                                                    blue pill я уже купил, usb-uart найду, но я под линуксом и не очень представляю как сделать Makefile на основе EmBitz, т.к. не знаю где его искать и что править. В случае AVR я использовал avr-gcc, в качестве компилятора. Может быть подобный компилятор есть и для ARM? Полагаю мне также потребуется какой-то набор библиотек?
                                                      0
                                                      Ну вот я, например, использую Eclipse как IDE и arm-none-eabi как компилятор. Оно? А для отладки, как уже тут сказали, OpenOCD, он прямо в Eclipse и отлаживает без проблем.
                                                        0
                                                        Оно. А заливать чем? avrdude не сработает?
                                                          0
                                                          openocd, а на голубую таблетку вроде и через uart можно
                                                          есть еще platformio, там можно выбрать плату и оно автомагически закачает подходящие инструменты
                                                            0
                                                            Спасибо. Интересует как раз напрямую в чип, распаянный в собственной версии голубой таблетки или чего-то подобного
                                                              0
                                                              Да, OpenOCD как заливает так и отлаживает. Единственное — если ты им отлаживаешь, а потом останавливаешь сессию OpenOCD бросает ядро контроллера на стопе. Т.е., если ты отладил, убедился что работает, то после прерывания сессии отладки надо либо передёрнуть питание устройства, либо сбросить контроллер. Правда, в режиме отладки он заливает только ту часть FLASH, которая занята программой, это тоже иногда надо учитывать. Но там вроде есть команда на стирание чипа, можно просто сначала пройтись ей.
                                                                +1
                                                                Вам ST-Link V2 нужен. Ну и драйвер для него. А поверх уже что угодно, что понимает gcc и gdb.
                                                      0
                                                      Думаю проще всего начать с cubemx. Он создает проект под конкретный чип и в настройках можно выбрать makefile. Работает на java, можно запускать под linux.
                                                        0
                                                        Спасибо. Эти Makefile из него можно как-то извлечь?
                                                    0
                                                    Не хочу разжигать холивары, но упорно не понимаю, зачем «жевать кактус» в виде stm32?
                                                    Для разгона есть Ардуино, потом можно уйти или на nrf52 и прочие кортексы, или на esp32, хоть это и китайчатинаю
                                                    Но stm… зачем???
                                                      +1

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


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

                                                        +2
                                                        А в чём заключается «страх и ужас»™ таймеров в STM?
                                                          +1
                                                          1. Они разные в рамках одного кристалла
                                                          2. HAL не покрывает и трети сценариев их использования

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

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

                                                            Что касается HAL, то моё отношение к нему можете прочитать в моём комменте выше.
                                                              0
                                                              если в кристалле заявлено 10 таймеров, то они должны быть абсолютно идентичными

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

                                                                0
                                                                Так вот тут и помогает кубик, причём сильно помогает. Потом, для уточнения функционала читаем даташит.
                                                                  +1
                                                                  Ну, т.е., это уже из разряда привычек и холивора. Тем не менее, что касается TIMx, то где тут ошибка, если это действительно всё таймеры и позволяют измерять интервалы времени? Да, у некоторых есть блок расширения функций, а некоторые ещё более урезанные (последние обычно с двухзначным номером), но это всё таймеры. С другой стороны, системный таймер там как раз SysTick (и он тоже расположен в CPU), что аналогично приведённому примеру от TI.
                                                                    0
                                                                    Ну так и в AVR, например, тоже таймеры в кристалле разные, и тоже в названиях отличаются только номером.
                                                                    0
                                                                    Отношение к HAL у меня схожее. Поначалу идея понравилась, но реализация… Пробовал LL. В большинстве случаев он тащит за собой библиотеки HAL. Да, из HAL можно «выпилить» необходимый функционал. Но лучше от этого не станет.
                                                                    0
                                                                    1. И что в этом плохого. Они же не принципиально разные, а разделены на три группы с уменьшающемся функционалом.
                                                                    2. HAL покрывает все возможности таймера, и упрощает работу с ними.
                                                                0
                                                                цена, доступность, богатство периферии и накопленная библиотека граблей.
                                                                  0
                                                                  вы про ардуино, да? :-)
                                                                  Мне кажется «богатство периферии» (кстати, в чем оно заключается на stm?) нивелируется полным отсутствием библиотек
                                                                    0
                                                                    Справедливости ради, куча интерфейсов и событий, триггеров и т.д. и библиотеки основные — есть. Где нет библиотек — есть примеры и сниппеты. Нет библиотек для свистков типа maple leaf maple mini.
                                                                    Конечно, майкрочип с его атмеловскими кортексами на пятки наступает, но стм все еще дешевле и доступней, и по кое-каким ТТХ все же впереди.
                                                                0
                                                                А ковырял ли кто-нибудь современные модели Cortex-M0+ от NXP (серия KL и иже с ними)? Лет несколько назад, когда их только запустили, они были весьма интересны в перспективе, IDE была тяжеловата (хоть и работоспособна), но платформа мне показалась интересной, равно как и спеки / цены на сами МК.
                                                                  –2
                                                                  Если есть BluePill и Вы не знаете что делать, то загляните сюда, и ещё различные примеры.

                                                                  Представленным в статье «туториалом» точно не стоит пользоваться.
                                                                    0
                                                                    Спасибо большое! Давно хотел попробовать что-то поделать с микроконтроллером. Но нет опыта и нет уверенности, что что-то смогу сделать полезное.
                                                                    Благодаря статье понял, что мне нужно купить, чтоб не дорого, но и функциональное. Уже заказал на али микроконтроллер + программатор = 4$. Думаю, что бы ещё интересного прикупить к контроллеру.
                                                                      0
                                                                      Я планирую скоро включить в прошивку
                                                                      BME280 — температура, давление, влажность
                                                                      BH1750 — освещенность
                                                                      BH1750 — CO2
                                                                      EC11 — энкодер

                                                                      Уже готово, но тестирую дисплейчики (I2C)
                                                                      1602 — англ/рус
                                                                      SSD1306
                                                                        0
                                                                        Здравствуйте.
                                                                        Можете подсказать, как вы определяете к какому порту подключать датчик. По таблице выше не понятно, какие именно возможности есть в разных типов портов.
                                                                        Я для эксперементов купил датчик движения (Hc-sr501). Но как-то страшновато его подключать к плате. Вдруг ошибусь с портом и что-то испорчу.
                                                                          0
                                                                          VCC — 5V
                                                                          OUT — уровень сигнала 3.3V
                                                                          Подключить можно к любой понравившейся ноге, напр. PA0
                                                                          из списка: GPIO_Mode_IN_FLOATING
                                                                        +1
                                                                        Спасибо!
                                                                        У вас ещё будет продолжение вашей статьи про «голубую таблетку»?
                                                                          0
                                                                          Да. Завершаю разработку программых блоков работы с наиболее популярными датчиками, перечислены выше. Правда там допущена опечатка. Датчик СО2 — CCS811.

                                                                        Only users with full accounts can post comments. Log in, please.