20251201
# STM32 專案 VSCode 開發流程
## 環境設置
安裝 [VSCode](https://code.visualstudio.com/) 並開啟
安裝中文套件

安裝 STM32 VSCode 套件

左側選單選擇 STM32CUBE
點擊啟動 STM32CubeMX 與 STMCUFinder
VSCode 找不到這兩個軟體時會跳出框
可直接點擊下載跳轉至官方下載頁面

下方點擊 System 的 Bundle 管理

全選並進行安裝更新

再次點擊啟動 STM32CubeMX
建立新專案

選擇使用的 STM32 晶片或版子
設定腳位功能、時鐘等
並在專案管理設定專案名稱、專案目錄
工具鏈與 IDE 設定為 CMake
並點擊生成程式

在 VSCode 開啟專案資料夾

CMake 選擇預設模式

通常先選 Debug
正式推出再生成 Release 二進制檔
開啟任一 C 檔案
安裝 C/C++ 套件

可隨時切換 CMake 模式

可新增 RelWithDebInfo 與 MinSizeRel 模式
修改 CMakePresets.json
```json
{
"version": 3,
"configurePresets": [
{
"name": "default",
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/${presetName}",
"toolchainFile": "${sourceDir}/cmake/gcc-arm-none-eabi.cmake",
"cacheVariables": {
}
},
{
"name": "Debug",
"inherits": "default",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "RelWithDebInfo",
"inherits": "default",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
}
},
{
"name": "Release",
"inherits": "default",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "MinSizeRel",
"inherits": "default",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "MinSizeRel"
}
}
],
"buildPresets": [
{
"name": "Debug",
"configurePreset": "Debug"
},
{
"name": "RelWithDebInfo",
"configurePreset": "RelWithDebInfo"
},
{
"name": "Release",
"configurePreset": "Release"
},
{
"name": "MinSizeRel",
"configurePreset": "MinSizeRel"
}
]
}
```
Debug 的方式

若要生成 bin 與 hex 檔案
在 CMakeLists.txt 最後新增
```CMake
find_program(ARM_OBJCOPY arm-none-eabi-objcopy REQUIRED)
set(ELF_FILE $<TARGET_FILE:${CMAKE_PROJECT_NAME}>) # CMake 會自動產生 .elf
set(BIN_FILE ${CMAKE_PROJECT_NAME}.bin)
set(HEX_FILE ${CMAKE_PROJECT_NAME}.hex)
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD
COMMAND ${ARM_OBJCOPY} -O binary ${ELF_FILE} ${BIN_FILE}
COMMAND ${ARM_OBJCOPY} -O ihex ${ELF_FILE} ${HEX_FILE}
COMMENT "Generating ${BIN_FILE} and ${HEX_FILE}"
)
set_property(TARGET ${CMAKE_PROJECT_NAME} APPEND PROPERTY
ADDITIONAL_CLEAN_FILES
${CMAKE_PROJECT_NAME}.bin
${CMAKE_PROJECT_NAME}.hex
)
```