最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vscode搭建STM32開發(fā)環(huán)境的詳細過程

 更新時間:2021年05月02日 09:16:00   作者:頂點元  
這篇文章主要介紹了vscode搭建STM32開發(fā)環(huán)境的詳細過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

需要安裝的軟件

 vscode

必裝插件:

  • C/C++:用于提供高亮顯示和代碼補全
  • Cortex-Debug:用于提供調(diào)試配置

make

make工具可以直接下載xPack項目提供的windows-build-tools工具里面帶了make工具。

Release xPack Windows Build Tools v4.2.1-2 · xpack-dev-tools/windows-build-tools-xpack (github.com)

openocd

arm-none-eabi

stm32CubeMX

上述軟件具體的安裝教程網(wǎng)上有很多詳細的介紹資料,這里就不詳細介紹了。需要注意的是記得將make,openocd,arm-none-eabi等可執(zhí)行程序的路徑添加到環(huán)境變量中

以下章節(jié)的內(nèi)容都是根據(jù)stm32CubeMX生成的vscode_stm32f411 Makefile工程為例子來進行講解的。

配置開發(fā)環(huán)境

實際上就是打造代碼的編輯環(huán)境,實現(xiàn)類似于keil中編輯代碼和代碼補全等功能。在通過vscode打開vscode_stm32f411文件夾后,其實已經(jīng)具備了編輯和代碼補全功能(前提是必裝的插件已經(jīng)安裝好),只是會有很多報錯的波浪線,這時候便需配置c_cpp_properties.json文件來解決源文件的各種報錯提示:

如果提示**uint32_t是未定義的類型**在defines下添加__GNUC__

c_cpp_properties.json文件:

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE",
                "USE_HAL_DRIVER", //
                "STM32F411xE", //
                "__GNUC__" //
            ],
            // "compilerPath": "C:\\Program Files\\LLVM\\bin\\clang.exe",
            "compilerPath": "C:/Program Files (x86)/GNU Tools Arm Embedded/7 2018-q2-update/bin/arm-none-eabi-gcc.exe",
            "cStandard": "c17",
            "cppStandard": "c++14",
            // "intelliSenseMode": "windows-clang-x64"
            "intelliSenseMode": "gcc-arm"
        }
    ],
    "version": 4
}

配置編譯下載功能

新建task.json文件

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "make",
            "args": [
              "-j4"
            ],
            "group": { //group用于將當前任務設置為默認的build任務,可以直接通過Ctrl+Shift+B直接執(zhí)行
              "kind": "build",
              "isDefault": true
            },
            "problemMatcher":[
              "$gcc"
            ]
        },
        {
          "label": "clean",
          "type": "shell",
          "command": "make",
          "args": [
            "clean"
          ]
        },
        {
            "label": "flash - ST-Link", //用于執(zhí)行makefile文件中實現(xiàn)的下載指令
            "type": "shell",
            "command": "make flash",
            "problemMatcher": []
        },
        {
          "label": "download", //下載并運行
          "type": "shell",
          "command": "openocd",
          "args": [
            "-f",
            "interface/stlink-v2.cfg",
            "-f",
            "target/stm32f4x.cfg",
            "-c",
            "program build/vscode_stm32f411.elf verify reset exit" //TODO:這里的下載文件的路徑不能夠用${workspaceFolder}來指定
          ],
          "dependsOn":"build", //download任務的依賴任務,即download任務執(zhí)行前會先執(zhí)行build任務
        },
        {
          "label": "reset", //復位程序
          "type": "shell",
          "command":"openocd",
          "args": [
            "-f",
            "interface/stlink-v2.cfg",
            "-f",
            "target/stm32f4x.cfg",
            "-c init",
            "-c reset",
            "-c exit",
          ],
          "problemMatcher": []
        },
        {
          "label": "halt", //掛起程序
          "type": "shell",
          "command":"openocd",
          "args": [
            "-f",
            "interface/stlink-v2.cfg",
            "-f",
            "target/stm32f4x.cfg",
            "-c init",
            "-c halt",
            "-c exit",
          ],
          "problemMatcher": []
        },
        {
          "label": "run", //運行程序
          "type": "shell",
          "command":"openocd",
          "args": [
            "-f",
            "interface/stlink-v2.cfg",
            "-f",
            "target/stm32f4x.cfg",
            "-c init",
            "-c resume",
            "-c exit",
          ],
          "problemMatcher": []
        },
    ]
}

build任務用于編譯工程(實質(zhì)上是執(zhí)行makefile文件 make)

clean任務用于清除編譯生成的中間文件(實質(zhì)是執(zhí)行makefile文件中的 make clean)

flash - ST-Link任務用于下載代碼到STM32芯片中,這里需要在makefile中添加flash偽目標,偽目標flash實現(xiàn)如下:

#flash the stm32
OPENOCD := openocd -f interface/stlink-v2.cfg -f target/stm32f4x_stlink.cfg
FIRMWARE = $(BUILD_DIR)/vscode_stm32f411.elf

flash:
	$(OPENOCD) -c init \
		-c 'reset halt' \
		-c 'flash write_image erase $(FIRMWARE)' \
		-c 'reset run' \
		-c exit

download任務用于下載代碼到STM32芯片中,這里是完全在tasks.json文件中實現(xiàn)的(通過openocd實現(xiàn)下載目標文件)

reset任務用于復位目標板程序

halt任務用于掛起目標板程序

run任務用于運行掛起的目標程序

配置調(diào)試功能

添加launch.json文件配置調(diào)試環(huán)境

{
    // 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": [  
        {
            "name": "Cortex Debug",
            "cwd": "${workspaceRoot}",
            "executable": "${workspaceRoot}/build/vscode_stm32f411.elf",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "openocd",
            "device": "STM32F411xx",
            "interface": "swd",
            "configFiles": [
                "${workspaceRoot}/openocd.cfg"
            ],
            "runToMain": true,
            "showDevDebugTimestamps": true,
            "svdFile": "${workspaceRoot}/STM32F411xx.svd", //需要查看外設寄存器的值必須指定該svd文件
        }
    ]
}

工作空間目錄下添加openocd.cfg文件,文件內(nèi)容如下:

source [find interface/stlink-v2.cfg]

source [find target/stm32f4x_stlink.cfg]

到此出已經(jīng)可以執(zhí)行F5經(jīng)行調(diào)試了。

注意:這里必須執(zhí)行make指令后才能進行調(diào)試,否則不能夠正常調(diào)試

​ 為了確保每次執(zhí)行調(diào)試時工程都是最新編譯過的,可以在launch.json文件中添加"preLaunchTask": "build"的配置。preLaunchTask表示調(diào)試前執(zhí)行的任務,build是指task.json文件中標簽為build的任務(注意launch.json文件中的任務名字必須和task.json文件中的標簽名一致)。

​ 為了確保每次調(diào)試結(jié)束后目標板上的程序還能繼續(xù)運行,可以在launch.json文件中添加"postDebugTask": "run"的配置,這樣可以在調(diào)試結(jié)束后執(zhí)行task.json文件中的run任務以確保目標板上的程序還能繼續(xù)運行。

完整的launch.json文件如下:

{
    // 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": [  
        {
            "name": "Cortex Debug",
            "cwd": "${workspaceRoot}",
            "executable": "${workspaceRoot}/build/vscode_stm32f411.elf",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "openocd", //要選擇的GDB server
            // "device": "STM32F411xx", //
            "interface": "swd",
            "configFiles": [
                // "${workspaceRoot}/openocd.cfg"
                "interface/stlink-v2.cfg",
                "target/stm32f4x.cfg"
            ],
            "runToMain": true,
            "showDevDebugTimestamps": true,
            "svdFile": "${workspaceRoot}/STM32F411xx.svd",
            "preLaunchTask": "build", //調(diào)試之前運行的任務(調(diào)試之前一定要確保工程被編譯過)
            "postDebugTask": "run", //調(diào)試結(jié)束后運行程序,沒有的化會導致程序調(diào)試結(jié)束后處于掛起狀態(tài)
        }
    ]
}

細心的同學可能會注意到,這里的launch.json文件和上面的該文件在configFiles位置處也有一些區(qū)別:

采用這里的這種寫法可以不用在工作文件夾目錄下新建openocd.cfg文件,不過這種方式在命令行中直接輸入openocd便會報錯。

小知識點:在終端中啟動openocd時,會自動在當前目錄下尋找openocd.cfg的文件作為配置文件

到此這篇關于vscode搭建STM32開發(fā)環(huán)境的詳細過程的文章就介紹到這了,更多相關vscode搭建STM32開發(fā)環(huán)境內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 深入理解C++的動態(tài)綁定與靜態(tài)綁定的應用詳解

    深入理解C++的動態(tài)綁定與靜態(tài)綁定的應用詳解

    本篇文章是對C++中的動態(tài)綁定與靜態(tài)綁定進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言控制臺打磚塊小游戲

    C語言控制臺打磚塊小游戲

    這篇文章主要為大家詳細介紹了C語言控制臺打磚塊小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++臨時性對象的生命周期詳細解析

    C++臨時性對象的生命周期詳細解析

    臨時性對象的被摧毀,應該是對完整表達式(full-expression)求值過程中的最后一個步驟。該完整表達式造成臨時對象的產(chǎn)生
    2013-09-09
  • 基于MFC實現(xiàn)單個文檔的文件讀寫

    基于MFC實現(xiàn)單個文檔的文件讀寫

    這篇文章主要為大家詳細介紹了如何基于MFC實現(xiàn)單個文檔的文件讀寫功能,文中的示例代碼講解詳細,對我們學習有一定幫助,感興趣的可以了解一下
    2022-07-07
  • C++學習筆記之淺談異常處理

    C++學習筆記之淺談異常處理

    C++ 提供了異常機制,讓我們能夠捕獲運行時錯誤,本文就詳細的介紹了C++異常處理入門,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C語言樹狀數(shù)組的實例詳解

    C語言樹狀數(shù)組的實例詳解

    這篇文章主要介紹了C語言樹狀數(shù)組的實例詳解的相關資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • 詳解C語言中的字符串數(shù)組

    詳解C語言中的字符串數(shù)組

    這篇文章主要介紹了C語言中的字符串數(shù)組,本文通過示例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • C語言手把手教你實現(xiàn)貪吃蛇AI(上)

    C語言手把手教你實現(xiàn)貪吃蛇AI(上)

    這篇文章主要介紹了C語言手把手教你實現(xiàn)貪吃蛇AI,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C語言內(nèi)存的動態(tài)分配比較malloc和realloc的區(qū)別

    C語言內(nèi)存的動態(tài)分配比較malloc和realloc的區(qū)別

    這篇文章主要介紹了C語言內(nèi)存的動態(tài)分配比較malloc和realloc的區(qū)別,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是本文的詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 詳解C++11中模板的優(yōu)化問題

    詳解C++11中模板的優(yōu)化問題

    這篇文章主要介紹了C++11中模板的優(yōu)化問題,通過實例代碼得出結(jié)論,當所有模板參數(shù)都有默認參數(shù)時,函數(shù)模板的調(diào)用如同一個普通函數(shù),具體示例代碼跟隨小編一起看看吧
    2021-09-09

最新評論

循化| 梁河县| 柳河县| 正定县| 凤庆县| 浮梁县| 南汇区| 京山县| 当阳市| 济源市| 临颍县| 永定县| 鱼台县| 开远市| 林甸县| 阿克苏市| 昌乐县| 北京市| 酒泉市| 石河子市| 墨竹工卡县| 岑巩县| 济源市| 武城县| 奎屯市| 浦东新区| 泸水县| 济阳县| 循化| 和田市| 庄浪县| 通州市| 祁连县| 东至县| 开封市| 武汉市| 桓台县| 连州市| 弥渡县| 彭水| 松原市|