本教學介紹了使用CMake建置生成器、 Ninja建置工具和GCC編譯器在Visual Studio Code中有效開發和偵錯 STM32 應用程式的步驟。
你將學到的東西
如何安裝和設定所有工具
如何使用 STM32CubeMX 或 STM32CubeIDE 工具建立新的 STM32 項目
如何安裝和設定Visual Studio Code的建議擴充功能以簡化開發
如何設定 CMake 清單和 CMake 預設
如何為編譯器產生建置系統
如何使用GCC編譯項目
如何將應用程式燒寫並調試到 STM32 目標
本教學使用Windows作業系統。類似的過程將適用於 Linux 和 MAC 作業系統。
工具安裝教學將幫助您了解使用 STM32 所需的必要工具,通常有利於初學者加快速度並正確理解必要的要求。
一段時間以來,ST推出了新的STM32CubeCLT軟體工具,其中包括vscode所需的建置工具,包括Ninja建置系統和CMake建置產生器。 STM32CubeCLT(命令列工具)是一種快速加快 vscode 開發速度的簡單方法。它還會自動設定您的建置環境變數(Windows 中的路徑),讓您可以直接從命令列工具呼叫ninja 、 cmake或其他命令。
透過安裝STM32CubeCLT ,您不會獲得STM32CubeIDE圖形工具,也不會獲得任何 MCU 設定工具功能,而只是通常從vscode內呼叫建置和偵錯的命令列工具。您仍然需要單獨安裝 vscode 和必要的擴充功能。
第一步是安裝 STM32CubeIDE,它將用於輕鬆啟動新的STM32項目,它附帶整合的STM32CubeMX工具 - 允許我們進行圖形配置。
STM32CubeIDE也提供了後續VSCode開發所需的必要工具
ARM 無 eabi GCC 編譯器
用於調試的 ST-LINK GDBServer
用於代碼下載的 STM32CubeProgrammer 工具和相應的 ST-Link 驅動程式
包含 STM32 SVD 檔案的資料夾
ST-Link 驅動程式
環境路徑設定
STM32CubeIDE 安裝時應在環境設定中新增3
路徑,其中每個路徑對應上述工具。就我的電腦而言,使用 STM32CubeIDE 1.8 (透過 eclipse 更新,因此我的實際安裝路徑仍然顯示版本1.0.2
)路徑定義為:
GCC編譯者: c:STSTM32CubeIDE_1.0.2STM32CubeIDEpluginscom.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346toolsbin
ST-Link GDB伺服器: c:STSTM32CubeIDE_1.0.2STM32CubeIDEpluginscom.st.stm32cube.ide.mcu.externaltools.stlink-gdb-server.win32_2.0.100.202109301221toolsbin
STM32Cube 程式設計器 CLI: c:STSTM32CubeIDE_1.0.2STM32CubeIDEpluginscom.st.stm32cube.ide.mcu.externaltools.cubeprogrammer.win32_2.0.100.202110141430toolsbin
您的路徑可能因版本號碼而異
驗證路徑設定正確,運行:
arm-none-eabi-gcc --version STM32_Programmer_CLI --version ST-LINK_gdbserver --version
這應該會產生類似下圖的輸出
如果您已使用STM32CubeCLT安裝建置工具,則無需執行此步驟
下載並安裝 CMake。
安裝精靈會要求您將 CMake 新增至環境路徑。選擇該選項或將CMake安裝資料夾的bin
資料夾新增至環境路徑。
如果您已使用STM32CubeCLT安裝建置工具,則無需執行此步驟
從 Github 發布頁面下載 Ninja 建置系統。它作為便攜式可執行檔提供,無需安裝任何東西。然而,它必須在環境層級可見,就像所有先前的工具一樣。
驗證CMake和Ninja安裝,運行:
cmake --version ninja --version
輸出應類似
下載並安裝 VSCode。安裝並開啟後,視窗將類似於下圖。
Visual Studio Code是輕量級文字編輯器,能夠使用擴充功能來擴充它。
使用 CMake 進行 STM32 開發的有用擴充清單:
ms-vscode.cpptools
:用於 C/C++ 開發的語法突出顯示和其他核心功能
ms-vscode.cmake-tools
:CMake核心工具,建置系統產生器工具
twxs.cmake
: CMake 顏色反白顯示
marus25.cortex-debug
:Cortex-M 調試擴展,對於從 VSCode 進行 STM32 調試是必需的
dan-c-underwood.arm
:ARM 彙編語法螢光筆
zixuanwang.linkerscript
: GCC 連結器腳本語法螢光筆
您可以透過在 VSCode 的內部終端機視窗中複製以下命令來安裝它們。
code --install-extension ms-vscode.cpptools code --install-extension ms-vscode.cmake-tools code --install-extension twxs.cmake code --install-extension marus25.cortex-debug code --install-extension dan-c-underwood.arm code --install-extension zixuanwang.linkerscript
前往終端機 -> 新終端機以開啟新終端機窗口
另一種方法是使用擴展搜尋 GUI並從那裡手動安裝。
至此,所有工具都已正確安裝 - 您已走上成功的正確軌道。
前進的基本要求是擁有一個將轉換為CMake並在VSCode中開發的工作項目。為此,我將指導您使用STM32CubeMX或STM32CubeIDE軟體工具建立簡單的新專案。
如果您已經有要處理的項目,則可以跳過這一部分。
我在本示範中使用了STM32CubeIDE工具和 STM32H735G-DK 板。
打開STM32CubeIDE並開始新項目
選擇STM32 MCU - 我選擇了STM32H735IG ,它用在STM32H735G-DK板上
選擇專案名稱和路徑,然後建立專案並等待Pinout 視圖打開
我們的任務是建立一個可以切換 LED 的簡單項目。 LED 分別連接到PC2
和PC3
,低電位有效。引腳可配置為輸出推挽或開漏模式
將引腳設定為輸出,可選標籤分別為LED1
和LED2
如果您使用的是STM32CubeMX
,請前往專案管理器,設定專案名稱並確保選擇STM32CubeIDE
作為Toolchain
。
轉到高級設定並選擇LL
作為生成代碼的驅動程式
為了簡單起見,我們在本教程中使用 LL 驅動程式
按紅色按鈕或使用CTRL + S
快捷鍵儲存項目重新產生項目
項目現已(重新)產生。黃色突出顯示的檔案是要建置的來源。藍色是連結描述檔。
這是第一次運行,我們準備編譯。按CTRL + B
或點選錘子圖示開始。 STM32CubeIDE將編譯該項目,您應該會看到類似下圖的內容。現在已準備好刷新 MCU 的快閃記憶體並開始偵錯。
這是第一部分的結尾,我們成功創建了專案。此時,我們認為專案已準備好轉移到基於 CMake 的建置系統。
您將來可以繼續使用 STM32CubeIDE 進行開發、新增來源、修改程式碼、編譯、刷新二進位檔案並直接偵錯微控制器。這是首選的STM32開發工作室,由意法半導體開發和維護。
預計在 VSCode 中開發的項目已經創建。我們將繼續使用 GCC 編譯器,但也可以使用其他編譯器。
隨著 Visual Studio Code 的發布,許多開發人員將該工具用於多種程式語言,幸運的是還可以使用單一工具開發 STM32 應用程式。如果您是喜歡 VSCode 的開發人員之一,最優雅的前進方式是將基於 STM32CubeIDE 的專案轉移到CMake ,在 VSCode 中開發程式碼並使用 GCC 編譯器透過 Ninja 建置系統進行編譯。它快速且輕便。
VSCode 中的開發適合中階或有經驗的使用者。我建議所有 STM32 初學者繼續使用STM32CubeIDE開發工具鏈。稍後繼續討論 VSCode 主題會很容易。
每個基於 CMake 的應用程式都需要根目錄中的CMakeLists.txt
文件,該文件描述項目並為建置系統產生提供輸入資訊。
根
CMakeLists.txt
檔案有時稱為頂級 CMake文件
CMakeLists.txt
檔案中所述的基本內容:
工具鏈訊息,例如帶有建置標誌的 GCC 配置
項目名稱
使用編譯器、C、C++ 或彙編文件建構的原始文件
編譯器尋找函數、定義等的包含路徑清單( -I
)
連結器腳本路徑
編譯定義,有時稱為預處理器定義( -D
)
用於指令集產生的 Cortex-Mxx 和浮點設置
Visual Studio Code 已安裝並將用作進一步的文件編輯器。
找到生成的專案路徑並使用 VSCode 開啟資料夾:
選項 1:使用資源管理器轉到資料夾,然後右鍵單擊並選擇Open in Code
。
選項 2:或者,將 VScode 作為新的空解決方案打開,然後手動向其中新增資料夾。使用File -> Open Folder...
開啟資料夾
選項 3:使用 cmd 或 powershell 工具轉到資料夾並執行code .
最終結果應該類似於下面的結果
CMake 需要了解我們想要用來最終編譯專案的工具鏈。由於相同的工具鏈通常在不同的項目之間重複使用,因此建議在單獨的檔案中建立此部分以便於重複使用。這些是通用編譯器設置,不直接連結到專案本身。
可以使用一個簡單的.cmake
文件,然後在您的各個專案中重複使用。我在本教程中使用名稱cmake/gcc-arm-none-eabi.cmake
,以下是其範例:
。 -specs=nano.specs -Wl,--gc-sections")set(CPP_FLAGS "-fno-rtti -fno-exceptions -fno-threadsafe-statics")# 定義編譯器設定set(CMAKE_C_COMPILER ${TOOLININ_PREFIX}CHAgcc {FLAGS })設定(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER})設定(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++ ${FLAGS} ${CPP_FLAGS})設定(CMAKE_OBKE$D$ ECUTABLE_SU FFIX_ASM“。elf”)設定(CMAKE_EXECUTABLE_SUFFIX_C“.elf”)設定(CMAKE_EXECUTABLE_SUFFIX_CXX“.elf”)設定(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
在專案根目錄的cmake/
資料夾中建立一個檔案。
如果安裝了 CMake 螢光筆插件,VSCode 會很好地為您突出顯示 CMake 命令
工具鏈設定完成。您可以自由關閉文件並進入下一步。
我們需要建立主CMakeLists.txt
,也稱為根CMake 檔案。
確保您確實使用正確的大小寫字元將其命名為
CMakeLists.txt
。
我為您準備了簡單的範本文件,可以在將來的所有專案中重複使用。您只需要更改項目名稱、來源檔案、包含路徑等。
cmake_minimum_required(VERSION 3.22)# 設定編譯器設定set(CMAKE_C_STANDARD 11)set(CMAKE_C_STANDARD_REQUIRED ON)set(CMAKE_C_EXTENSIONS ON)set(CMAKE_CXX_STANDARD 20)(URAANDARD set(PROJ_PATH ${CM AKE_CURRENT_SOURCE_DIR})message ("建置type: " ${CMAKE_BUILD_TYPE})## 核心專案設定#project(your-project-name)enable_language(C CXX ASM)## 核心MCU 標誌、CPU、指令集和FPU 設定# 需要為您的MCU正確設定#設定(CPU_參數 -mthumb#使用的MCU需要注意正確設定-mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=硬 )# Set linker scriptset(linker_script_SRC ${PROJ_PATH}/path-to-linker-script.ld)set(EXECUTABLE ${CMAKE_PROJECT_NAME})## 要編譯的原始檔案清單#set(sources_SRCS# 將您的來源檔案放在這裡,其中一個在每一行中,相對於CMakeLists.txt 檔案位置)## 包含目錄#set(include_path_DIRS# 在此放置您的包含目錄,每行一個,相對於CMakeLists.txt 檔案位置)## 符號定義#set(symbols_SYMB# Put這裡是你的符號(預處理器定義的),每一行一個#出於安全目的用雙引號將它們封裝起來)#可執行檔add_executable(${EXECUTABLE} ${sources_SRCS}) #包含路徑target_include_directories(${EXECUTABLE} PRIVATE ${include_path_DIRS})#項目符號target_compile_definitions(${EXECUTABLE} PRIVATE ${symbols_SYMB})#編譯器選項 -維克斯特拉 -W迂腐的 -Wno-unused-parameter#完整調試配置-Og -g3 -ggdb )# 連結器選項target_link_options(${EXECUTABLE} PRIVATE-T${linker_script_SRC}${CPU_PARAMETERS}-Wl,-Map=${CMAKE_PROJECT_NAME}.map --specs=nosys.specs -u _printf_float # STDIO 浮點格式支援-Wl,--start-group LC -lm -lstdc++ -lsupc++ -Wl,--端基 -Wl,--列印記憶體使用情況 )# 執行建置後列印 sizeadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_SIZE} $<TARGET_FILE:${EXECUTABLE}> )# 將輸出轉換為十六進位和二進位add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.hexUTABLE}. )# 轉換為bin檔案 -> 新增條件檢查?add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}. )
原始檔與STM32CubeIDE專案中的相同。您可以檢查先前的圖像,其中以黃色突出顯示來源。
符號和包含路徑可以在STM32CubeIDE 的項目設定下找到。下面2
圖片展示了示範項目的情況。
Cortex-Mxx 設定需要特別注意,尤其是浮點設定。對於STM32H735xx
,設定應如下所示。
設定(CPU_參數 -mthumb -mcpu=cortex-m7 # 設定 Cortex-M CPU-mfpu=fpv5-d16 # 設定浮點類型 -mfloat-abi=hard # 硬體 ABI 模式)
設定的一般規則如下表所示
STM32家族 | -mcpu | -mfpu | -mfloat-abi |
---|---|---|---|
STM32F0 | cortex-m0 | Not used | soft |
STM32F1 | cortex-m3 | Not used | soft |
STM32F2 | cortex-m3 | Not used | soft |
STM32F3 | cortex-m4 | fpv4-sp-d16 | hard |
STM32F4 | cortex-m4 | fpv4-sp-d16 | hard |
STM32F7 SP | cortex-m7 | fpv5-sp-d16 | hard |
STM32F7 DP | cortex-m7 | fpv5-d16 | hard |
STM32G0 | cortex-m0plus | Not used | soft |
STM32C0 | cortex-m0plus | Not used | soft |
STM32G4 | cortex-m4 | fpv4-sp-d16 | hard |
STM32H5 | cortex-m33 | fpv5-sp-d16 | hard |
STM32H7 | cortex-m7 | fpv5-d16 | hard |
STM32L0 | cortex-m0plus | Not used | soft |
STM32L1 | cortex-m3 | Not used | soft |
STM32L4 | cortex-m4 | fpv4-sp-d16 | hard |
STM32L5 | cortex-m33 | fpv5-sp-d16 | hard |
STM32U0 | cortex-m0plus | Not used | soft |
STM32U5 | cortex-m33 | fpv5-sp-d16 | hard |
STM32WB | cortex-m4 | fpv4-sp-d16 | hard |
STM32WBA | cortex-m33 | fpv5-sp-d16 | hard |
STM32WL CM4 | cortex-m4 | Not used | soft |
STM32WL CM0 | cortex-m0plus | Not used | soft |
此表有潛在錯誤,未使用GCC 編譯器對所有行進行測試。對於
STM32F7
,請造訪STM32F7xx官方網站並檢查您的裝置是否具有單精確度或雙精確度FPU,然後套用相應的設定。產品列表並不詳盡。
設定來源檔案、包含路徑、MCU 核心設定和定義後的最終CMakeLists.txt
檔案:
cmake_minimum_required(VERSION 3.22)# 設定編譯器設定set(CMAKE_C_STANDARD 11)set(CMAKE_C_STANDARD_REQUIRED ON)set(CMAKE_C_EXTENSIONS ON)set(CMAKE_CXX_STANDARD 20)(URAANDARD set(PROJ_PATH ${CM AKE_CURRENT_SOURCE_DIR})message ("建置type: " ${CMAKE_BUILD_TYPE})## 核心專案設定#project(STM32H735G-DK-LED) # Modifiedenable_language(C CXX ASM)## 核心MCU 標誌、CPU、指令集和FPU 設定# 需要根據您的狀況正確設定MCU#set(CPU_PARAMETERS) -mthumb#使用的MCU需要注意正確設定-mcpu=cortex-m7 # Modified-mfpu=fpv5-d16 # Modified-mfloat-abi=hard # Modified)# 設定連結器腳本集(linker_script_SRC ${STMJ_PATH}/ Modified)# 設定連結器腳本集(linker_script_SRC ${STMJ_PATH}/32H735IGKX_FLASHASH. ld) # Modifiedset(EXECUTABLE ${CMAKE_PROJECT_NAME})## 要編譯的來源檔案清單#set(sources_SRCS # Modified${PROJ_PATH}/Core/Src/main.c${PROJ_PATH}/Core/Src/stm32h7xx_it.c${PROJ_PATH}/Core/Src/stm32h7xx_it.$ {PROJ_PATH}/Core/Src/syscalls.c${PROJ_PATH}/Core/Src/sysmem.c${PROJ_PATH}/Core/Src/system_stm32h7xx.c${PROJ_PATH}/Core/Startup/startup_stm32h7xx.c${PROJ_PATH}/Core/Startup/startup_stm32h7xx.c${PROJ_PATH}/Core/Startup/startup_stm32735 }/驅動程式/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_exti.c${PROJ_PATH}/驅動程式/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_gpio.c${PROJ_PSTMATH}/wrmll32 _PATH}/驅動程式/ STM32H7xx_HAL_Driver/Src/ stm32h7xx_ll_rcc.c${PROJ_PATH}/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_ll_utils.c )## 包含目錄#set(include_path_DIRS # 修改${PROJ_PATH}/Core/Inc${PROJ_PATH}/Drivers/STM32H7xx_HAL_Driver/Inc${PROJ_PATH}/Drivers/CMSIS/Device/ST/STM32H7${PROJ_PATH}/Drivers/CMSIS/Device/ST/STM32H7$/J.驅動程式/CMSIS/包含 )## 符號定義#set(symbols_SYMB # 修改"DEBUG""STM32H735xx""USE_FULL_LL_DRIVER""HSE_VALUE=25000000")# 可執行檔add_executable(${EXECUTABLELE} $dUTABLELE( PRIVATE ${ include_path_DIRS})# 項目符號target_compile_definitions(${EXECUTABLE} PRIVATE ${symbols_SYMB})# 編譯器選項選項_compile_options(${EXECUTABLE} PRIVATE${CPU_PARtarget_compile_options(${EXECUTABLE} PRIVATE${CPU_PARtarget_compile_options(${EXECUTABLE} PRIVATE${CPU_PARtarget_compile_options(${EXECUTABLE} PRIVATE${CPU_PARtarget_compile_options(${EXECUTABLE} PRIVATE${CPU_PARtarget_compile_options(${EXECUTABLE} PRIVATE${CPU_PARtarget_compile_options(${EXECUTABLE} PRIVATE${CPU_FPARtarget_S}- -維克斯特拉 -W迂腐的 -Wno-unused-parameter#完整調試配置-Og -g3 -ggdb )# 連結器選項target_link_options(${EXECUTABLE} PRIVATE-T${linker_script_SRC}${CPU_PARAMETERS}-Wl,-Map=${CMAKE_PROJECT_NAME}.map --specs=nosys.specs -u _printf_float # STDIO 浮點格式支援-Wl,--start-group LC -lm -lstdc++ -lsupc++ -Wl,--端基 -Wl,--列印記憶體使用情況 )# 執行建置後列印 sizeadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_SIZE} $<TARGET_FILE:${EXECUTABLE}> )# 將輸出轉換為十六進位和二進位add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.hexUTABLE}. )# 轉換為bin檔案 -> 新增條件檢查?add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}. )
在 VSCode 中,突出顯示,看起來像這樣
CMakePresets.json
是一個特殊文件,自 CMake 3.18
起可用,並提供使用者配置的定義,類似於 eclipse 中已知的偵錯和發布配置。擁有此文件允許開發人員在調試和發布模式之間快速更改,甚至在引導程式和主應用程式之間快速更改,這是嵌入式應用程式中的常見用例。
本教程不會重點介紹有關文件的詳細信息,而是提供的模板文件
文件描述:
每個建置配置的建置目錄的路徑
每個配置的預設建置類型( Debug , Release ,...)
.cmake工具鏈描述符的路徑
範本中為每個預設CMake配置配置了
4
預設
{“版本”:3,“配置預設”:[ {“名稱”:“預設”,“隱藏”:true,“生成器”:“Ninja”,“binaryDir”:“$ {sourceDir} / build / $ {presetName}”,“toolchainFile”:“$ {sourceDir } /cmake/gcc-arm-none-eabi.cmake","cacheVariables": {"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"} }, {“名稱”:“調試”,“繼承”:“預設”,“cacheVariables”:{“CMAKE_BUILD_TYPE”:“調試”} }, {“名稱”:“RelWithDebInfo”,“繼承”:“預設”,“cacheVariables”:{“CMAKE_BUILD_TYPE”:“RelWithDebInfo”} }, {“名稱”:“發布”,“繼承”:“預設”,“cacheVariables”:{“CMAKE_BUILD_TYPE”:“發布”} }, {“名稱”:“MinSizeRel”,“繼承”:“預設”,“cacheVariables”:{“CMAKE_BUILD_TYPE”:“MinSizeRel”} } ] }
templates/CMakePresets.json
中提供始終最新的文件
我們已經使用專案資訊配置了CMake ,現在準備執行 CMake 命令。
VSCode 隨附CMake 工具外掛 - CMake 指令的好幫手。安裝後,VSCode 活動視窗底部會提供多個選項
如您所見,沒有選擇配置預設。
如果您沒有看到此類訊息,請按
CTRl + ALT + P
並執行CMake: Quick Start
命令。
下一步是選擇目前預設。點擊“未選擇配置預設”以在頂部打開一個視窗並選擇您的預設。為了本教程,我選擇了調試。
選擇後,文字將變更為選定的預設標籤。
現在預設已激活,每次使用者修改CMakeLists.txt
檔案時,由於CMake-Tools擴展,VSCode 將自動呼叫建置產生命令來應用新的變更。
我們的專案已準備好建置和連結。除非 CMake 建置生成步驟失敗,否則我們應該準備好建置目錄來呼叫ninja 建置系統。
下一步是點擊“構建”按鈕 - 如綠色矩形所示。 CMake 將運行命令:
為選定的預設運行建置生成器
實際使用Ninja建置程式碼
如果建置良好,輸出的最後一步是列印不同部分的記憶體使用量。
結果,我們在build/<presetname>/
目錄中得到了一些輸出:
包含完整可執行資訊的project-name.elf
文件
project-name.hex
十六進位文件
project-name.bin
BIN 文件
project-name.map
地圖文件
在預設配置中,不會產生.hex
和.bin
文件,也不會顯示記憶體使用情況。我們準備的CMakeLists.txt
檔案包含POST_BUILD
選項,用於在成功建置後執行其他指令。程式碼已經在您的CMakeLists.txt
檔案中,因此無需執行任何操作,只需觀察即可。
它執行命令:
列印每個區域的已使用大小+最終可執行記憶體消耗
從可執行檔產生.hex
文件
從可執行檔產生.bin
文件
# 執行建置後列印 sizeadd_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_SIZE} $<TARGET_FILE:${EXECUTABLE}> )# 將輸出轉換為十六進位和二進位add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}.hexUTABLE}. )# 轉換為bin檔案 -> 新增條件檢查?add_custom_command(TARGET ${EXECUTABLE} POST_BUILDCOMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${EXECUTABLE}> ${EXECUTABLE}. )
要停用
.bin
檔案生成,只需刪除.bin
的POST_BUILD
行並重新生成 CMake 建置系統命令。當內部存在內部和外部快閃記憶體之間劃分時,產生.bin
檔案可能會產生負面影響。它可能會產生非常大的檔案(>= 2GB
),其中包含大量未使用的零。
在專案開發過程中需要記住一系列有用的指令:
建構變更
清潔工程
重新建置項目,先清理
快閃記憶體項目
它很容易忘記完整的語法,而是讓我們使用命令列表創建.vscode/tasks.json
文件,以便快速運行:
{“版本”:“2.0.0”,“任務”:[ {"type": "cppbuild","label": "建置專案","command": "cmake","args": ["--build", "${command:cmake.buildDirectory}", "- j", "8"],"選項": {"cwd": "${workspaceFolder}"},"problemMatcher": ["$gcc"],"group": {"kind": "build"," isDefault": true} }, {"type": "shell","label": "重新建置專案","command": "cmake","args": ["--build", "${command:cmake.buildDirectory}", " --clean-first", "-v", "-j", "8"],"options": {"cwd": "${workspaceFolder}"},"problemMatcher": ["$gcc"] , }, {"type": "shell","label": "清理專案","command": "cmake","args": ["--build", "${command:cmake.buildDirectory}", "- -target", "clean"],"options": {"cwd": "${workspaceFolder}"},"problemMatcher": [] }, {“type”:“shell”,“label”:“CubeProg:Flash專案(SWD)”,“command”:“STM32_Programmer_CLI”,“args”:[“--connect”,“port = swd”,“- -download", "${command:cmake.launchTargetPath}","-hardRst"],"options": {"cwd": "${workspaceFolder}"},"problemMatcher": [] }, {"type": "shell","label": "CubeProg: 具有已定義序號 (SWD) 的 Flash 專案 - 您必須先設定序號",