单片机开发IDE环境如KeilMDK,虽然操作简单
、デバッグを容易にするため。しかし、コード編集スタイルは非常に時代遅れで、文字化けした中国語記号は依然としてよく見られます。そして現在、人気の vscode エディターは非常に優れており、無料で非常に軽量で、コード開発エクスペリエンスは非常に優れており、快適に見えます。Clion IDE はエクスペリエンスが優れていますが、無料ではなく、サイズも大きくなります。Stm32cubeIDE は、プロジェクト テンプレートの生成と設定が簡単ですが、自動補完がまだ不十分で、一言で言えば、それぞれに長所と短所があります。
序文
ここでは、STM32 の開発とデバッグ用の IDE を構築し、必要な友人と共有するための Vscode の概要を紹介します。
Zhihui Jun の Clion ベースのプロジェクトと同様に、これらはすべて Cmake ベースのプロジェクトです。実際、チップが STM32 か RISC-V かに限定されません。openocd オンライン デバッグを使用します)。
Vscode にも EIDE プラグインがありますが、個人的には少し面倒に感じており、Cmake の方が汎用的です。Vscode で STM32 を開発するのはあまりクールではありませんが、誰もがスムーズに組み込みシステムを開発できることを願っています。写真はZhihui Jun 著「STM32 開発用の CLion の構成 [エレガントな組み込み開発]」から引用
【ノート】
現在普及している RISC-V MCU では、クロスコンパイル ツールチェーンが存在する限り、vscode をコンフィギュレーションと開発に使用することもできます。RISC-V で正式にサポートされているデバッガのホスト コンピュータは openocd です。openocd は、サーフェス上で最も強力な (他に類を見ない) オープン ソース デバッグ ホスト コンピューターであり、さまざまなターゲット (ARM (M、A シリーズ)、FPGA、RISC-V など) およびさまざまなデバッガー (Jlink、CMSIS-DAP、 FTDI など) は、JTAG および SWD インターフェイスをサポートします。
環境整備
ソフトウェア環境
- STM32CubeMX (必須ではありません。利点は、迅速な構成に役立つことです。プロジェクト テンプレートがある場合は無視できます)
- VScode (関連するプラグイン cmakeTools、cortexDebug をインストール)
- MinGW64 (Windows 環境の gcc ツールチェーン)
- OpenOCD (または jlinkGdbServer も機能します)
- gcc-arm-none-eabi (arm の gcc クロス編集ツールチェーン。インストール後に環境変数に追加する必要があります)
使用されているリソースへのリンク
ST公式Webサイトから実行可能ファイルを直接ダウンロード
- MinGW 【https://sourceforge.net/projects/mingw-w64/files/】
- Cmake 【ダウンロード | CMake】
- STM32CubeMX【STM32CubeMX - STM32Cube 初期化コードジェネレーター - STMicroelectronics】
- arm-none-eabi-gcc 【https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads】
- OpenOCD 【https://gnutoolchains.com/arm-eabi/openocd/】
上記のCMake、MinGW64、arm-none-eabi-gcc、OpenOCDが必要なソフトウェアです。インストール パスには漢字やスペースが含まれないことが望ましいです。これらのコマンド行が cmd で正常に実行できるように環境変数を構成します。
海外の Web サイトのダウンロード速度が遅い場合があります。私が使用しているツール チェーンの Baidu ネットワーク ディスクのアドレスは次のとおりです。
链接:https://pan.baidu.com/s/1NCQykQ57Xh6PFe28TU_GGw?pwd=goyj
提取码:goyj
--来自百度网盘超级会员V5的分享
環境変数を構成した後、再起動して環境変数を有効にした後、次のステートメントを使用してコマンド ラインでテストできます。
gcc -v
arm-none-eabi-gcc -v
cmake --version
情報が出力されていればインストールされています。
建設プロジェクトに手間をかけずに、できるだけ早く体験したい場合は、私のテンプレートを直接使用できます。
プロジェクトのソース コードのダウンロード リンクが添付されており、vscode で直接開くことができます。
https://download.csdn.net/download/qq8864/8785579
Vscodeプラグインのインストール
Vscode は次のプラグインをダウンロードしてインストールする必要があります。最初のスクリーンショットの赤い線のみが必要です。
cmake スクリプトの内容
cmake の構成とコンパイル ルールは CMakeLists.txt ファイルに基づいています。CMake に精通している場合は、これが非常に便利で強力であることがわかるはずです。慣れていなくても大丈夫です. 基本的には何も変更する必要はありません. ソース コード ディレクトリのパスを追加し、このファイルにフォルダーを含める方法を知っておくだけで済みます. このファイルはほとんど変更されません.
#THIS FILE IS AUTO GENERATED FROM THE TEMPLATE! DO NOT CHANGE!
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)
cmake_minimum_required(VERSION 3.20)
# specify cross compilers and tools
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
set(CMAKE_AR arm-none-eabi-ar)
set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
set(CMAKE_OBJDUMP arm-none-eabi-objdump)
set(SIZE arm-none-eabi-size)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
# project settings
project(vscodeSTM32Demo C CXX ASM)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 11)
#Uncomment for hardware floating point
#add_compile_definitions(ARM_MATH_CM4;ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING)
#add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
#add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
#Uncomment for software floating point
#add_compile_options(-mfloat-abi=soft)
add_compile_options(-mcpu=cortex-m3 -mthumb -mthumb-interwork)
add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0)
# uncomment to mitigate c++17 absolute addresses warnings
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-register")
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
message(STATUS "Maximum optimization for speed")
add_compile_options(-Ofast)
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
message(STATUS "Maximum optimization for speed, debug info included")
add_compile_options(-Ofast -g)
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel")
message(STATUS "Maximum optimization for size")
add_compile_options(-Os)
else ()
message(STATUS "Minimal optimization, debug info included")
add_compile_options(-Og -g)
endif ()
add_definitions(-DUSE_HAL_DRIVER -DSTM32F103xB -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD)
include_directories(./STM32F10x_FWLib/inc ./include)
file(GLOB_RECURSE SOURCES "startup/*.*" STM32F10x_FWLib/src/*.c "./source/*.c")
set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/STM32F103C8Tx_FLASH.ld)
add_link_options(-Wl,-gc-sections,--print-memory-usage,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map)
add_link_options(-mcpu=cortex-m3 -mthumb -mthumb-interwork)
add_link_options(-T ${LINKER_SCRIPT})
add_link_options(-specs=nano.specs -specs=nosys.specs -u _printf_float)
add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT})
set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)
add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${PROJECT_NAME}.elf> ${HEX_FILE}
COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${PROJECT_NAME}.elf> ${BIN_FILE}
COMMENT "Building ${HEX_FILE}
Building ${BIN_FILE}")
エンジニアリング構成
STM32CubeMX は実際には必要ありません。CMake スクリプトと起動 *.s ファイルを設定するだけで済みます。これらは STM32CubeMX によって生成され、同じボードをコピーして直接使用することもできます。その中で、STM32F103C8Tx_FLASH.ld ファイルはリンク スクリプト ファイルであり、非常に重要です。フィルムの種類が異なると、関連するコンパイルされた実行可能コード、メモリ変数、割り込みベクトル、およびどの記憶領域 (.text、 . RAM および ROM 内の Rodata、.data、.bss などのセクションの場所とレイアウト)。
使い方
初期プロジェクトのエンジニアリング コードは、STM32Cubmx 構成を使用して生成することも、他の場所からコピーすることも、自分で手動でディレクトリを作成することもできます。アセンブリファイルstartup_stm32f103xb.sとリンカスクリプトファイルが必要です。CMakeLists.txt ファイルも必要です。自分で作成することも、書かれたテンプレートを使用することもできます。この記事には既製のテンプレート ファイルが用意されています。これらを使用すると、HAL ライブラリを使用するか標準ライブラリを使用するかは関係なく、どのライブラリを使用するかは関係ありません。
上記のソフトウェア環境とプラグインがインストールされていることを前提として、Vscode でプロジェクトのソースフォルダー (CMakeLists.txt があるフォルダー) を直接開くことができます。cmakeのプロジェクト構成が自動認識され、下部に関連項目が表示されます。以下の図の赤い線で示されているように、
次の図に示すように、下部のステータス バーにある構成アイコン ボタンを選択して、ツールチェーンを切り替えます。
コンパイル処理ログ
[main] Configuring project: vscodeSTM32Demo
[proc] Executing command: "D:\Program Files\CMake\bin\cmake.EXE" --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo -DCMAKE_C_COMPILER:FILEPATH=C:\tools\arm-gcc\bin\arm-none-eabi-gcc.exe -DCMAKE_CXX_COMPILER:FILEPATH=C:\tools\arm-gcc\bin\arm-none-eabi-g++.exe -SD:/Users/Administrator/Desktop/test3/vscodeSTM32Demo -Bd:/Users/Administrator/Desktop/test3/vscodeSTM32Demo/build -G Ninja
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Maximum optimization for speed, debug info included
[cmake] -- Configuring done
[cmake] -- Generating done
[cmake] -- Build files have been written to: D:/Users/Administrator/Desktop/test3/vscodeSTM32Demo/build
[main] Building folder: vscodeSTM32Demo
[build] Starting build
[proc] Executing command: "D:\Program Files\CMake\bin\cmake.EXE" --build d:/Users/Administrator/Desktop/test3/vscodeSTM32Demo/build --config RelWithDebInfo --target all --
[build] [14/29 3% :: 0.202] Building C object CMakeFiles/vscodeSTM32Demo.elf.dir/source/main.c.obj
[build] [15/29 6% :: 0.222] Building C object CMakeFiles/vscodeSTM32Demo.elf.dir/STM32F10x_FWLib/src/core_cm3.c.obj
[build] [16/29 10% :: 0.265] Building C object CMakeFiles/vscodeSTM32Demo.elf.dir/source/printf_uart.c.obj
[build] [17/29 13% :: 0.297] Building C object CMakeFiles/vscodeSTM32Demo.elf.dir/STM32F10x_FWLib/src/stm32f10x_bkp.c.obj
[build] [18/29 17% :: 0.310] Building C object CMakeFiles/vscodeSTM32Demo.elf.dir/STM32F10x_FWLib/src/misc.c.obj
[build] [19/29 20% :: 0.325] Building C object CMakeFiles/vscodeSTM32Demo.elf.dir/STM32F10x_FWLib/src/stm32f10x_cec.c.obj
[build] [20/29 24% :: 0.339] Building C object CMakeFiles/vscodeSTM32Demo.elf.dir/STM32F10x_FWLib/src/stm32f10x_dbgmcu.c.obj
[build] [21/29 27% :: 0.355] Building C object CMakeFiles/vscodeSTM32Demo.elf.dir/STM32F10x_FWLib/src/stm32f10x_dac.c.obj
コンパイルのスクリーンショット:
プログラムの書き込みとオンライン デバッグ
書き込む前に、エミュレータ設定ファイルを追加する必要があります。以下はDAP-linkの書き込みファイルです。手持ちのダウンローダーのパラメータに従って変更し、xxxlink.cfgの形式で保存し、それを配置します。プロジェクトディレクトリ内の config フォルダー内
# choose st-link/j-link/dap-link etc.
source [find interface/cmsis-dap.cfg]
transport select swd
# 0x10000 = 64K Flash Size
# 0x80000 = 512K Flash Size
set FLASH_SIZE 0x80000
source [find target/stm32f1x.cfg]
# download speed = 10MHz
adapter speed 10000
reset_config srst_only
#reset_config none
プロジェクトのルート ディレクトリに新しいフォルダーを作成しconfig
、その中に新しい構成ファイルを作成しますdaplink.cfg
(ここではエミュレーターとして DapLink を使用しているため)。ファイルの内容は次のとおりです。
# choose st-link/j-link/dap-link etc.
adapter driver cmsis-dap
transport select swd
# 0x10000 = 64K Flash Size
set FLASH_SIZE 0x20000
source [find target/stm32f1x.cfg]
# download speed = 10MHz
adapter speed 10000
ST-Link を使用する場合:
# choose st-link/j-link/dap-link etc.
#adapter driver cmsis-dap
#transport select swd
source [find interface/stlink.cfg]
transport select hla_swd
source [find target/stm32f1x.cfg]
# download speed = 10MHz
adapter speed 10000
最初の 2 行はエミュレータのタイプとインターフェイスを設定し、次の行はフラッシュ サイズ、チップ タイプ、ダウンロード速度などを指定します。
チップのセットアップ方法がわからない場合は、OpenOCD に付属する一連の構成ファイルを参照できます。パスは OpenOCD インストール ディレクトリの下にありますshare\openocd\scripts
。
reset_config srst_only
この文を設定ファイルに追加しないでください。ダウンロードが失敗します。この文はシステムに再起動を指示するものであり、削除してもダウンロードには影響しません。
ISPシリアルプログラミングプログラム
インサーキットエミュレーションのデバッグが必要ない場合は、これで終了です。生成された 16 進数ファイルは、シリアル ポート ツールを直接使用してプログラムをダウンロードできます。FlyMcuツールソフトウェアは、STM32チップISPシリアルポートプログラミング用のツールで、無料で、比較的使いやすく、使いやすく便利です。シリアル ポートを使用したワンキー ダウンロードには前提条件があります。つまり、回路基板に RS シリアル ポート スイッチング回路が必要であり、その中には DTR とRTSが必要です。目的は、ワンキー ダウンロードの準備をすることです。 STM チップをシリアル ポート プログラミング プログラムに誘導するための原理は、DTR および RTS を通じてブート ピンの変更を制御し、チップをブート アップグレード モードに移行させることです。
ツールのダウンロード アドレス: MCU オンライン プログラミング ネットワーク: www.mcuisp.com MCU オンライン プログラミング ネットワーク
エミュレータ ダウンローダー
ターミナルにコマンド openocd -f Interface/stlink-v2.cfg -f target/stm32f4x.cfg -c "program build/VSCodeF4.hex verify reverse exit" を入力して、プログラムをダウンロードします。
Keil のようなデバッグを VSCode に実装するには、デバッグ ファイルを構成し、左側のデバッグ ボタンをクリックする必要があります。launch.json ファイルの作成を選択します。[C++(GDB/LLDB)] を選択し、デフォルトの構成を選択します。
Cortex デバッグを選択: OpenOcd
プロジェクトのルート ディレクトリの .vscode フォルダーにある launch.json を編集し、次の内容 (configFiles および svdFile 構成) を追加します。elf ファイルを生成するには、実行可能ファイルのパスを実際のパスに変更する必要があります。
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"cwd": "${workspaceRoot}",
"executable": "./bin/executable.elf",
"name": "Debug with OpenOCD",
"request": "launch",
"type": "cortex-debug",
"servertype": "openocd",
"configFiles": [
"stlink-v2.cfg",
"stm32f4x.cfg"
],
"searchDir": [],
"runToEntryPoint": "main",
"showDevDebugOutput": "none",
"svdFile": "./STM32F40x.svd"
}
]
}
OpenOCDについて
上記の IDE の手順からわかるように、OpenOCD は gdb とハードウェア デバッガーを接続するツールであり、Linux、MacOS、および Windows で利用できます。OpenOCD は、stm32 で一般的に使用される stlink および jlink デバッガーなど、多数のハードウェア デバッガーをサポートしています。OpenOCD は、PC 上で動作するオープン ソースのデバッグ ソフトウェアで、元々は Dominic Rath が大学在学中 (2005 年) に開発したものです。OpenOCD は、組み込みデバイスにデバッグ、システム プログラミング、バウンダリ スキャン機能を提供するように設計されています。
SVD ファイルはシングルチップのレジスタ ファイルです。このファイルを追加するだけで、デバッグ中にレジスタの値を確認できます。プログラム内のレジスタの変更を確認するポイントをブレークすることで、レジスタ値の変化を確認できます。価値。stm32 マイクロコントローラーの svd ファイルは、keil のチップ パッケージ インストール パスの下にあります。(キールとチップパッケージをインストールした後にのみ見つかります)
デバッグ インターフェイスを実行します。
これで終わりです。ご質問がございましたら、お気軽にお問い合わせください。最後に、vscode を使用して楽しく開発できるようになり、楽しく開発できるようになります。
その他のリソース
組み込み開発: STM32 開発用の CLion の構成_clion stm32_Hua Zi のブログ-CSDN ブログ
組み込み IDE OpenOCD の原理と stlink が stm32 ボードに接続する方法の紹介 - プログラマーが求めた
STM32 開発用に CLion を構成する [標準ライブラリ] - プログラマー募集
STM32 を開発するために VS Code を構成する [ユニバース & 最強のエディタ] - 電子工学ワールド
STM32CubeMX - STM32Cube 初期化コード ジェネレーター - STMicroelectronics
vscode-armgcc-openocd は STM32 開発およびデバッグ環境を構築します_vscode のデバッグ stm32_フルスタックロードに関する Nick のブログ
MinGW-w64 - 32 ビットおよび 64 ビット Windows 用 - SourceForge.net でファイルを参照
STM32開発用にCLionを構成する【エレガントの組み込み開発】 bzdww
vscode openOCD Jlink のダウンロードとデバッグ STM32 チュートリアルを構成する - グレー レター ネットワーク (ソフトウェア開発ブログの集合体)
RISC-V MCU ld リンク スクリプトの説明_at > flash_Borrowing Landscape Blog-CSDN Blog
RISCV SOC 開発環境 4 - コードのデバッグ (openocd + gdb) - プログラマー募集
OpenOCD フラッシュ コード構造の解析 (RISCV ベース)_openocd ソース コード解析_ys1115 のブログ - CSDN ブログ
RISC-V デバッグ ソフトウェア openOCD のインストールと構成 - RISC-V テクノロジー フォーラム - 電子テクノロジー フォーラム - 人気の専門電子フォーラム!
RISC-V デバッグの簡単な説明_51CTO ブログ_dpdk の簡単な説明
非常に使いやすいプラグイン - EIDE、VSCODE で ARM プロジェクトをすばやく作成_Uncle Wheat のブログ - CSDN ブログ