W tym poście opiszę sposób generowania projektu jako Makefile oraz obsługę projektu z edytora VSC.
Projekt należy wygenerować jako Makefile:
Zostanie stworzony folder zawierający wygenerowane pliki:
- while (1)
- {
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_12);
- HAL_Delay(500);
- HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_13);
- HAL_Delay(500);
- HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_14);
- HAL_Delay(500);
- HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_15);
- HAL_Delay(500);
- }
Następnie ponowne wygenerowanie projektu:
Projekt można też uruchomić wykorzystując Make for Windows. W tym przypadku po wypakowaniu Binaries i Dependencies należy je umieścić w jednym folderze. Aby uruchomić projekt należy ścieżkę do katalogu bin do zmiennych środowiskowych i wywołać w folderze z projektem. Można też to wykonać w następujący sposób:
- C:\lokalizacja\make-3.81\bin\make.exe
Wynik działania powyższej instrukcji jest następujący:
Teraz tak utworzony plik *.bin można wgrać na płytkę mikrokontrolera wykorzystując program STM32 ST-Link Utility.
Konfiguracja:
Projekt wymaga konfiguracji w celu usunięcia błędów wyświetlanych w VS:
- {
- "configurations": [
- {
- "name": "Win32",
- "includePath": [
- "${workspaceFolder}/**"
- ],
- "defines": [
- "_DEBUG",
- "UNICODE",
- "_UNICODE"
- ],
- "windowsSdkVersion": "10.0.19041.0",
- "compilerPath": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\Hostx64\\x64\\cl.exe",
- "cStandard": "c17",
- "cppStandard": "c++17",
- "intelliSenseMode": "windows-msvc-x64",
- "configurationProvider": "ms-vscode.makefile-tools"
- }
- ],
- "version": 4
- }
Plik po edycji powinien wyglądać następująco:
- {
- "configurations": [
- {
- "name": "STM32 F4",
- "includePath": [
- "${workspaceFolder}/**"
- ],
- "defines": [
- "_DEBUG",
- "UNICODE",
- "_UNICODE",
- "USE_HAL_DRIVER",
- "STM32F407xx"
- ],
- "intelliSenseMode": "gcc-arm",
- "compilerPath": "C:/Program Files (x86)/GNU Arm Embedded Toolchain/
- 10 2020-q4-major/bin/arm-none-eabi-gcc.exe",
- "compilerArgs": [
- "-mcpu=cortex-m4",
- "-mthumb",
- "-mfpu=fpv4-sp-d16",
- "-mfloat-abi=hard"
- ],
- "cStandard": "c11",
- "cppStandard": "c++17",
- "configurationProvider": "ms-vscode.makefile-tools"
- }
- ],
- "version": 4
- }
Do powyższego pliku dołączyłem dane odczytane z pliku Makefile.
- Nazwa konfiguracji - tutaj wprowadzamy przykładowy ciąg znaków,
- Ścieżki do plików - powyżej zostały dodane wszystkie pliki znajdujące się w strukturze projektu. Można też dołożyć ścieżki zdefiniowane w C_SOURCES w pliku Makefile.
- Definicję preprocesora,
- Wykorzystywany kompilator,
- Ścieżkę do pliku kompilatora,
- Argumenty kompilatora skopiowane z pliku Makefile CFLAGS.
- Standard języka C,
- Standard języka C++,
Więcej informacji można znaleźć pod tym linkiem.
Po wprowadzeniu zmian błędy nie będą już widoczne w programie VS.
Openocd:
Openocd pozwala na debugowanie oraz wgrywanie kodu do mikrokontrolera. Pakiet można pobrać pod tym linkiem.
W celu wgrania kodu do układu należy wykonać pewne modyfikacje w pliku Makefile, przez dołożenie komendy flash:
- flash: all
- openocd -f interface/stlink.cfg -f target/stm32f4x.cfg -c "program $(BUILD_DIR)/$(TARGET).elf verify reset exit"
Powyższa linia wywołuje openocd z konfiguracją stlink dla mikrokontrolerów STM. Następnie wybierane jest urządzenie na jakie ma być wgrywany program. Ostatnia część podaje ścieżkę do programu z weryfikacją kodu po wgraniu oraz resetem mikrokontrolera do przeładowania programu.
Wywołanie komendy wraz z wynikiem działania operacji wygląda następująco:
W celu uruchomienia debuggera przez VSC należy zainstalować pakiet Cortex-Debug wraz z pakietem dla miktokontrolerów F4 Cortex-Debug: Device Support Pack - STM32F4.
Niestety w tym pakiecie nie będzie konfiguracji dla układu STM32F407VG. Można ją pobrać z serwisu GitHub pod tym linkiem. Dla testowanego przezemnie układu będzie to STM32F407.svd. Pobrany plik należy umieścić w głównym folderze projektu.
Kolejnym elementem jest dołożenie pliku konfiguracyjnego dla OpenOCD oraz Cortex-Debug. W tym celu należy stworzyć plik .vscode/launch.json. Plik ten będzie zawierał instrukcję do debugowania programu.
- {
- "version": "0.4.4",
- "configurations": [
- {
- "name": "Cortex Debug",
- "cwd": "${workspaceRoot}",
- "executable": "./build/stm32f407_makefile.elf",
- "request": "launch",
- "type": "cortex-debug",
- "servertype": "openocd",
- "device": "STM32F407VG",
- "configFiles": [
- "interface/stlink.cfg",
- "target/stm32f4x.cfg"
- ],
- "svdFile": "./STM32F407.svd"
- }
- ]
- }
Uruchomiona opcja debugowania wygląda następujaco:
Projekt można pobrać z dysku Google pod tym linkiem.