第 3 節

Linux

0瀏覽次數0訪問次數--跳出率--平均停留

環境介紹

本教程環境介紹:

  1. 系統:Fedora 43 KDE Edition Linux
  2. 系統內核:Linux 6.19.12-200.fc43.x86_64
  3. 架構: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插件使用,避免和默認環境衝突。

alt text

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

alt text

選中STM32

alt text

然後安裝一些插件

找到下面這個STM32CubeIDE for Visual Studio Code插件安裝

alt text

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

alt text

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

alt text

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

alt text

工程創建與測試

使用CubeMX創建工程

點擊進入單片機挑選的按鈕

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

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

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

FreeRTOS也要配置一下。

這些文件夾也要配置好,最後Toolchain選擇CMake,編譯器選擇GCC(6.14.1及之前沒有選擇編譯器這個選項很正常)

(但是CubeMX6.15.0有bug,這個選擇GCC編譯器並沒有用,還需要後續自己手動選擇編譯器,以後可能會修復這個bug.)

對工程進行配置與編譯

在工程文件夾打開終端

alt text

code .

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

alt text

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

alt text

一般選Debug即可

alt text

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

alt text

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

alt text

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

alt text

移植作者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工程的目錄裡。

alt text

然後打開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)

大功告成,編譯一次試試。可以看到下圖,那些新加的文件都編譯上了。

alt text

下載程序到板子

下載之前首先要先配置

ST-Link就不用配置了,直接開始debug就完事了。

而Jlink等是需要配置的。

配置調試器

無需任何配置

alt text

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

alt text

然後還要配置下launch:

問題解決方案:https://community.st.com/t5/stm32cubeide-for-visual-studio/stm32h7a3vg-debugging-with-j-link-under-vscode/m-p/826188#M960

.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應該是下圖所示:

alt text

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

alt text

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

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

alt text

音乐页