Ничего не найдено :(
    В гостях у Самоделкина! » Темы » Советы » Начало работы с микроконтроллерами STM32 и среда STM32CubeIDE

    Начало работы с микроконтроллерами STM32 и среда STM32CubeIDE

    Введение в тему



    Я уже давно хотел попробовать экосистему STM32. Останавливали несколько проблем:

    • высокий порог вхождения;
    • высокая сложность использования;
    • рекомендуемые профессионалами IDE стоят денег, а freeware-пробники имеют ограничение на объем кода в 4 кб;
    • нет внятных туториалов на русском языке для начала работы. Вместо этого есть учебники, которые не дают главного – с чего можно быстро начать;
    • странное, почти сектантское сообщество.


    Одновременно с этим привлекало следующее:

    • невысокая стоимость плат прототипирования;
    • разрядность 32 бита, более высокая тактовая частота по сравнению с AVR и LGT8F (Logic Green), низкое энергопотребление;
    • является золотой серединой (36-84 МГц) между Arduino (8-20 МГц), LGT8F (32 МГц) и ESP8266/ESP32 (160-240 МГц);
    • фактическое отсутствие каких-либо существенных ограничений для большинства проектов;
    • большое количество реализованных проектов DIY;


    Кроме того, важным фактором оставалось то, что все вышеперечисленные платформы я уже попробовал, и даже PIC, поэтому из распространенных нераспечатанной оставалась только STM32. Поэтому целью этой статьи будет познакомить читателей с современной экосистемой STM32, описать базовые действия для начала программирования этих микроконтроллеров, чтобы быстро преодолеть порог вхождения и залить в плату программу Blink.

    Материалы и инструменты

    На пробу я приобрел две платы прототипирования:

    • STM32F103C8T6 (Blue Pill, старшая, Freq.72Mhz ROM:64KB RAM:20KB, ~220 рублей);
    • STM32F401CCU6 (Black Pill, младшая, Freq.84Mhz ROM:64KB RAM:256KB, ~230 рублей).


    Интересно, что на алиэкспрессе предлагают также модели:

    • STM32F103C6T6 (Blue Pill, младшая, Freq.72Mhz ROM:32KB RAM:10KB, ~150 рублей);
    • STM32F411CEU6 (Black Pill, старшая, Freq.100 МГц ROM:128 Кб RAM:512KB, ~470 рублей).


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

    В итоге использовался следующий набор инструментов:



    • кабели miniUSB, microUSB, USB Type C;
    • программатор-отладчик CJMCU-JLink (mini JLink);
    • кабель dupont (4x4);
    • платы прототипирования;
    • блок питания Belkin 5V 1А.


    В свое время я не стал покупать стандартный китайский клон программатора ST-Link V2, это показалось мне слишком скучным, и я успел очень дешево купить урезанную SWD-версию JLink. JLink лучше тем, что кроме микросхем ST поддерживает еще много всего, например PIC32 и RISC-V (микросхемы других производителей). Основным недостатком этой урезанной версии является то, что через нее не подается питание на плату прототипирования. Таким образом, плату приходится дополнительно подключать через независимый источник питания.

    Обратите внимание, что порядок SWD-пинов (VCC, GND, SWDCLK, SWDIO) у CJMCU-JLink и плат прототипирования не совпадает, поэтому у кабеля dupont (4x4) нужно предварительно поменять порядок подключения проводов.

    Блок питания Belkin я использую из-за очень качественного и хорошо стабилизированного питания. В частности, микросхемы PIC могут некорректно прошиваться при использовании абы какого блока питания, а вот при питании через этот таких проблем не бывает.

    Установка и настройка STM32CubeIDE

    За последнее время у ST появилась кроссплатформенная IDE STM32CubeIDE, которую они рекомендуют. Она использует код нескольких других, более ранних IDE, и интегрирует в себе все их достоинства и недостатки. Мне понравилось, что у них есть debian-сборка, которую я и решил установить на домашний ноутбук. Если положить установочный файл (около 815 Мб) в домашнюю директорию, то установка производится следующим образом:

    Начало работы с микроконтроллерами STM32 и среда STM32CubeIDE


    В ходе установки вам придется с помощью клавиши Enter пролистать 4! лицензии (причем три из них свободных). Если вы вдруг нажмете на Enter вместо y, когда вас внезапно спрашивают, принимаете ли вы лицензию, то скрипт решает, что вы ее не принимаете, и вам приходится начинать сначала. В общей сложности я листал все эти лицензии 5 раз, пока у меня наконец-то получилось примерно выучить те места, в которых необходимо снимать палец с Enter и наживать на y. Нет, читать все это, тем более на английском, я не собирался.

    После установки вам нужно будет создать новый проект STM32, и выбрать ваш микроконтроллер:




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

    Настройка STM32CubeIDE будет заключаться в том, что мы выберем имеющийся в наличии дебаггер в меню Run -> Debug Configurations...


    Поскольку у меня JLink, я выбираю Пикачу SEGGER JLINK. Если у вас ST-Link V2, то стоит выбрать, соответственно, ST-Link. После чего нажимаем на Apply.


    Подключение STM32, кодогенератор и отладка

    Теперь мы подключаем плату прототипирования через отладчик следующим образом:


    В USB-порт вставляется отладчик, а плата подключена к источнику питания.

    После подключения вы увидите мигание синего светодиода с невероятной периодичностью, больше напоминающей мерцание. Это происходит из-за того, что наши китайские друзья заливают в плату стандартный скетч Blink, не заботясь об изменении тактовой частоты микроконтроллера. Мне пришлось прикрыть обе платы листом бумаги, чтобы не ослепнуть.

    При первом подключении отладчика STM32CubeIDE предложит его обновить. Соглашаемся. Далее вылезет сообщение, предупреждающее, что мы используем дефектный (не оригинальный) отладчик, и действуем на свой страх и риск. Ваше право использовать оригинальный отладчик за кучу денег, если, конечно, они у вас есть.


    Далее мы займемся настройкой параметров.

    Самое первое, что мы сделаем – установим вывод PC13 (на плате к нему подключен светодиод, на других платах это может быть другой вывод, будьте внимательны) в режим OUTPUT (выход), чтобы обеспечить возможность мигания светодиодом.



    В разделе Pinout & Configuration выберем пункт System Core.


    В пункте System Core выбираем RCC и устанавливаем High Speed Lock (HSE) -> Crystal/Ceramic Resonator. Таким образом мы сообщили IDE, что желаем использовать внешний кристалл, присутствующий на плате, а не внутренний (в микроконтроллере). Low Speed Clock (LSE) мы просто отключаем, так как данный генератор используется для тактирования таймеров общего назначения (номера 9, 10 и 11), модуля часов реального времени (RTC) и модуля ЖКИ-индикатора.



    Далее В пункте System Core выбираем SYS и устанавливаем Debug через Serial Wire (SWD). Таким образом мы обеспечиваем работоспособность нашего отладчика.



    Осталось только настроить частоту работы микроконтроллера. В разделе Clock Configuration выбираем вышеупомянутый HSE (базовая частота равна 8 или 25 МГц в случае различных плат), PLLCLK (который является обыкновенным умножителем) и устанавливаем максимальную частоту HCLK (MHz) равной 72. Интересно, что IDE просто не даст вам установить некорректные параметры.




    На изображении видно, что на плате STM32F401CCU6 действительно установлен кристалл 25 МГц. В случае STM32F103C8T6 используется обыкновенный дешевый кристалл в огромном корпусе на 8 МГц, а не малогабаритный, потому что китайцы экономят на всём.



    После изменения параметров IDE предложит сгенерировать код программы. Собственно, работа кодогенератора – это именно то, что больше всего радует поклонников STM32. Проблема заключается лишь в одном – без помощи IDE вы сами этот код не напишете. В этом, на мой взгляд, заключается самая большая беда этой платформы.

    Осталось только добавить в сгенерированный main.c код, управляющий светодиодом. А именно, в область USER CODE BEGIN WHILE / USER CODE END WHILE, чтобы кодогенератор не затер наш код при следующем обновлении настроек.

    HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
    HAL_Delay(1000);


    Вообще говоря, функция HAL_GPIO_TogglePin является частью библиотеки HAL (это, по сути, некий фреймворк для STM32), часть функций которой очень напоминает мои собственные #defines, которые я использую для программирования микроконтроллеров AVR. Поэтому здесь мы тоже пишем на прослойке, используя ее почти как Wiring для Arduino.



    В STM32CubeIDE отсутствует кнопка "Загрузить", вместо этого есть кнопки "Run" и "Debug". При нажатии на эти кнопки код загружается в микроконтроллер автоматически. При использовании режима Debug вы сможете устанавливать точки останова и дизассемблировать в них код, следя в прямом эфире за тем, что делает микроконтроллер.



    Если для вас не важна возможность отладки, тогда вам не нужен дебаггер, и вы просто можете подключить плату прототипирования напрямую к USB-порту. Также сейчас существует возможность программирования STM32 в Arduino IDE, используя Wiring и строннюю библиотеку, но, на мой взгляд, это нивелирует большинство преимуществ STM32.

    Использованные материалы:

    Getting started with STM32CUBE IDE - LED blink - F103C8 - YouTube

    STM32 тактирование.

    STM32L– Система тактирования (обзор)

    Introduction to the STM32CubeIDE for STM32 Microcontrollers

    Getting Started with STM32 Microcontroller : Blinking of LED (Arduino IDE)

    STM32. Заметка 3. Работа с портами средствами библиотеки HAL. Бегущий огонь.
    Подборки: STM32

    Ковшик для бани удлинённый, чтобы не вставать с полки

    Необычное применение пустых баллончиков

    Добавить комментарий

    Привет, Гость!


    Зарегистрируйтесь

    Или войдите на сайт, если уже зарегистрированы...

    Войти

    Добавьте самоделку

    Добавьте тему

    Онлайн чат

    Последние комментарии

    Все комментарии