Wiki
Linux
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
1.環境介紹
本教程環境介紹:
-
系統:Fedora 43 KDE Edition Linux
-
系統核心:Linux 6.19.12-200.fc43.x86_64
-
架構:X86_64(amd64)
其他Linux環境也可以。
2.安裝各種軟體與環境
2.1.安裝CubeMX

下載地址:
https://www.st.com.cn/zh/development-tools/stm32cubemx.html
推薦下載6.14.1版本(不要下載6.15.0,這個版本有bug,不知道後續何時會修復)


解壓出來

用root許可權開啟這個軟體SetupSTM32CubeMX-6.15.0
sudo ./SetupSTM32CubeMX-6.15.0

在新彈出的介面一直點下一步就行,安裝結束後出現如下圖就成功了。

/usr/local/STMicroelectronics/STM32Cube/STM32CubeMX進入這個資料夾,然後開啟終端輸入
./STM32CubeMX

點選Help

選Manage embedded software packages,把STM32F1,F4,H7的第一個最新的韌體勾上。

點install

登陸上賬號

然後等下載和安裝完

下載好就行了。
接下來可以把CubeMX應用配置一個桌面快捷方式等可以快速開啟,教程詳見Vinci機器人隊Linux入門教程的Appimage章節,可以用ctrl+F快速定位該章節。
桌面快捷方式如下:
[Desktop Entry]
Name=STM32CubeMX
Exec=/usr/local/STMicroelectronics/STM32Cube/STM32CubeMX/STM32CubeMX
Icon=/usr/local/STMicroelectronics/STM32Cube/STM32CubeMX/help/STM32CubeMX.png
Type=Application
Categories=Development;Electronics;Embedded;
Comment=STM32CubeMX configuration and code generation tool
Terminal=false
根據教程做,就可以實現這種效果啦。


2.2.安裝VScode
https://code.visualstudio.com/Download

如果是debian系下載deb,如果是rhel系下載rpm.
下載完之後,點選瀏覽器,找到這個安裝包的資料夾,並在該路徑開啟終端。

Debian系:輸入sudo apt install ./code然後按tab按鍵補齊檔名,回車。
RHEL系:輸入sudo dnf install ./code然後按tab按鍵補齊檔名,回車。
例如補齊後的:
sudo dnf install ./code-1.102.1-1752598767.el8.x86_64.rpm

然後開啟VScode,在終端輸入下面的命令
code

然後可以配置一個環境單獨給CubeIDE外掛使用,避免和預設環境衝突。

進行一些設定,按我的來就可以

選中STM32

然後安裝一些外掛

找到下面這個STM32CubeIDE for Visual Studio Code外掛安裝

右邊彈這個提示要選擇安裝(要有良好的科學網路)

緊接著會進行一些環境的安裝

也可以再安裝一些其他的外掛,比如Codex等外掛 這些看你自己啦

3.工程建立與測試
3.1.使用CubeMX建立工程
點選進入微控制器挑選的按鈕

搜尋對應晶片,並雙擊對應晶片選項。

進行一些配置,以下都是很基礎的東西,你在看這個影片前肯定都會了


隨便開一個IO用來測試,比如LED的GPIO


FreeRTOS也要配置一下。


這些資料夾也要配置好,最後Toolchain選擇CMake,編譯器選擇GCC(6.14.1及之前沒有選擇編譯器這個選項很正常)
(但是CubeMX6.15.0有bug,這個選擇GCC編譯器並沒有用,還需要後續自己手動選擇編譯器,以後可能會修復這個bug.)


3.2.對工程進行配置與編譯
在工程資料夾開啟終端

code .
開啟VScode後記得切到`STM32·的配置

選擇這裡的Yes進行配置CMake預設

一般選Debug即可

找個C語言的程式碼檔案開啟,然後右下角會提示安裝一個C/C++外掛,這個可以安裝也可以不安裝,他也帶程式碼提示,但是他的程式碼提示對比自帶的clangd簡直是弱爆了,如果你是新手,你不會設定程式碼提示,建議按我下面的操作來,直接別裝這個外掛。

你可以測試一下程式碼提示,是不是很強。

編譯的話,圖中的這倆build都可以

3.3.移植作者tungchiahui的標準C/C++工程模板
用git clone命令克隆倉庫:https://github.com/tungchiahui/STM32HAL_CMake_CPP_Template
git clone https://github.com/tungchiahui/STM32HAL_CMake_CPP_Template.git
把倉庫裡的 所有檔案與資料夾(除了.git以外) 複製到我們的STM32工程的目錄裡。

然後開啟applications資料夾,在Src和Inc資料夾分別建立led_task.cpp和led_task.h,內容分別如下:

led_task.cpp:
#include "led_task.h"
#include "cmsis_os.h"
#include "stm32f1xx_hal.h"
GPIO_PinState pinstate = GPIO_PIN_RESET;
extern "C"
void StartDefaultTask(void *argument)
{
for(;;)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,pinstate);
pinstate = (pinstate == GPIO_PIN_RESET) ? GPIO_PIN_SET : GPIO_PIN_RESET;
osDelay(500);
}
}
led_task.h:
#ifndef __LED_TASK_H_
#define __LED_TASK_H_
#ifdef __cplusplus
extern "C"
{
#endif
#include "cpp_interface.h"
#ifdef __cplusplus
}
#endif
#endif
然後開啟cmake/user資料夾下的CMakeLists.txt,把剛才新建的led_task.cpp新增上去。
詳細介紹(可以不看):這裡的cmake/stm32cubemx下的CMakeLists.txt是被CubeMX管理的,你重新用CubeMX生成新程式碼後,這個檔案裡的東西會被覆蓋。而工作區根目錄下的CMakeLists.txt是不會被重新覆蓋的,而且給我們留了一些區域加原始檔和標頭檔案,但是這樣會讓這個檔案太過於嘈雜。所以我們選擇新建一個user資料夾,然後在這裡面弄一個CMakeLists.txt,再用頂層CMakeLists.txt去載入這個子CMakeLists.txt,這個子CMakeLists.txt方便咱們修改,檔案結構也更加明顯。(這些都不需要咱們自己建立,我已經給建立到模板裡了,你在上面複製的時候已經複製過來了)
像下圖這樣加上cpp檔案。

然後要去最頂層的CMakeLists.txt里加上這句話來引用我們自己的CMakeLists.txt。

# Add USER generated sources
add_subdirectory(cmake/user)
大功告成,編譯一次試試。可以看到下圖,那些新加的檔案都編譯上了。

3.4.下載程式到板子
下載之前首先要先配置
ST-Link就不用配置了,直接開始debug就完事了。
而Jlink等是需要配置的。
3.4.1.配置偵錯程式
3.4.1.1.ST-Link
無需任何配置

3.4.1.2.JLink
先安裝jlink-gdbserver的bundle,如下圖所示:

然後還要配置下launch:
在.vscode資料夾下建立一個launch.json,然後輸入以下內容:
{
"version": "0.2.0",
"configurations": [
{
"type": "jlinkgdbtarget",
"request": "launch",
"name": "STM32Cube: STM32 Launch JLink GDB Server",
"origin": "snippet",
"cwd": "${workspaceFolder}",
"preBuild": "${command:st-stm32-ide-debug-launch.build}",
"runEntry": "main",
"imagesAndSymbols": [
{
"imageFileName": "${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}"
}
]
}
]
}
完事
3.4.2.進行除錯:(這裡linux可能會遇到一些usb許可權的問題,請自行解決)
如果你是STLink應該是下圖所示:

如果你是JLink應該是下圖所示:

然後會出現這個條,他會下載程式到板子

然後就成功下載了程式並進入了Debug
