2. STM32. Програмування. IDE для STM32


09.08.2016

Для того, щоб розробляти свої програми нам знадобиться середовище розробки, бажано з дебагером, і компілятор C.

Я зупинився на CooCox CoIDE та GCC. По-перше цей софт не коштує грошей, по-друге - з ним не виникло ніяких питань. Встановив і почав робити. Щоправда CooCox зроблений тільки під Windows. Це не зовсім добре. І хоча на Ubuntu CooCox і працює під wine і навіть компіляція проходить вдало, з дебагером проблема. Та й робота через wine - це не true way. Якось я напишу, як налаштувати IDE для STM32 під  Ubuntu.

А тим часом...

UPD: Я виклав версію CoIDE 1.7.8 на Яндексдиску. У подальшому будемо використовувати інші IDE (читай як встановити і налаштувати Keil uVision5 – IDE для STM32, IAR Workbench – IDE для STM32).

Встановимо IDE CooCox CoIDE на Windows

  • Качаємо і встановлюємо програму CooCox (CoIDE-1.7.8.exe) На час написання статті вже була доступна версія 2.0 Бета. Та я бета-версіями намагаюсь не користуватися, тому у прикладах буде фігурувати версія 1.7.8.
  • Качаємо і встановлюємо GCC (gcc-arm-none-eabi-5_3-2016q1-20160330-win32.exe)
Далі мається на увазі, що Ви маєте хоча б базові знання С.

Перша програма

Запускаємо CooCox.

Виконуємо пункт меню Project -> New

Вказуємо ім`я проекту:

CooCox_01

Обираємо Чип:

CooCox_02 CooCox_03

З репозиторію обираємо, які саме модулі ми будемо використовувати:

CooCox_04 CooCox_05

Відкриваємо main.c і набираємо наступний текст програми:


#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"


int main(void)
{
  int i;
  /* Initialize Leds mounted on STM32 board */
  GPIO_InitTypeDef  GPIO_InitStructure;
  /* Initialize LED which connected to PC13, Enable the Clock*/
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  /* Configure the GPIO_LED pin */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  while (1)
  {
    /* Toggle LED which connected to PC13*/
    GPIOC->ODR ^= GPIO_Pin_13;

    /* delay */
    for(i=0;i<0x100000;i++);
  }
}

CooCox_06 CooCox_07

Компілюємо (Project->Build)

При першій компіляції IDE може запросити вказати місцезнаходження компілятора.

CooCox_15

Треба коректно вказати місце, куди було встановлено GCC.

Після вдалої компіляції заливаємо програму до мікроконтролера. Ця програма буде блимати світлодіодом на платі. Як залити програму до мікроконтролера ми розглядали у попередній статті.

Якщо Ви будете заливати через UART за допомогою UART-USB перехідника, файл для заливки знайдете у директорії: C:\CooCox\CoIDE\workspace\Example_GPIO\Example_GPIO\Debug\bin\Example_GPIO.bin

Якщо у Вас є встановлений ST-Link програматор, програму у мікроконтролер можна залити прямо з IDE (Flash -> Program Download).

Якщо при цьому виникла помилка "Error: Flash driver function execute error" Рекомендується:

  1.  Запустити STM32 ST-LINK Utility і виконати Frimware update.
  2. Скопіювати файл STLinkUSBDriver.dll з папки C:\Program Files\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility у папку C:\CooCox\CoIDE\bin після чого перезапустити CooCox IDE

Деякі налаштування IDE та параметри компілятора

Repository

Виконуємо пункт меню View -> Repository

CooCox_05

Тут ми обираємо бібліотеки, які необхідні для нашого проекту. При цьому IDE копіює у папку stm_lib вашого проекту потрібні файли.

Конфігурація проекту

Далі дивимось у конфігурацію проекту

CooCox_08

Закладка Compile

CooCox_09

у цій закладці встановлюються ключі для компілятора. Ми сюди ще будемо повертатися, а поки що звернемо увагу на поле Optimization. Це поле задає параметр оптимізації для компілятора. Про оптимізацію буде окрема розмова, поки що Вам потрібно засвоїти, що оптимізація Optimizate Size (-Os)  максимально зменшує об’єм скомпільованої програми. Але при цьому компілятор може викинути (оптимізувати) деякі операції, і ваша програма може працювати не так, як би Вам того хотілося. Тому, на перших етапах, я не рекомендую використовувати цей метод оптимізації. Встановіть Optimizate (-O1).

Закладка Link

CooCox_10

У цій закладці поки що нас цікавить тільки поле Library та Linked Libraries. Якщо Ви будете використовувати стандартні бібліотеки С, наприклад бібліотеку математичних функцій math, Вам треба буде обрати "Use base C Library". Якщо цього не зробити, то компілятор видасть помилку.

Закладка Output

CooCox_11

Тут вказуються куди складати скомпільовані файли і у яких форматах.

Закладка User

CooCox_12

Поки що в ній ми нічого робити не будемо.

Закладка Debugger

CooCox_14

В цій закладці встановлюються параметри дебагера. Оскільки ми будемо використовувати ST-Link, тут нічого міняти не прийдеться.

Закладка Download

CooCox_14

Тут встановлюються параметри щодо загрузки програми до мікроконтролера. Тут нам теж нічого міняти не треба.

Дебагер

Звісно, можна просто заливати програму до мікроконтролера і дивитися як вона працює. Але інколи, коли виникають проблеми, цього не достатньо і хотілось би розібратися як саме працює написана програма. CooCox CoIDE має вбудований дебагер, що дуже корисно на етапі вивчення мікроконтролера. Також дебагер допоможе знайти помилки у складних проектах. CooCox CoIDE вже налаштована на роботу з ST-Link і ніяких додаткових налаштувань робити не потрібно. Достатньо запустити дебагер Меню (Debug -> Debug). При цьому програматор має бути підключеним до комп`ютера, а мікроконтролер - до програматора. При запуску дебагера виконується компіляція проекту, заливка програми до мікроконтролера і її покроковий запуск.

CooCox_Debugger_01

У Вас є наступні кнопки для керування дебагером.

CooCox_Debugger_02

Проекспериментуйте з ними, щоб зрозуміти як вони працюють.

У закладці Variables можете спостерігати за значенням змінних.

CooCox_Debugger_03

Також можна підвести курсор до змінної і спостерігати у спливаючий підказці її значення

CooCox_Debugger_06

Якщо встановити Breackpoint (Меню Debug -> Todggle Breackpoint) на потрібні рядки у коді, під час виконання програми дебагер буде зупинятися на встановлених Breackpoint-ах.

CooCox_Debugger_04 CooCox_Debugger_05

Тепер, після першого знайомства з IDE, можна перейти безпосередньо до вивчення мікроконтролера STM32F103 і написання своїх програм.

Бажаю успіхів!

Дивись також:

STM32
Коментарі:
Witalij говорить:
03.11.2016 19:00
Схоже, Coocox помер. Сайт не відповідає. Дуже шкода. Був дуже гарний засіб розробки.
Доведеться користуватися зв`язкою STM32CubeMX та System Workbench for STM32 IDE.

andre говорить:
04.11.2016 08:24
Так, їх сайт лежить. Може тимчасові проблеми. Шкода якщо проект закриють.

Сергій говорить:
05.11.2016 23:50
Дякую за чудову добірку статей для початківців. Вирішив спробувати себе в програмуванні STM32, купив саме таку плату і чудом знайшов цей сайт з дедатьним описом всіх кроків

PS Скріншот для "Закладка Debugger" додайте будь ласка. А то зараз двічі скрін з закладкою Download.

Сергій говорить:
08.11.2016 00:04
Здається виконувати всередині циклу один і той же фрагмент коду двічі то зайве.
while (1)
  {
    /* Toggle LED which connected to PC13*/
    GPIOC-&gt;ODR ^= GPIO_Pin_13;
 
    /* delay */
    for(i=0;i&lt;0x100000;i++);
  }
Результат, здається той же.

andre говорить:
08.11.2016 09:43
Дякую за зауваження. Поправив.

Сергій говорить:
08.11.2016 18:49
Вам дякую за чудову підборку статей. Роблю перші кроки в програмуванні взагалі, та STM32 зокрема. Буде купа питань, буду спамити в коментах :)
До якоїсь зі статей бачив комент про можливу статтю Бутлоадер. Є питання/пропозиція - бутлоадер для програмування мікроконтроллера через рідний USB, якщо таке взагалі можливо реалізувати.

andre говорить:
08.11.2016 21:38
Саме такий бутлоадер я і мав на увазі. Але про нього мова піде пізніше.

Додати коментар
Code
* - обов'язкові поля

Архіви