Как стать автором
Обновить

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

Время на прочтение 4 мин
Количество просмотров 75K
Всего голосов 56: ↑46 и ↓10 +36
Комментарии 97

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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


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

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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

Публикации