Środowisko dla ARM Cortex-Mx

Środowisko dla ARM Cortex-Mx

toolchainW tym artykule opisujemy konfigurację kompletnego środowiska rozwojowego dla mikrokontrolerów rodziny ARM Cortex-Mx (na przykładzie mikrokontrolerów rodziny STM32), w oparciu o zintegrowane środowisko programistyczne Eclipse IDE, bleeding-edge-toolchain przygotowany przez Freddiego Chopina oraz OpenOCD.

 

 

 

 

Etap I: kompilator + IDE

Eclipse

POBIERANIE OPROGRAMOWANIA

Pobierz archiwum zawierające Eclipse IDE for C/C++ Developers z tej strony.

Eclipse IDE, download, krok 1.
W górnej części witryny eclipse.org wybieramy "Download".
Eclipse IDE, download, krok 2.
Interesuje nas edycja: Eclipse IDE for C/C++ Developers.
Eclipse IDE, download, krok 3.
Wybieramy proponowany serwer źródłowy lub ew. mirror.
Eclipse IDE, download, krok 4.
Pobieranie rozpoczyna się automatycznie po kilku sekundach.

PROCES INSTALACJI

Oprogramowanie nie wymaga instalacji. Po rozpakowaniu archiwum w wybranej lokalizacji jest ono od razu gotowe do pracy (o ile na komputerzez zainstalowana jest środowisko uruchomieniowe JAVA JRE).

 

bleeding-edge-toolchain

POBIERANIE OPROGRAMOWANIA

Pobierz archiwum zawierające bleeding-edge-toolchain z tej strony. W tutorialu wykorzystaliśmy najnowszą wersję dostępną w momencie pisania tego artykułu (platforma Windows x86): gcc-arm-none-eabi-4_8-141002-win.7z. W przypadku problemów z rozpakowaniem archiwum polecamy wykorzystać darmowy program 7-Zip.

bet 1
Wybieramy najnowszą wersję toolchainu.
bet 2
Wersja dla platformy MS Windows.
bet 3
Pobieranie rozpoczyna się automatycznie po kilku sekundach.
bet 4
W przypadku problemów z automatycznym rozpoczęciem pobierania należy uruchomić je ręcznie. 

PROCES INSTALACJI

Oprogramowanie nie wymaga instalacji. Archiwum należy rozpakować na dysku (najlepiej w katalogu głównym jednego z dysków).

 

GNU ARM Eclipse Plugin

POBIERANIE I INSTALACJA OPROGRAMOWANIA

Najwygodniej zainstalować plugin z poziomu środowiska Eclipse (umożliwia to np. wygodne aktualizowanie rozszerzenia w późniejszym czasie). Dane dla środowiska Eclipse można znaleźć na stonie GNU ARM Eclipse Plugin. Procedura instalacji została opisana na tej stronie.

 

PODSUMOWANIE

W tym momencie powinno być już możliwe zbudowanie w środowisku Eclipse nowego projektu. Dla płytki STM32F401 Nucleo można to wykonać następująco:

2014-10-23 13-57-56
2014-10-23 13-59-46
2014-10-23 14-00-49
2014-10-23 14-01-12
2014-10-23 14-01-35

Kod projektu zbudowany przez kreatora (przygotowany dla STM32F4DISCOVERY) nie będzie działał na płytce STMF401 Nucleo z dwu powodów:

Pierwszy z problemów rozwiążemy korygując definicje BLINK_PORT_NUMBER oraz BLINK_PIN_NUMBER w pliku include/BlinkLed.h. Prawidłowe wartości dla STM32F401 Nucleo to:

#define BLINK_PORT_NUMBER               (0)
#define BLINK_PIN_NUMBER                (5)

Drugi wymaga rekonfiguracji zegara systemowego - funkcja void configure_system_clock(void) w pliku src/_initialize_hardware.c powinna zawierać następującą konfigurację:

RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
__PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = 6; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.PLL.PLLM = 16; RCC_OscInitStruct.PLL.PLLN = 336; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; RCC_OscInitStruct.PLL.PLLQ = 7; HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);

Korekta obu powyższych problemów gwarantuje uruchomienie skompilowanego programu na płytce ewaluacyjnej STM32F401 Nucleo (Project -> Build Project).

W przypadku braku na komputerze programu make (brak dostępnych narzędzi, które z niego korzystają, np. WinAVR, MinGW itp.) można pograć go z tej strony. Po instalacji należy dodać katalog bin do ścieżki systemowej lub skopiować jego zawartość (pliki libiconv2.dll, libintl3.dll oraz make.exe) do katalogu bin bleeding-edge-toolchain.

Podobnie w przypadku braku narzędzia rm będzie występował błąd przy czyszczeniu projektu (Project -> Clean). Komplet narzędzi CoreUtils dla systemu Windows można pobrać z tej strony, a po instalacji skopiować je do katalogu bin bleeding-edge-toolchain.

Etap II: programowanie + debugowanie

Programowanie: STM32 ST-LINK Utility

Jeśli zależy nam jedynie na zaprogramowaniu mikrokotrolera możemy zwykle użyć darmowych narzędzi oferowanych lub polecanych przez producentów (dla mikrokotrolerów STM32 będzie to STM32 ST-LINK Utility, dla układów z rodziny LPCxxxx będzie to aplikacja Flash Magic).

Po zainstalowaniu i uruchomieniu aplikacji ST-LINK Utility możemy podłączyć się do płytki uruchomieniowej (Target->Connect), wybrać plik wynikowy (File->Open file...) oraz załadować go do pamięci mikrokontrolera (Target -> Program & Verify... -> START).

 2014-10-23 20-01-44

Debuggowanie: OpenOCD

Program można znaleźć na stronie niezawodnego Freddiego Chopina, który wraz z pojawieniem się nowej wersji na głównej stronie projektu (http://openocd.sourceforge.net/) kompiluje go dla systemu Windows. Najnowsza wersja do pobrania tutaj.

Program dostępny jest w formie archiwum (ponownie przydatny okaże się 7Zip), które należy rozpakować w katalogu głównym jednego z dysków twardych komputera.

Działanie OpenOCD w konsoli Windows

Działanie można sprawdzić komendą

openocd-0.8.0.exe --version

w konsoli systemu:

C:\openocd-0.8.0\bin>openocd-0.8.0.exe --version
Open On-Chip Debugger 0.8.0 (2014-04-28-08:39)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.sourceforge.net/doc/doxygen/bugs.html

Aktualne sterowniki STLink v2 / v2-1 będą odpowiednie do współpracy z OpenOCD. Jeśli wszystko jest w porządku a do komputera podłączona jest płytka Nucleo F401RE po wywołaniu komendy

openocd-0.8.0.exe -f ..\scripts\board\st_nucleo_f401re.cfg

powinniśmy otrzymać następujący wynik:

C:\openocd-0.8.0\bin>openocd-0.8.0.exe -f ..\scripts\board\st_nucleo_f401re.cfg
Open On-Chip Debugger 0.8.0 (2014-04-28-08:39)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.sourceforge.net/doc/doxygen/bugs.html
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Info : This adapter doesn't support configurable speed
Info : STLINK v2 JTAG v23 API v2 SWIM v6 VID 0x0483 PID 0x374B
Info : using stlink api v2
Info : Target voltage: 3.255010
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints

Integracja z Eclipse

Wraz z ARM Eclipse Plugin instalowany jest odpowiedni plugin do współpracy z OpenOCD. Proces jego integracji ze środowiskiem Eclipse opisano na tej stronie.

 

PODSUMOWANIE

Powyższe działania (sprawdzone dla czystych instalacji systemów Windows 7 x86 oraz Windows 8.1 x64) gwarantują poprawne skonfigurowanie środowiska dla mikrokontrolerów z rdzeniem ARM Cortex-Mx.

2014-10-23 21-55-39