разработка и программирование электронных устройств

Быстрый старт c микроконтроллерами STM32F10x. Первый проект в IDE Code::Blocks

На стартовой странице Code::Blocks посетителей уверяют в том, что эта интегрированная среда разработки способна удовлетворить потребности самых требовательных пользователей. Она может быть настроена индивидуально под потребности каждого разработчика с помощью установки дополнительных плагинов. Такие обещания не оставили меня равнодушным и я решил попробовать создать свой первый проект в этой IDE.

Итак , после установки ARM_Toolchain Code::Blocks будет доступна для запуска из каталога CodeBlocks или из окна выбора между Eclipse и Code::Blocks.

Запустим программу и создадим проект с использованием собственного мейкфайла для Code::Blocks (далее по тексту я буду использовать сокращение C::B ). Создадим простой проект для одной из стартовых плат Olimexino-STM32 или STM32H-103 ( STM32F103-HB ).

Для начала посмотрим какие плагины установлены в C::B . Запускаем IDE и выбираем пункт меню «Plugins – Manage plugins…»

Список доступных для установки плагинов C::B вы можете посмотреть на странице http://wiki.codeblocks.org/index.php?title=Code::Blocks_Plugins.

Хочу заметить, что установочный пакет ARM_Toolchain_Setup не производит модификацию переменной среды Path. Это предотвратит вас от запуска сторонних утилит вместо необходимых. Например, если у вас установлена RAD Studio , то в ее состав входит утилита make.exe, которая , однако, не понимает формат GNU Makefile.

Таким образом вам нужно либо полностью указывать путь к исполняемым файлам пакета ARM_Toolchain , либо же прописать их в переменной Path ( если в системе нет одноименных утилит).

Для этого нужно открыть свойства системы, нажав «Пуск – Панель управления — Система и безопасность – Система — Дополнительные параметры системы — Переменные среды» (для Windows 7) и выбрав в области «Системные переменные» переменную Path. Нажимаем на кнопку «Изменить» и дописываем через точку с запятой пути к исполняемым файлам пакета ARM_Toolchain :

;C:\ARM_Toolchain\GNU_Toolchain\bin;C:\ARM_Toolchain\MinGW\msys\1.0\bin;C:\ARM_Toolchain\OpenOCd\bin;C:\ARM_Toolchain

Теперь все необходимые утилиты могут быть запущены из командной строки без указания полного пути к исполняемому файлу. Проверим это, запустив Command Prompt и набрав в командной строке , например :

>openocd-0.6.0-rc2 –version

Вы также можете запустить любимую IDE , набрав в командной строке нехитрую команду :

>Start_IDE

Распакуйте архив Examples.zip и скопируйте с заменой каталог Examples в каталог с установленным ARM_Toolchain.
Запустите C::B , выберите в главном меню File – Open… . В открывшемся окне выберите файл проекта …/ARM_Toolchain/Examples/stm32f10xQuickstart/stm32f10xQuickstart.cbp .

Мы будем работать со своим мейкфайлом, поэтому кликните правой кнопкой мышки на названии проекта и выберите «Properties…». В открывшемся окне обязательно поставьте галочку напротив «This is a custom Makefile».

Снова кликните правой кнопкой мышки на названии проекта и выберите из контекстного меню «Build options…». В открывшемся окне выберите вкладку «Make» commands. Обратите внимание на названия целей по-умолчанию. Для сборки отладочной конфигурации используется цель «Debug», для очистки от объектных файлов – цель «cleanDebug». В заключительной версии программы эти цели имеют названия «Release» и «cleanRelease» соответственно. Ничего здесь изменять не будем, оставим все как есть.

Интегрированная среда разработки Code::Blocks предназначена для проектирования программ на языках программирования C и C++. Компиляторы этих языков могут использоваться совершенно разные , от Visual C++ до GCC (в том числе кросс-компиляторы). Поэтому и настройки компиляции также выполняются для каждого из поддерживаемых компиляторов отдельно.

Выберите в главном меню C::B пункт «Settings – Compiler…». В открывшемся окне «Compiler settings» в поле «Selected compiler» выберите «GNU ARM GCC Compiler».
Далее откройте вкладку «Toolchain executables» и выберите расположение инструментальных средств так, как показано на следующем рисунке.

Для беспрепятственного обнаружения дополнительных утилит ,например make.exe, можно указать в закладке «Additional Paths» дополнительные пути к необходимым утилитам, в частности к make.exe.

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

Итак, с настройками C::B мы разобрались. Теперь настало время собрать наш первый проект для микроконтроллера stm32f103rb. Откройте Makefile , он находится в логическом каталоге «Others» интегрированной среды разработки. Дело в том, что эти каталоги создаются Code::Blocks автоматически. Принадлежность файлов к каждому из каталогов также определяется без участия пользователя.
В моем проекте вы можете видеть такие организационные элементы :

  • Sources – сюда причислены все исходные файлы на C/C++
  • Headers – здесь находятся все заголовочные файлы проекта
  • ASM Souces – исходные файла на языке ассемблера
  • Others – все остальные , не распознанные средой, файлы

В открывшемся Makefile первая переменная VERSION указывает на версию проекта (Debug или Release). Обратите также внимание на выпадающее поле «Build target» вверху экрана C::B .
Выбрав в поле «Build target» опцию Debug вы указываете среде запускать при сборке проекта цель Debug, при очистке — cleanDebug.
Что находится в этих целях интегрированная среда разработки не знает, поэтому в своем мейкфайле нам необходимо самим позаботиться о том, чтобы при запуске цели Debug исходные файлы были откомпилированы без оптимизации и с включением в выходной elf-файл отладочной информации. Для этого существует переменная VERSION.
Вам необходимо изменить ее значение на Release при выборе в поле «Build target» цели «Release».

Собираем проект простым нажатием на «Build – build» либо комбинацией клавиш «Ctrl + F9». В результате на вкладке «Build log» вы можете наблюдать процесс сборки. В случае его успешного завершения в этой вкладке появится следующее сообщение :

Process terminated with status 0 (0 minutes, 9 seconds)
0 errors, 0 warnings (0 minutes, 9 seconds)

После использования IDE Eclipse я привык видеть в окне менеджера проектов результаты работы компилятора и компоновщика. В Code::Blocks разработчики посчитали это ненужным , но возможность добавить каталоги с объектными и исполняемыми файлами у нас все же имеется.
Для этого кликните правой кнопкой мышки на названии проекта и выберите в выпадающем меню пункт «Project tree – Edit file types&categories…» . В появившемся окне «Categories & file types» нажмите на кнопку «Add» , чтобы добавить новую категорию. Для созданной категории необходимо через точку с запятой указать расширения файлов ,которые будут автоматически причислены к этой категории.

Если новая категория не появится в окне менеджера проектов автоматически , то нам придется добавить хотя бы один из файлов, относящийся к данной категории. Для этого снова кликните правой кнопкой мыши на проекте и выберите пункт меню «Add files…» и выберите нужный файл.

Настало время сказать несколько слов о самой тестовой программе. Пример очень простой .
Программа выводит в начале строку символов в USART и моргаем светодиодом с частотой приблизительно 7,6 Гц.
Задержка формируется благодаря встроенному в микроконтроллер таймеру TIMER2.
Используется один обработчик прерывания от таймера.
USART работает без прерываний. Это сделано мною специально для того, чтобы потом задействовать функции USART-а для вывода кодов ошибок через последовательный порт.
В этом случае использование USART-а является более предпочтительным , например , по сравнению с виртуальным портом на основе USB VCP.
Когда ваша программа попадет в обработчик HardFault_Handler , то никакие другие прерывания уже не будут доступны. Чтобы отправить перед входом в бесконечный цикл обработчика HardFault_Handler сообщение о том, что мы попали в обработчик исключения HardFault используется функция вывода в USART без прерываний.
Для проверки работоспособности нашей программы необходимо загрузить один из выходных файлов (test.elf , test.bin или test.hex) в микроконтроллер.
По-умолчанию исполняемый файл предназначен для загрузки в отладочную плату STM32H-103.
Если вы используете в качестве отладочной платы OLIMEXINO-STM32 , то вам необходимо закомметировать в Makefile строчку

DEFINE+= USE_STM32H_103

И раскомментировать

DEFINE+= USE_OLIMEXINO_STM32

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

Использование библиотеки Stm32 Std Peripheral Library мы обсудим в следующей статье.

Продолжение следует.

2 Comments to Быстрый старт c микроконтроллерами STM32F10x. Первый проект в IDE Code::Blocks

  1. ji231's Gravatar ji231
    8 февраля 2013 at 14:46 | Permalink

    если C::B дополнять еще одним toolschain, где хранятся настройки (наименования, пути, список опций компилятора, явки, пароли ?

    Искал среди файлов в директории и ниже.. ничего не нашел.

    К примеру, завожу еще один каталог с компилятором (toolschain) в каталоге? Где сам C::B находится. В настройках Compilers добавляем новый (as «Copy…»)
    После чего выбираю добавленный toolschain из меню, прописываю пути куда надо…
    но засада в том, что не могу редактировать список опций на закладке «Compiler flag»
    Где эти опции сохраняются?
    как бы их отредактировать для добавленного.

    Хорошо, если состав опций очень схож, а если отличия существенны?

Leave a Reply

You must be logged in to post a comment.