Atollic truestudio stm32 быстрый старт

Atollic truestudio stm32 быстрый старт

Блог о электронике

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

А жаль, из бесплатных это была пожалуй наиболее юзерфрендли среда для создания проектов под STM32 где можно было родить минимальный проект в три клика, причем реально минимальный. Только CMSIS и все. Никаких тебе монструозных кубов и прочей дичи. Выдающих портянки кода от одного только косого взгляда.

Что делать? Куда бежать? STM, говорят, прикупил Atollic True Studio, вышвырнул оттуда поддержку всех сторонних камней и дал нахаляву. Решил я попробовать это чудо. В конце концов чем оно отличаеться то от CoIDE? Тот же Eclipse…

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

Чтож, онанизм так онанизм. Наши руки не для скуки!

▌Кач, кач, кач — качаем софт

Качай эту студию с официального сайта и ставь.

Также надо скачать файлы куба, если еще не скачал. CMSIS свежий найти можно только там. У меня в примере будет контроллер STM32F103C8T6, поэтому нам нужен куб для F1 (гуглить stm32cubef1).

При запуске студия предложит указать рабочую директорию, можно оставить по дефолту, а лучше перекинуть туда, где у тебя исходники разные лежат. У меня это D:CodingARM

Потом ,с чистого листа создаем проект:

Выбираем С Project:

Да, там можно указать сразу CMSIS проект, но … это не работает. Т.е. никакой CMSIS не подключается, вообще ничего не происходит. Так что создаем пустой проект. А тулчейн выбираем Atollic ARM Tools:

Дальше, на выбор, предлагается два конфига. Дебаг и Релиз. Собственно это разные настройки среды для отладки и финальной сборки. Можно оставить два и переключаться между ними. Скажем в дебаге оставить оптимизацию для дебага, а в релизе сделать Os — по размеру. Но не суть важно, я обычно оставляю только релиз. Так привык. Путаницы меньше. Снимаем лишние галочки и финиш.

В нашей папке проекта возникнет два сиротливых файла самого проекта. Пора накидать структуру и накидать первого мяса:

Добавили папочки. В одном будет CMSIS файлы, в другом наш код, и еще под стартовые файлы папочку. Многие делают внутри еще деление на inc и src, чтобы разделить инклюдники и сорцы. Я нет, мне так удобней.

Теперь открываем наш архив в CubeF1 и лезем там в папку DriversCMSISInclude и начинем тащить в свою папку проекта CMSIS нужные файлы. Какие нужны?

  • cmsis_gcc.h — Мы используем GCC компилятор.
  • core_cm3.h — У нас ядро CortexM3
  • core_cmFunc.h — За каким то хреном в последние три файла вынесли то, что раньше было в cm3, так что их тоже подключаем.
  • core_cmInstr.h
  • core_cmSimd.h

Следом идем в CMSISDeviceSTSTM32F1xxInclude и тащим оттуда файлы хидеров к конкретно нашему камню. Какие нужны?

stm32f1xx.h
system_stm32f1xx.h
stm32f103xb.h

Но тут внимательней с stm32f103xb.h он зависит от размера камня. Как узнать какой из файлов нужен? На выбор для 103 серии там аж четыре варианта *x6, *xb, *xe, *xg. Какой выбрать для STM32F103C8? И почему именно stm32f103xb.h?

Ответ будет в stm32f1xx.h. Если его открыть и найти дефайны контроллеров, то

Сразу станет понятно к какой подгруппе отнести наш камень. Его и выбираем.

Осталось докинуть туда исходники и стартап.

Идем в папку DriversCMSISDeviceSTSTM32F1xxSourceTemplates

И копируем себе в CMSIS папку system_stm32f1xx.c

А себе в папочку Startup тащи файл startup_stm32f103xb.s (или другой, если у нас другой контроллер *xe или *x6, например) из папки DriversCMSISDeviceSTSTM32F1xxSourceTemplatesgcc

Там же можно поживиться и скриптом для линкера. Но его лучше взять из того, что сама студия предложит. О нем ниже.

Добавили файлы, заходи в свойства проекта в студии в раздел С/C++ Build -> Settings. Тут же он ругнется, что мол мы Target не указали,а для какого проца рожать то?

И предложить выбрать камень:

Бери какой у тебя там. У меня это STM32F103C8

Он до кучи предложит и стартап скрипт подцепить. По умолчанию кинет в корень, но лучше направить его в папку Startup, порядку больше.

Вот, кстати, тут видно, что стартап код для конфигурации Release, могла бы и Debug быть до кучи.

Следующим шагом надо добавить пути в проект. Идем в свойства проекта и в разделе C/C++ General ->Paths and Symbols, на вкладке Includes добавляем пути:

Если жать кнопочку Workplace то он возьмет их из текущей директории, только указать:

Будет как то так:

Кстати, видите там правее вкладка #Symbols? Туда можно вписать тактовую частоту внешнего кварца, если он есть. Я добавил туда значение HSE_VALUE 12000000U — у меня кварц на 12мгц. И оно забьет дефолтное значение 8000000, которое прописано в CMSIS.

Еще можно сделать генерацию hex файла. Ну на всякий, вдруг пригодится. Это в разделе C/C++ Build -> Settings -> Tool Settings -> Other -> Output format

Теперь надо раскомментировать наш контроллер в файле stm32f1xx.h. Помните, где мы там справлялись какой файл брать? Вот открывай его и правь, не забыв сохранить:

Или, лучше наверное, не править тут, а добавить в #Symbols еще и STM32F103xB на пару к HSE_VALUE

Все, можно создать в папке Code пару файлов main.c и main.h да родить примитивный скелетик проги который можно попробовать скомпилировать:

Программа должна скомпилироваться, а в папке Release (или Debug, смотря какую конфигурацию оставить) появится *.elf *.hex *.list *.map файлы.

▌Отладка
Отладку надо тоже настроить. По умолчанию там какая то лажа в настройках и мне пришлось долго гуглить, что за лажа и где копать.

Итак, подключаем STLink к нашему контроллеру по SWD. Студия ставит тут же дрова стлинка, так что завестись должно все из коробки. Разве что рекомендую обновить прошивку самого стлинка, через STLink Utility.

Жми кнопку Debug, зеленую букашку такую в верхней панели инструментов, и получишь диалог настройки отладчика:

Во вкладке Main можно ничего не трогать. Главное проверить, чтобы в C/C++ Appliction был путь к нашему *.elf файлу. А в Project стоял наш проект. Ну и выбрана конфигурация реальная.

Во вкладке Debugger надо будет выбрать ST-Link и на этом все тут:

Теперь надо настроить оптимизаци под дебаг. Если это не сделать, то при попытке выполнить код под отладчиком получишь сообщение:

No source available for «main() …

И адрес последнего байта прошивки. Дебаг включится, но исходника не будет и шагать можно будет в лучшем случае по ассемблерному тексту.

Читайте также:  0 В 1 и наоборот python

Чтобы заработала отладка надо включить оптимизацию под нее. Идем в настройки проекта, в раздел С/С++ Build — Settings. Во вкладке Tool Settings ищем в дереве C Compiler раздел Debugging и ставим там Debug Level в Maximum (-g3).

Также можно основную оптимизацию переключить на оптимизацию под отладку. При этом при отладке не будут теряться строки программы, но помните, что это уже будет другая программа и некоторые глюки могут на ней не проявляться, так что рекомендую оставить -Os. Искать эту опцию в вкладке Tool Settings ищем в дереве C Compiler раздел Optimization параметр Optimizator level

И отладка пошла, появился маркер текущей строки…

Подключение SPL, HAL или LL уже тривиально. Накидываем их в папки, можно отдельную создать. Да добавляем в проект. И пишем… Олдово, ручками и по хардкору 🙂

В общем, вот такое вот ручное дрочево, часто весьма неочевидное и по куче менюшек надо лазать. И в каком месте оно специализированное под STM32? Специализированное под это как в Keil или в CoIDE раз раз и проект готов, со всеми необходимыми файлами. А тут же практически настройка того же эклипса и гцц.

85 thoughts on “Cоздание минимального проекта под STM32 в Atollic True Studio вручную”

Дихалт, а почему ты скачивал Куб именно для F1. Они что, для всех семейств разные? Я скачал какой-то первый попавшийся (мк у меня stm32f767). Периферия вроде бы работает, а вот usb не хочет. Пересмотрел 100500 видео, у всех работает, а у меня как у самого рыжего ни в какую.

Блог о электронике

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

А жаль, из бесплатных это была пожалуй наиболее юзерфрендли среда для создания проектов под STM32 где можно было родить минимальный проект в три клика, причем реально минимальный. Только CMSIS и все. Никаких тебе монструозных кубов и прочей дичи. Выдающих портянки кода от одного только косого взгляда.

Что делать? Куда бежать? STM, говорят, прикупил Atollic True Studio, вышвырнул оттуда поддержку всех сторонних камней и дал нахаляву. Решил я попробовать это чудо. В конце концов чем оно отличаеться то от CoIDE? Тот же Eclipse…

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

Чтож, онанизм так онанизм. Наши руки не для скуки!

▌Кач, кач, кач — качаем софт

Качай эту студию с официального сайта и ставь.

Также надо скачать файлы куба, если еще не скачал. CMSIS свежий найти можно только там. У меня в примере будет контроллер STM32F103C8T6, поэтому нам нужен куб для F1 (гуглить stm32cubef1).

При запуске студия предложит указать рабочую директорию, можно оставить по дефолту, а лучше перекинуть туда, где у тебя исходники разные лежат. У меня это D:CodingARM

Потом ,с чистого листа создаем проект:

Выбираем С Project:

Да, там можно указать сразу CMSIS проект, но … это не работает. Т.е. никакой CMSIS не подключается, вообще ничего не происходит. Так что создаем пустой проект. А тулчейн выбираем Atollic ARM Tools:

Дальше, на выбор, предлагается два конфига. Дебаг и Релиз. Собственно это разные настройки среды для отладки и финальной сборки. Можно оставить два и переключаться между ними. Скажем в дебаге оставить оптимизацию для дебага, а в релизе сделать Os — по размеру. Но не суть важно, я обычно оставляю только релиз. Так привык. Путаницы меньше. Снимаем лишние галочки и финиш.

В нашей папке проекта возникнет два сиротливых файла самого проекта. Пора накидать структуру и накидать первого мяса:

Добавили папочки. В одном будет CMSIS файлы, в другом наш код, и еще под стартовые файлы папочку. Многие делают внутри еще деление на inc и src, чтобы разделить инклюдники и сорцы. Я нет, мне так удобней.

Теперь открываем наш архив в CubeF1 и лезем там в папку DriversCMSISInclude и начинем тащить в свою папку проекта CMSIS нужные файлы. Какие нужны?

  • cmsis_gcc.h — Мы используем GCC компилятор.
  • core_cm3.h — У нас ядро CortexM3
  • core_cmFunc.h — За каким то хреном в последние три файла вынесли то, что раньше было в cm3, так что их тоже подключаем.
  • core_cmInstr.h
  • core_cmSimd.h

Следом идем в CMSISDeviceSTSTM32F1xxInclude и тащим оттуда файлы хидеров к конкретно нашему камню. Какие нужны?

stm32f1xx.h
system_stm32f1xx.h
stm32f103xb.h

Но тут внимательней с stm32f103xb.h он зависит от размера камня. Как узнать какой из файлов нужен? На выбор для 103 серии там аж четыре варианта *x6, *xb, *xe, *xg. Какой выбрать для STM32F103C8? И почему именно stm32f103xb.h?

Ответ будет в stm32f1xx.h. Если его открыть и найти дефайны контроллеров, то

Сразу станет понятно к какой подгруппе отнести наш камень. Его и выбираем.

Осталось докинуть туда исходники и стартап.

Идем в папку DriversCMSISDeviceSTSTM32F1xxSourceTemplates

И копируем себе в CMSIS папку system_stm32f1xx.c

А себе в папочку Startup тащи файл startup_stm32f103xb.s (или другой, если у нас другой контроллер *xe или *x6, например) из папки DriversCMSISDeviceSTSTM32F1xxSourceTemplatesgcc

Там же можно поживиться и скриптом для линкера. Но его лучше взять из того, что сама студия предложит. О нем ниже.

Добавили файлы, заходи в свойства проекта в студии в раздел С/C++ Build -> Settings. Тут же он ругнется, что мол мы Target не указали,а для какого проца рожать то?

И предложить выбрать камень:

Бери какой у тебя там. У меня это STM32F103C8

Он до кучи предложит и стартап скрипт подцепить. По умолчанию кинет в корень, но лучше направить его в папку Startup, порядку больше.

Вот, кстати, тут видно, что стартап код для конфигурации Release, могла бы и Debug быть до кучи.

Следующим шагом надо добавить пути в проект. Идем в свойства проекта и в разделе C/C++ General ->Paths and Symbols, на вкладке Includes добавляем пути:

Если жать кнопочку Workplace то он возьмет их из текущей директории, только указать:

Будет как то так:

Кстати, видите там правее вкладка #Symbols? Туда можно вписать тактовую частоту внешнего кварца, если он есть. Я добавил туда значение HSE_VALUE 12000000U — у меня кварц на 12мгц. И оно забьет дефолтное значение 8000000, которое прописано в CMSIS.

Читайте также:  Depo vip c8511 характеристики

Еще можно сделать генерацию hex файла. Ну на всякий, вдруг пригодится. Это в разделе C/C++ Build -> Settings -> Tool Settings -> Other -> Output format

Теперь надо раскомментировать наш контроллер в файле stm32f1xx.h. Помните, где мы там справлялись какой файл брать? Вот открывай его и правь, не забыв сохранить:

Или, лучше наверное, не править тут, а добавить в #Symbols еще и STM32F103xB на пару к HSE_VALUE

Все, можно создать в папке Code пару файлов main.c и main.h да родить примитивный скелетик проги который можно попробовать скомпилировать:

Программа должна скомпилироваться, а в папке Release (или Debug, смотря какую конфигурацию оставить) появится *.elf *.hex *.list *.map файлы.

▌Отладка
Отладку надо тоже настроить. По умолчанию там какая то лажа в настройках и мне пришлось долго гуглить, что за лажа и где копать.

Итак, подключаем STLink к нашему контроллеру по SWD. Студия ставит тут же дрова стлинка, так что завестись должно все из коробки. Разве что рекомендую обновить прошивку самого стлинка, через STLink Utility.

Жми кнопку Debug, зеленую букашку такую в верхней панели инструментов, и получишь диалог настройки отладчика:

Во вкладке Main можно ничего не трогать. Главное проверить, чтобы в C/C++ Appliction был путь к нашему *.elf файлу. А в Project стоял наш проект. Ну и выбрана конфигурация реальная.

Во вкладке Debugger надо будет выбрать ST-Link и на этом все тут:

Теперь надо настроить оптимизаци под дебаг. Если это не сделать, то при попытке выполнить код под отладчиком получишь сообщение:

No source available for «main() …

И адрес последнего байта прошивки. Дебаг включится, но исходника не будет и шагать можно будет в лучшем случае по ассемблерному тексту.

Чтобы заработала отладка надо включить оптимизацию под нее. Идем в настройки проекта, в раздел С/С++ Build — Settings. Во вкладке Tool Settings ищем в дереве C Compiler раздел Debugging и ставим там Debug Level в Maximum (-g3).

Также можно основную оптимизацию переключить на оптимизацию под отладку. При этом при отладке не будут теряться строки программы, но помните, что это уже будет другая программа и некоторые глюки могут на ней не проявляться, так что рекомендую оставить -Os. Искать эту опцию в вкладке Tool Settings ищем в дереве C Compiler раздел Optimization параметр Optimizator level

И отладка пошла, появился маркер текущей строки…

Подключение SPL, HAL или LL уже тривиально. Накидываем их в папки, можно отдельную создать. Да добавляем в проект. И пишем… Олдово, ручками и по хардкору 🙂

В общем, вот такое вот ручное дрочево, часто весьма неочевидное и по куче менюшек надо лазать. И в каком месте оно специализированное под STM32? Специализированное под это как в Keil или в CoIDE раз раз и проект готов, со всеми необходимыми файлами. А тут же практически настройка того же эклипса и гцц.

85 thoughts on “Cоздание минимального проекта под STM32 в Atollic True Studio вручную”

Дихалт, а почему ты скачивал Куб именно для F1. Они что, для всех семейств разные? Я скачал какой-то первый попавшийся (мк у меня stm32f767). Периферия вроде бы работает, а вот usb не хочет. Пересмотрел 100500 видео, у всех работает, а у меня как у самого рыжего ни в какую.

Блог технической поддержки моих разработок

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

Один из самых важных вопросов при освоении сложных микроконтроллеров подобно STM32 – выбор среды разработки (IDE).

Существует большое количество интегрированных средств разработки для микроконтроллеров STM32.

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

Но вряд ли кто-то из моих читателей согласится выложить 8000 евро за среду разработки. Хотя в платных IDE, как правило, есть бесплатные варианты с ограничением по размеру кода. Но не хочется подобно Дамоклу ждать, когда оборвется волос, на котором подвешен меч над твоей головой. Т.е. в самый неподходящий момент получить сообщение, о том, что остальная часть памяти недоступна.

Но есть приятное исключение. Платная интегрированная среда Atollic TrueStudio с прошлого года стала бесплатной. Производитель STM32 компания STMicroelectronics в 2018 году купила фирму Atollic и сделала эту IDE бесплатной.

От добра добра не ищут. Я выбрал в качестве среды разработки IDE Atollic TrueStudio. Она:

  • бесплатная;
  • нет ограничений;
  • разработчик поддерживает ее и обещает поддерживать в будущем;
  • устанавливается ”из коробки”;
  • прекрасно работает.

Итак. Нам необходимо установить следующее программное обеспечение:

  • Интегрированная среда разработки Atollic TrueStudio.
  • Пакет STM32CubeMX – программа создания проекта, визуальной конфигурации микроконтроллера.
  • Flash Loader Demonstrator — программа для прошивки микроконтроллеров через системный загрузчик.
  • Программа – терминал COM-порта компьютера, аналог Монитора последовательного порта Arduino IDE. Необходима для отладки программной и аппаратной частей системы. Я выбрал CoolTerm, но подобных программ очень много. Если не нравится мой выбор, используйте другую.

Давайте все это последовательно установим.

Atollic TrueStudio.

Выбираем ОС. Заполняем поля.

Загружаем последнюю версию по ссылке.

Запускаем полученный файл-инсталлятор:
Atollic_TrueSTUDIO_for_STM32_windows_x86_v9.2.0_20181203-0921.exe

Дальше следуем подсказкам инсталлятора.

STM32CubeMX

Регистрируемся, подтверждаем регистрацию по электронной почте.

В самом низу страницы загружаем архивный файл по ссылке Get Software.

Разархивируем скачанный файл во временную папку. Запускаем файл SetupSTM32CubeMX-5.0.1.exe.

Возможно, потребуется установка Java. Ссылка для установки откроется сама.

После загрузки и установки Java надо опять запустить SetupSTM32CubeMX-5.0.1.exe и довести установку до конца.

Flash Loader Demonstrator

Ссылка для самой загрузки (Get Software ) внизу страницы.

Разархивируем во временную папку, запускаем flash_loader_demo_v2.8.0.exe.

Следуем подсказкам инсталлятора

CoolTerm.

Устанавливать не надо. Разархивировать в рабочую папку. Запускается исполняемый файл CoolTerm.exe.

В итоге у нас 4 программы – 4 ярлыка на рабочем столе.

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

Программное обеспечение мы установили. В прошлом уроке к отладочной плате STM32103C8T6 добавили компоненты, позволяющие загружать программу во FLASH микроконтроллера.

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

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

Цель – проверить, что:

  • STM32CubeMX создает проект и задает правильную конфигурацию ресурсов микроконтроллера.
  • IDE Atollic TrueStudio открывает проект, позволяет его редактировать и создает загрузочный файл.
  • Flash Loader Demonstrator – загружает программу в микроконтроллер.
  • Мы правильно припаяли к отладочной плате преобразователь интерфейсов и кнопки.
  • Работает сама отладочная плата.
Читайте также:  I865p pe g i848p

Разработаем и проверим программу, которая мигает светодиодом платы на 13 выводе с частотой 2 раза в секунду.

Конфигурация и создание проекта.

Создаем папку для наших проектов. У меня это d:STM32ProjectsLessonsLesson3.

Ниже надписи New Project выбираем ACCESS TO MCU SELECTOR, что означает выбор типа контроллера.

При первом запуске программа загрузит необходимые файлы из Интернета и откроется окно выбора микроконтроллера.

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

Нажимаем кнопку Start Project в правом верхнем углу.

Появляется окно конфигуратора.

Все интуитивно понятно. Справа изображение микроконтроллера с интерактивными выводами. Слева – регистры микроконтроллера, состояние которых мы собственно и хотим установить.

Желтым цветом показаны выводы питания, остальные пока серые. Зеленеть они будут по мере конфигурации портов.

Настраиваем систему тактирования микроконтроллера.

Открываем закладку System Core. Выбираем RCC.

Источником тактирования задаем высокоскоростной генератор на кварцевом резонаторе High Speed Clock (HSE) -> Crystal/Ceramic Resonator .

Два вывода на микросхеме стали зелеными. Мы их заняли под выводы для кварцевого резонатора.

Выбираем в верхнем горизонтальном меню Clock Configuration (Конфигурация тактирования).

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

Коммутаторы PLL Source Mux и System Clock Mux устанавливаем на нижние входы.

Умножитель *PLL Mul задаем равным 9.

В результате на схеме видно, что основная частота тактирования 72 мГц (окошко HCLK).

С такой же частотой работает ядро микроконтроллера (окно FCLK).

Красным цветом отмечено, что какое-то устройство (APB1 Prescaler) работает на недопустимо высокой частоте. Есть предупреждение, что максимальная частота 36 мГц.

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

Остается настроить режим порта для вывода 13. К нему подключен светодиод, которым мы собираемся мигать.

Возвращаемся в Pinout & Configuration. Справа появляется изображение микроконтроллера.

Правой кнопкой мыши нажимаем на вывод 13, назначаем его на выход (GPIO_Output).

Вывод стал зеленым.

В закладках слева выбираем GPIO (порты общего назначения).

Правее появляется строчка с режимом вывода 13.

Выбираем ее правой кнопкой мыши. В нижней строчке режимов вывода User Label пишем LED13. Это мы задали имя переменной для вывода. Через него в программе будет происходить обращение к выводу 13.

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

Заполняем данные для сохранения проекта. В верхнем меню выбираем Project Manager.

  • Имя проекта.
  • Папку сохранения проекта.
  • Обязательно выбираем TrueSTUDIO в поле Toolchain IDE.

Нажимаем GENERATE CODE.

При первом запуске STM32CubeMX загружает из Интернета необходимые файлы. Разрешаем загрузку.

В указанной папке появился проект Lesson3_1.

Разработка программы, компиляция.

Запускаем Atollic TrueStudio. Везде пустые поля.

Открываем наш проект File -> Open Projects from File System…

Указываем путь к проекту.

В поле Project Explorer появился наш проект.

Файлы с которыми мы будем сейчас работать в папке Scr.

Два раза кликаем правой кнопкой мыши по main.c и наш основной файл с исходным текстом появляется в среднем окне IDE.

Попробуем компилировать проект.

Нажимаем Project -> Build Project или молоточек в панели инструментов.

Смотрим на поле Problems (Проблемы) внизу экрана.

У меня сообщений об ошибках нет, значит, проект компилировался нормально.

Исходный текст программы.

В отличие от Ардуино структура программы STM32 типичная для языка C. Всегда есть функция main() – функция, которая вызывается при запуске программы. Часто внутри этой функции расположена вся программа, за исключением тел других функций.

#include "main.h" – заголовочный файл.

void SystemClock_Config(void);
static void MX_GPIO_Init(void);

Прототипы функций. В отличие от Ардуино в классическом я зыке C каждая функция, в том числе, которую объявляет программист, должна иметь прототип. Т.е. должна быть объявлена, как переменная. Прототип содержит имя функции, возвращаемое значение и аргументы. Должен быть объявлен до первого вызова функции.

Функция main — начало выполнения программы.

Функции инициализации регистров микроконтроллера. В них трансформировались наши действия по заданию конфигурации в программе STM32CubeMX.

И дальше нам в проекте конфигуратор подставил бесконечный цикл — аналог функции loop() в системе Ардуино.

В него мы и вставим команды управления светодиодом.

Текст программы изобилует блоками комментариев подобно этому.

/* USER CODE BEGIN WHILE */

/* USER CODE END WHILE */

Дело в том, что исходный текст создала программа STM32CubeMX. Если захочется что-либо изменить в конфигурации микроконтроллера с помощью STM32CubeMX, то конфигуратор может испортить текст, внесенный программистом на этапе разработки. Поэтому STM32CubeMX выделяет блоки, которые он не будет изменять при повторных конфигурациях. Эти блоки он отмечает строками комментариев:

Свой текст надо размещать только в таких блоках.

Сейчас нас интересует блок:

/* USER CODE END WHILE */

Вставляем инверсию светодиода с задержкой четверть секунды. Добавляем вызовы двух функций: инверсии состояния вывода и временной задержки.

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
<
HAL_GPIO_TogglePin(LED13_GPIO_Port,LED13_Pin);
HAL_Delay(250);

/* USER CODE END WHILE */

Заметьте, что мы указали при конфигурации название вывода для светодиода LED13. Теперь в программе мы обращаемся к нему через имена LED13_GPIO_Port, LED13_Pin.

Можно закрыть проект.

Скачать архив проекта можно по ссылке:

Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!

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

Прошивка FLASH микроконтроллера.

Результат компиляции оказался в HEX-файле в папке Debug. В моем случае:

Именно этот файл будем прошивать в микроконтроллер.

Подключаем к компьютеру мост USB-UART. Перед этим должен быть установлен драйвер моста. Как это сделать, можно посмотреть по ссылкам PL2303 и CH340.

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

Запускаем Flash loader demonstrator.

Устанавливаем номер порта.

Нажимаем и удерживаем кнопку ПРОШИВКА.

Кратковременно нажимаем кнопку СБРОС.

Если на светофоре горит зеленый — еще раз Next.

Можно посмотреть информацию о микроконтроллере и размере его FLASH.

Опять давим Next.

Выбираем Download to device.

Задаем путь к нашему HEX-файлу.

Происходит загрузка FLASH микроконтроллера. Выводится сообщение о результате.

Теперь можно отпустить кнопку ПРОШИВКА, и закрыть программу.

Остается нажать кнопку СБРОС и светодиод на отладочной плате начинает мигать с частотой 2 раза в секунду.

Если так, то все было сделано правильно.

В следующем уроке научимся работать с регистрами микроконтроллера, узнаем о библиотеках CMSIS и HAL.

Ссылка на основную публикацию
Adblock detector