Программирование STM32. Настройка Coocox IDE + STM32CubeMX

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

Перед началом работы необходимо установить:

  • Coocox IDE v2
  • GNU ARM Embedded Toolchain
  • STM32CubeMx с сайта st.com
  • Драйвера для ST-Link (ST-Link utility) с сайта st.com

Давайте приступим к настройке. Первым делом создадим пустой проект в CoIDE

Выбираем нужный микроконтроллер

Нажимаем New Project

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

В результате получим пустой проект, в котором будет один только файл main.c

На самом деле файл main.c нам не нужен, его нам создаст STM32CubeMX, так что текущий файл просто удаляем из проекта.

Теперь временно свернем окно Coocox IDE и запустим программу STM32CubeMX. Нажмем New Project

Теперь создаём нужную конфигурацию проекта. Для начала помигаем встроенным светодиодом. Для этого устанавливаем PC13 как OUTPUT и на вкладке Pinout в разделе SYS включаем отладку Debug -> Serial Wire

Перейдём на страницу настроек Project->Settings. Зададим имя проекта такое же, как мы задали в Coocox IDE. И в Project Location зададим папку, в которой находится проект

Toolchain/ IDE выбираем SW4STM32. Нажимаем Ok

Теперь нажимаем Project->Generate code. Проект генерируется некоторое время. По окончании нажимаем Open Folder. Как видим, к нашему проекту добавились папки Drivers, Inc, Src.

Их необходимо добавить к проекту CoocoxIDE простым перетаскиванием

Теперь если попробовать скомпилировать проект, то мы получим ошибку

D:\workspace\BlinkProject\Drivers\CMSIS\Device\ST\STM32F1xx\Include/stm32f1xx.h:159:3: error: #error «Please select first the target STM32F1xx device used in your application (in stm32f1xx.h file)»

Эта ошибка говорит нам о том, что не выбран тип микроконтроллера в файле stm32f1xx.h.

Откроем его и посмотрим содержимое

Для нашего микроконтроллера необходимо выбрать STM32F103xB

Откроем конфигурацию проекта View->Configuration и в поле Defined Symbols добавим нашу константу STM32F103xB. Нажимаем Add

Теперь при попытке собрать проект получаем следующую ошибку

[cc] collect2.exe: error: ld returned 1 exit status

Это ошибка линкера, так что переходим View->Configuration->Linker и выключаем флажок Use Memory Layout from Memory Window

Внизу страницы выбираем Scatter файл, который уже создан в папке нашего проекта. Workspace/BlinkProject/STM32F103C8Tx_FLASH.ld

Теперь при нажатии кнопки Build наш проект успешно компилируется и собирается.

Попробуем записать наш файл в микроконтроллер. Нажимаем Download code to Flash. У меня выскакивает ошибка

Error: Failed to open flash driver file

Переходим на вкладку View->Configuration->Download и видим, что в поле Programming Algoritm путь к файлу содержит русские символы

Я просто перенесу нужный файл в другую папку и добавлю новый путь к этому файлу.

Теперь прошивка заливается в микроконтроллер.

Давайте добавим код для моргания светодиодом в главный цикл while программы

Теперь светодиод моргает с интервалом в 100мс.

Отладка проекта:

Программа отладчика  находится в папке Bin каталога Coocox, в моем случае это D:\CooCox\CoIDE_V2Beta\bin

Для запуска отладчика нужно из консоли запустить файл start_gdbserver.bat. Но перед этим нужно подправить пути, прописанные в этом файле. Изначально они указывают на несуществующие папки. В моем случае bat файл выглядит следующим образом:

Как видим в качестве параметра отладчику передается ini файл. Его тоже нужно открыть и скорректировать для нашего отладчика и микроконтроллера.

GDBServerParam.ini

После этого открываем в проводнике папку D:\CooCox\CoIDE_V2Beta\bin, зажимаем клавишу shift и кликаем правой кнопкой мыши на свободном месте. Появится контекстное меню, в котором выбираем «открыть окно команд». Или просто открываем консоль и переходим в нужную нам папку.

Далее запускаем start_gdbserver.bat. Видим, что запустился отладчик и он ожидает подключения на порту 2009

Теперь в программе coocox мы можем нажать клавишу debug, CoIDE подключится к отладчику и появится возможность отлаживать проект.

Есть одно важное замечание: после того, как мы закончили отлаживать проект и нажали клавишу Stop, отладчик тоже закончит работу и перед следующим сеансом отладки его снова нужно будет запустить в командной строке с помощью start_gdbserver.bat.

Краткая инструкция:

  1. Установить драйверы ST-LINK v2,CoIDE, GNU ARM Embedded Toolchain, STM32CubeMX
  2. Создать пустой проект в CoIDE
  3. Удалить файл main.c из проекта
  4. Создать проект в STM32CubeMx. Папку проекта указать туже, что и в CoIDE. Toolchain указать SW4STM32
  5. Сгенерировать код в CubeMX
  6. Добавить папки Drivers, Inc, Src в проект CoIDE перетаскиванием
  7. В свойствах проекта добавить константу STM32F103xB или другую для вашего контроллера
  8. В настройках линкера установить scatter file
  9. В настройках проекта на вкладке Download проверить, чтобы путь к файлу Programming Algoritm был без русских символов.
  10. Отредактировать файлы start_gdbserver.bat и GDBServerParam.ini для того, чтобы иметь возможность отлаживать проект.