Środowisko dla ARM Cortex-Mx
- Szczegóły
- Poprawiono: 24 marzec 2015
- Odsłony: 47713
Środowisko dla ARM Cortex-Mx
W 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.
W górnej części witryny eclipse.org wybieramy "Download".
|
Interesuje nas edycja: Eclipse IDE for C/C++ Developers.
|
Wybieramy proponowany serwer źródłowy lub ew. mirror.
|
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.
Wybieramy najnowszą wersję toolchainu.
|
Wersja dla platformy MS Windows.
|
Pobieranie rozpoczyna się automatycznie po kilku sekundach.
|
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:
- File -> New -> C Project
Kod projektu zbudowany przez kreatora (przygotowany dla STM32F4DISCOVERY) nie będzie działał na płytce STMF401 Nucleo z dwu powodów:
- błędna automatyczna konfiguracja wyprowadzenia na którym podłączona jest dioda LED (PD12 w STM32F4DISCOVERY, PA5 w STMF401 Nucleo),
- błędna konfiguracja zegara mikrokotrolera (konfiguracja źródła zegara jako HSE. który nie jest domyślnie obecny na STMF401 Nucleo).
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).
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.