Linux
環境介紹
本教程環境介紹:
- 系統:Fedora 43 KDE Edition Linux
- 系統內核:Linux 6.19.12-200.fc43.x86_64
- 架構:X86_64(amd64)
其他Linux環境也可以。
安裝各種軟件與環境
安裝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
根據教程做,就可以實現這種效果啦。


安裝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等插件 這些看你自己啦

工程創建與測試
使用CubeMX創建工程
點擊進入單片機挑選的按鈕

搜索對應芯片,並雙擊對應芯片選項。

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


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


FreeRTOS也要配置一下。


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


對工程進行配置與編譯
在工程文件夾打開終端

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

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

一般選Debug即可

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

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

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

移植作者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)
大功告成,編譯一次試試。可以看到下圖,那些新加的文件都編譯上了。

下載程序到板子
下載之前首先要先配置
ST-Link就不用配置了,直接開始debug就完事了。
而Jlink等是需要配置的。
配置調試器
ST-Link
無需任何配置

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}"
}
]
}
]
}
完事
進行調試:(這裏linux可能會遇到一些usb權限的問題,請自行解決)
如果你是STLink應該是下圖所示:

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

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

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