11.05.2022г. ВНИМАНИЕ! Если у вас не отображаются иллюстрации к статьям, для просмотра сайта используйте TOR браузер
Спустя долгое время, я решил узнать как обстоят дела с поддержкой STM8 в SDCC. Последней версией SDCC которой я пользовался был 3.6. За это время OpenOCD официально обзавелся поддержкой STM8. И т.к. в Linux я пользуюсь преимущественно IDE QtCreator, был соблазн перетащить туда проекты на STM8. Главная сложность возникла с системой управления сборки. QtCreator умеет работать только с qmake, qbs и cmake проектами. Qmake не поддерживает sdcc никоим образом. У CMake поддержка заявлена, но она чисто декларативная. Таким образом нам остается только Qbs.
Ранее для STM8 я пользовался STVD+Cosmic, но это требовало работы из виртуальной машины. STVD - отличная среда разработки, но в визуальном плане она устарела уже давно. Отсутствие темной темы и линтера конечно не принципиально, но без этого уже не комфортно работать. Кроме того Cosmic для проверки лицензии постоянно стучится в интернет. Я же предпочитаю отключать интернет в виртуалке.
Ок, но какие сложности нас ожидают?
Итак, софт который нам понадобится для программирования микроконтроллеров STM8:
Из аппаратного обеспечения нам достаточно будет платы c чипом STM8S103F3 и ST-Link V2 с поддержкой SWIM протокола.
Руководств и мануалов по использованию Qbs в baremetal-проектах почти нет. Есть несколько примеров для STM32, но так как там используется GCC, скрипт проекта будет отличаться от такового для SDCC.
Прежде чем начать что-то делать, настоятельно рекомендуется пройти по последним трем ссылкам, и изучить их содержимое.
Содержание:
I. Консольный Qbs проект для STM8+SDCC
II. Работа с проектом в Qt Creator
III. Бонус
Данную статью по содержанию можно разделить на две или три части. С одной стороны я хотел рассказать в ней о конфигурации ряда IDE основанных на кодовой базе Eclipse, т.к. когда я впервые настраивал подключение отладчика к Eclipse и SW4STM32, мне не показался этот процесс простым и "интуитивно понятным".
Вторая часть статьи в каком-то роде продолжает прошлогоднюю статью по STM32, Т.к. в качестве демонстрационного примера берётся проект из той статьи. Однако, одним заимствованием ограничиться не получилось, и для развития идеи, я описал недостатки данного проекта, и предложил более совершенный вариант Makefile'а.
Получившийся Makefile дал возможность перенести проект на систему сборки CMake. Это в свою очередь дало возможность продемонстрировать использование Qt Creator для программирования и отладки микроконтроллеров STM32.
В техническом плане, проект используемый в качестве примера, очень простой. Это обычный Blink, состоящий из Си-кода и ассемблере ARM. Из ресурсов микроконтроллера используется лишь порт ввода-вывода GPIO_C и системный таймер SysTick. В проекте не затрагиваются DMA, USB, FSMC и прочие интерфейсы. Также в стороне осталась библиотека newlib, поддержка языка программирования C++, и работа с проектами STM32CubeMX. Т.е. несмотря на доработку проекта в статье, он все ещё годится лишь для несложных задач, и более соответствует уровню микроконтроллеров с архитектурой Cortex-M0/M0+.
Используемые в статье Hardware и Software. В качестве операционной системы использовалась Slackware GNU/Linux (русские физики рекомендуют), в качестве целевого микроконтроллера - STM32F103C8T6 (Blue Pill). В качестве программатора и отладчика использовался китайский клон: "ST-Link v2", а также JTAG отладчик на чипе FT232H. Из софта, в качестве gdb сервера в статье используется: "OpenOCD", а в качестве флешера: "st-flash". Используемый туллчейн arm-none-eabi-gcc имеет версию - 8.3.1, релиз от 20190703. Версия CMake - 3.15.5. Qt Creator используемый при написании статьи был версий 4.9.2 и 4.10.2.
Должен предупредить, что свой ST-Linkv2 я покупал достаточно давно, и он на чипе STM32. Сейчас на али продаются программаторы ST-Linkv2 на чипе CKS32F103C8T6, и с ними могут быть нюансы.
Полезные материалы по теме статьи:
Содержание:
I. Отладка в Eclipse, SW4STM32 и STM32CubeIDE:
II. "Допиливание" Makefile и создание на его основе CMake проекта:
III. Использование Qt Creator для программирования и отладки микроконтроллеров STM32:
Как всем известно, с марта этого года компилятор COSMIC for STM8 стал полностью бесплатен и без ограничений на размер генерируемого кода. Он имеет полную поддержку SPL(Standard Peripheral Library) и фирменой среды разработки - STVD(ST Visual develop IDE).
К сожалению, Cosmic работает только под операционными системами Windows, и для активации требует лецензионный ключ который можно прождать несколько дней. С другой стороны, stm8flash в Linux не умеет прошивать STM8L151C8, а с COSMIC через виртуалку вполне можно работать, да из под Wine он тоже запускается.
Ок, для начала нам потребуется скачать SPL и STVD c сайта https://my.st.com, а с сайта http://www.cosmic-software.com/download.php сам компилятор COSMIC. Как скачать SPL я рассматривал год назад в Введение в STM8: программирование и прошивка с помощью клона ST-Link v2, версия для Linux, а связку STVP+STVD весной в STM8 + IAR + ST-LINK2: программирование, прошивка и отладка из под Windows. Однако с тех многие ссылки побились, поэтому предлагаю пройти квест заново. Потому что поиск чего-то на st.com, действительно напоминает дурной квест.
В качестве целевого чипа я буду использовать STM8S103F3P6, изредка переключаясь на STM8L051/STM8L151 там, где есть необходимость.
HAL - это дальнейшее развитие библиотеки SPL, выпущенной фирмой "ST Microelectronics", ориентированный на то, что бы дать разработчику единый инструмент для работы со всеми чипами STM32. Этим единым инструментом стала кросс-платформенная утилита с графическим интерфейсом STM32CubeMX, а сам фреймворк HAL стал называться STM32Cube. И если утилита STM32CubeMX действительно одна для всех микроконтроллеров STM32, то фреймворк STM32Cube/HAL для каждой линейки чипов свой. Т.е. все так же как и в SPL.
STM32CubeMX - позволяет сгенерироваль проект на основе CMSIS+HAL под различные IDE, что помогает избежать многих граблей, на начальном этапе освоения STM32.
Нас будет интересовать линейка STM32F1xx, документация по HAL для этой линейке доступна на официальном сайте Description of STM32F1xx HAL drivers. User Manual UM1850
Установка связки STM32CubeMX + IDE в системах Windows, тривиальна и многократно описана в сети, а вот в Linux могут возникнуть сложности.
Для Eclipse существует плагин STM32Cube, который позволяет запустить STM32CubeMX в окошке Eclipse. Есть в сети пошаговая инструкция как этим плагином пользоваться: Установка и настройка Eclipse, STM32CubeMX под Windows, и я даже где-то видел видео, где все работает. Но в моем случае, проект который в итоге генерировался, Eclipse-ом почему-то не желался приниматься:
Архитектуру STM32 можно мысленно разделить на две части. Первая часть, это ядро Cortex-M3, которое спроектировали в ARM и которое примерно одинаковое для всех. "Примерно", потому что, содержит опциональные модули которые могут быть у одного производителя и отсутствовать у другого. Вторая часть, это периферия знакомая по STM8, с тем отличием, что был добавлен USB2.0 интерфейс, хотя точнее было бы сказать, что этот интерфейс был "откручен" от STM8(такая у STM политика: хочешь аппаратный USB, используй STM32).
Если в прошлый раз я писал о работе с STM8 из под Linux, то сейчас мне бы хотелось раскрыть этот вопрос с позиций Windows.
В качестве ОС я выбрал "старушку" Windows XP SP3, а в качестве "подопытного" чипа, так же как и в прошлый раз, у меня STM8S103F3P6 распаяный на плате как на картинке слева. Используемый мною программатор, это китайский клон ST-Link2.
Этот пост можно назвать "быстрым стартом" STM8в Windows.
Первым делом нужно будет поставить драйвера для программатора ST-Link2. Для этого заходим на домашний адрес компании ST в раздел данного программатора:
http://www.st.com/web/catalog/tools/FM146/CL1984/SC724/SS1677/PF251168
Если посмотреть на исходник в предыдущем посте, то можно заметить, что программная часть работы с UART "кочует" из поста в пост, и правильно было бы выделить ее в отдельный файл, как впрочем и реализацию работы с TWI модулем. Развивая мысль, мы придем к необходимости, какой-то библиотеки, куда можно будет скидывать собственные наработки по работе с тем или иным модулем. По правде говоря такоя библиотека уже есть, называется: Procyon AVRlib. Изучение ее безусловно всем рекомендую, но... она стара, как баба-яга, а библиотека для микроконтроллера не шибко сложная вещь, и вероятно каждый, по мере изучения avr-архитектуры, захочет написать собсвенный аналог "с трехмерными шахматами и нейронными диструктурами".
Итак, цель надеюсь понятна, для начала напишем файл проекта Makefile, это будет попроще. Затем, что бы код для AVR можно было писать в Qt Creator, сделаем еще CMakeLists.txt
В качестве "подопытного" кода возмем пример из предыдущего поста. Выделим из него модули UART и TWI, тогда сруктура директорий будет примерно такой: