Wiki
進階使用教程(全平臺通用)
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
1.Run(執行程式)和Debug(除錯程式)?
1.1.選擇packs

出現STM32 STLink後,接著點回車Enter

搜尋對應的晶片的Packs並選中


1.2.(RUN)將程式下載到ST-Link中
點選RUN,然後在新彈出的視窗選擇對應的型號,比如我選擇STM32F103C8

可以看到下方的命令已經把程式燒寫進STM32了,然後STM32也正常工作了。


1.3.(DEBUG)除錯程式
打上三個斷點

extern "C"
void led_task(void const * argument)
{
for(;;)
{
static int a = 5;
bsp_led.LED_Toggle(); //实例化后调用对象翻转电平函数
osDelay(500);
a++;
}
}
點選Debug並選中型號

然後就可以進入Debug介面

點選開始按鈕

可以看到斷點被成功命中,且可以通過左邊視窗檢視a的值。

接著點選繼續。

下一個斷點也被命中了

接著點繼續,發現a的值變為了6,符合我們程式的執行。

這樣就可以正常debug了。
2.VScode標頭檔案配置
(這只是可以更好的編輯程式碼,這些標頭檔案並沒有被加入到編譯環境中)
2.1.C/C++外掛(不推薦)
如果有這種找不到標頭檔案的情況,配置一下VScode的C/C++外掛的Include Path即可。
但是由於該外掛需要同時配置編譯器,所以可能會出一些各種各樣的小問題。
而且該外掛對於大型專案會很卡,可以選擇直接看下方的clangd外掛教程。



在這裡多加一行../**
除了以上這種方式,也可以通過修改c_cpp_properties.json檔案進行。
輸入 "../**" (意思是將上一個目錄(工程根目錄)裡的所有檔案全部載入到Include Path中)
同時建議也把ARMCLANG的include檔案加入到這裡面 "/home/tungchiahui/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.21.0/include/"
每個人的目錄不同,但都是在使用者資料夾的.vcpkg隱藏資料夾下,可以自己找找。(下方的圖不完整,請根據上訪內容進行新增)

配置好之後,我們發現程式碼提示也正常了,雖然標頭檔案還是有可能會被VScode誤報錯說找不到,但是其實已經可以正常編譯了,也可以正常提示這些標頭檔案了。



2.2.Clangd外掛 (非常推薦)
- 優勢:由於clangd適合大型的cmake專案,在大型專案裡表現比C/C++外掛優秀太多,所以筆者與MDK6都建議用clangd的語言伺服器。

現在最新版MDK6自帶clangd外掛。
- Windows需要下載安裝一下LLVM (Linux一般不用管或者
sudo apt install llvm)
https://github.com/llvm/llvm-project/releases
我下載的是LLVM 18.1.8,中選擇Assets中選擇LLVM-18.1.8-win64.exe

這裡選擇這個選項Add LLVM to the system PATH for all users,其他無腦下一步即可。

可以開啟terminal測試一下是否安裝成功並配置好環境。
clang -v

- 現在來安裝clangd:
按住Ctrl shift P開啟搜尋框
輸入clangd 找到下載語言伺服器這一專案,點選安裝clangd(請保持良好的網路狀況)

- 接著配置clangd:
停用C/C++的程式碼提示功能

如果沒有上圖的彈窗,可以進行手動關閉,依然是ctrl shift P,輸入settings然後找到如下圖的選項

找到下圖這個選項,改成disabled即可。
"C_Cpp.intelliSenseEngine": "disabled"

新建一個settings.json檔案

修改裡面的內容,該內容是 cmake產生的compile_commands.json 檔案所在的路徑(路徑會隨MDK6版本更新而改變,請自己找檔案所在路徑)


接著找到armclang編譯器的include目錄,也新增進來,一般在使用者資料夾下的.vcpkg隱藏資料夾下。
(現在已經無需找了)

以下是Linux版本的settings.json示例
{
"clangd.arguments": [
"--compile-commands-dir=${workspaceFolder}/tmp/Template_Linux/TemplateLinux"
]
}
以下是Windows版本的settings.json示例
需要注意的是,Windows需要把磁碟機代號號變為小寫,比如C:/要改為c:/然後反斜杠\要改為斜杠/。
{
"clangd.arguments": [
"--compile-commands-dir=${workspaceFolder}/tmp/Template_Linux/TemplateLinux"
]
}
然後ctrl shift P搜尋clangd找到如下圖的選項

程式碼提示就正常啦

3.新增原始檔(對應Project Items)和標頭檔案(對應Include Path)到編譯環境中
3.1.常規方法(修改yaml檔案)
3.1.1.相關資料
新增原始檔需要使用yaml標記語言修改cproject.yml檔案。
官方為此提供了相關的更為詳細的資料文件:https://github.com/Open-CMSIS-Pack/cmsis-toolbox/blob/main/docs/YML-Input-Format.md#source-file-management


3.1.2.建立檔案(.c和.h)
我們這裡先在bsp中建立4個檔案分別放入到Src和Inc中。


3.1.3.新增標頭檔案路徑

將標頭檔案所在的目錄寫入

add-path:
- ../Core/Inc
- ../Drivers/STM32F1xx_HAL_Driver/Inc
- ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy
- ../Drivers/CMSIS/Device/ST/STM32F1xx/Include
- ../Drivers/CMSIS/Include
- ../bsp/boards/Inc
- ../applications/Inc
3.1.4.新增原始檔與分組

在這裡輸入group的名字和所需要新增的原始檔路徑(這裡因為applications裡無原始檔,所以我們註釋掉)

- group: bsp/boards
files:
- file: ../bsp/boards/Src/gpio_demo.cpp
- file: ../bsp/boards/Src/gpio_test.c
# - group: applications
# files:
原始檔和標頭檔案都已經成功匯入了,我們可以對檔案內容進行編寫,看其是否能通過編譯。
3.1.5.編寫檔案並編譯





可以看到日誌這幾行,顯示gpio_demo和gpio_test都成功被編譯了
[14/22] Building C object CMakeFiles/Template_Linux.dir/home/tungchiahui/user/Source/STM32_Projects/N1_F407ZGT6_GPIO_Test/bsp/boards/Src/gpio_test.o
[15/22] Building C object CMakeFiles/Template_Linux.dir/home/tungchiahui/user/Source/STM32_Projects/N1_F407ZGT6_GPIO_Test/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.o
[16/22] Building CXX object CMakeFiles/Template_Linux.dir/home/tungchiahui/user/Source/STM32_Projects/N1_F407ZGT6_GPIO_Test/bsp/boards/Src/gpio_demo.o
3.2.圖形化
3.2.1.簡介
由於ARM團隊比較給力,短短2個月就搞出來了圖形化操作,截止3月初已經更新。
ARM團隊更新了什麼圖形化功能,下方教程就會推遲幾天更新一下對應的內容。
3.2.2.新增原始檔

等待ARM公司更新功能中... ...