一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - C/C++ - 使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

2021-09-03 15:07Weyne C/C++

這篇文章主要介紹了使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

近兩年,微軟越來越擁抱開源支持跨平臺,win10搭載Linux子系統(tǒng),開源VSCode作為跨平臺編輯器,VS2017官方支持了Linux和嵌入式開發(fā)功能。

ST也是,近兩年開發(fā)的軟件工具基本都是跨平臺(基于Java)的,比如STM32CubeMX,MCUFinder,STM32CubeProgrammer等。17年年底收購了truestudio的開發(fā)公司-Atollic。這個(gè)公司的IDE就是基于Eclipse使用GNU套裝的。

官方都支持了,那我們有必要了解一下。要是好用,說不定就可以淘汰老舊的Keil了。

必要軟件

VSCode或者VS2017。

GNU ARM Embedded ToolchainJLink或者STLink

STM32CubeMX。這個(gè)一般開發(fā)STM32的都會裝。

使用思路

編譯就不說了,有makefile,有g(shù)cc就可以了。

調(diào)試的話,整體的流程圖如下:

使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

  • 前端 。這里VSCode和VS2017就是封裝了GDB的圖形前端,這樣我們使用GDB調(diào)試的時(shí)候就不需要再在命令行窗口敲指令了。
  • GDB Client。arm-none-eabi-gdb
  • GDB Server。JLink官方SEGGER提供了一個(gè)GDB server。STLink在github也有一個(gè)開源的項(xiàng)目。這里演示使用JLink。如果不嫌麻煩的話,也可以使用openOCD。
  • 調(diào)試器這里使用JLink,接口使用SWD。
  • 目標(biāo)板芯片型號為STM32F103RCT6

VS2017

這里使用VSCode舉例,但是VS2017實(shí)際上也是支持的,可以參考官方博客。這里本人做了一下嘗試,發(fā)現(xiàn)官方還未完善。文檔有多處錯(cuò)誤,所以暫不考慮。

使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

VSCode基本配置

這個(gè)現(xiàn)代化的編輯器,好處就不多說了,對比keil誰用誰知道,網(wǎng)上也能搜到一堆的關(guān)于它的介紹。

必要插件

C/C++為必要插件,否則無法調(diào)試。

建議安裝插件

  • crustify。用來格式化代碼, shift+alt+f,非常方便。缺點(diǎn)是代碼中有Unicode可能會導(dǎo)致亂碼,然后配置文件有點(diǎn)多。
  • Bracket Pair Colorizer。不同顏色高亮顯示匹配括號,愛護(hù)視力必備。
  • C/C++ Clang Command Adapter。用來補(bǔ)全和診斷,需要同時(shí)安裝Clang,參考官方文檔。

JLink安裝

安裝完成后,目錄下應(yīng)該有下列文件

使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

GNU ARM Embedded Toolchain安裝

下載后,安裝或者解壓即可。目錄下有一個(gè)bin的文件夾,可以看到有下列文件:

使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

安裝完成后,將bin文件夾路徑添加到環(huán)境變量。不過這不是必要的,只是方便在命令行中使用,在vscode中使用是不需要的。

使用cube生成代碼以及makefile

這里需要注意,cube的版本至少要是4.23.0。否則沒有生成makefile的選項(xiàng),這里使用4.24.0。在配置完成后,設(shè)置選項(xiàng)需要選擇Makefile,如下圖:

使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

點(diǎn)擊生成后文件目錄如下:

使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

在main.c中添加兩行閃燈的代碼:

 while (1)
 {
  HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
  HAL_Delay(500);
  Counter++;

 /* USER CODE END WHILE */
 /* USER CODE BEGIN 3 */

 }

至此,整個(gè)工程就搭建好了。

編譯

官方生成了makefile,那么只要執(zhí)行make就可以了。makefile的語法,網(wǎng)上可以找到很多的教程,這里不細(xì)說。

就目前的工程,想要make成功,改一句話即可使用,即指定gcc的路徑。我的路徑如下:

BINPATH = D:/GNU_ARM_TOOLS/2016q3_Version_5_6/bin

修改后,打開命令行,輸入make即可。如果,提示make不是內(nèi)部或者外部命令,那你還需要安裝GNU make,這個(gè)可自行搜索下載。

如果配置成功,應(yīng)該能看到下面的畫面:

使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

這樣,在build目錄下面可以找到blink.hex,blink.elf,blink.bin這幾個(gè)文件。至此,編譯成功。
其實(shí),即使不使用cube生成Makefile,我們也可以自己寫一個(gè),或者使用CMake。但是,使用官方的文件,會統(tǒng)一大家的程序結(jié)構(gòu),以后移植或者開源也更容易。

而且,官方的Makefile結(jié)構(gòu)比較清晰,熟悉Keil工程配置的人,其實(shí)很容易接受。

下載

可以使用JFlash直接燒錄

使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

如果沒什么問題的話,復(fù)位之后,目標(biāo)板的led應(yīng)該已經(jīng)開始閃爍了。

調(diào)試

這里是重點(diǎn)。

1.運(yùn)行GDB server

我這里是在windows平臺下,JLink提供的GDB server有一個(gè)圖形客戶端。Linux平臺下使用命令行版本,也是一樣的。

打開JLinkGDBServer.exe,配置連接好后,應(yīng)該看到下面的界面

使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

這個(gè)server一直開著就行,注意上面的端口號2331,后面要用到。

2.測試GDB

由于VSCode的配置文件中使用了較多的GDB指令,這里使用命令行先演示一下,方便理解,也剛好測試GDB是否正確安裝。

在命令行輸入arm-none-eabi-gdb,應(yīng)該看到如下畫面,否則你的GNU套裝沒安裝好,或者沒添加到環(huán)境變量

使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

繼續(xù)輸入下面的指令:

使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

此時(shí),應(yīng)該也看到led燈在閃爍了。

簡單解釋這幾個(gè)指令,詳細(xì)的可以自行搜索gdb的教程,或者查看GNU套件安裝目錄下的文檔。

  • target remote :2331 :連接到GDB server。
  • file : 載入目標(biāo)文件到gdb。
  • load : 下載文件到目標(biāo)板。
  • c : 運(yùn)行到下一個(gè)斷點(diǎn),如果沒有斷點(diǎn),會一直運(yùn)行
  • monitor reset : 傳遞命令reset給JLink GDB server。

monitor 后面的參數(shù)不是gdb的指令,而是gdb server的(這里就是JLink Server的),這里參考JLink的文檔(在安裝目錄下有),可以接受如下指令

使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

常用的也就是reset了。

3.配置VSCode調(diào)試

在vscode的窗口按下F5,彈出來的窗口選擇gdb

使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

官方給了默認(rèn)配置,需要修改成我們自己的。這里改動比較多,具體的配置參數(shù)需要參考兩個(gè)地方,一個(gè)是vscode的官網(wǎng)

,一個(gè)是cpp插件的github文檔

最終我們的配置如下:

{
  // 使用 IntelliSense 了解相關(guān)屬性。 
  // 懸停以查看現(xiàn)有屬性的描述。
  // 欲了解更多信息,請?jiān)L問: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [

    {
      "name": "blink Launch",
      "type": "cppdbg",
      "request": "launch",
      "targetArchitecture": "arm",//雖然官方說棄用了,但實(shí)際上必須指明
      "program": "blink", // 采用了自定義的設(shè)置,這里沒啥用了
      "args": [""],
      "stopAtEntry": true,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": true,
      "MIMode": "gdb",
      "miDebuggerPath": "D:/GNU_ARM_TOOLS/2016q3_Version_5_6/bin/arm-none-eabi-gdb.exe",
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ],
      "launchCompleteCommand": "None",
      "miDebuggerServerAddress": "localhost:2331",
      "customLaunchSetupCommands": [
        {
          "text": "target remote :2331",
          "description": "connect to server",
          "ignoreFailures": false
        },
        {
          "text": "file F:/STM32/led/blink/build/blink.elf",
          "description": "load file to gdb",
          "ignoreFailures": false
        },
        {
          "text": "load",
          "description": "download file to MCU",
          "ignoreFailures": false
        },
        {
          "text": "monitor reset",
          "description": "reset MCU",
          "ignoreFailures": false
        },
        {
          "text": "b main",
          "description": "set breakpoints at main",
          "ignoreFailures": false
        },
      ]
    }
  ]
}

再次按下F5后,效果如圖:

使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)

這個(gè)配置中,最重要的就是customLaunchSetupCommands中的設(shè)置,有了上面gdb再命令行的演示,就很容易理解了。

總結(jié)

這里只是搭建了一個(gè)最簡單的功能,使用上確實(shí)比Keil繁瑣很多,而且有些實(shí)用功能沒有實(shí)現(xiàn),比如說live watch,比如說查看寄存器內(nèi)容。如果有人專門針對VScode或者VS2017開發(fā)一個(gè)插件,那么最終的調(diào)試功能就和Keil一樣強(qiáng)大了。
加上VScode強(qiáng)大的編輯能力,那么Keil除了ARMCC還可以讓人留戀一下,其他部分就都可以拋棄了。

提升

想要在實(shí)際工程中使用vscode + GNU的組合,還需要提升幾部分:

  • makefile。需要增加更多功能,比如下載,比如分開release和debug等,比如增量編譯等。
  • 使用task。vscode的task功能是很強(qiáng)大的,不用浪費(fèi)。
  • 開發(fā)插件。如上所提,調(diào)試功能還是差keil不少。

在github上已經(jīng)有了一個(gè)插件的開源項(xiàng)目,實(shí)現(xiàn)了類似keil的部分功能,名字叫做cortex-debug,不過功能還不夠完善,先關(guān)注著。

到此這篇關(guān)于使用VSCode和VS2017編譯調(diào)試STM32程序的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)VSCode和VS2017編譯調(diào)試STM32內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://www.cnblogs.com/WeyneChen/p/8379214.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久综合色超碰人人 | 欧美亚洲桃花综合 | 第一次出血videos | 艾秋麻豆果冻传媒老狼仙踪林 | 欧美精品一区二区在线观看 | 5151hh四虎国产精品 | 国产91精品露脸国语对白 | 插得好爽| 亚洲欧美日韩综合一区久久 | 免费十几分视频 | 亚洲午夜精品久久久久久人妖 | 久久久伊人影院 | 2022天堂岛日产 | 爽爽影院免费观看 | 不卡日本 | 国产精品麻豆久久99 | 日本一区二区三区国产 | h黑寡妇一级毛片 | 99精品国产成人a∨免费看 | 亚洲小视频在线 | 免费观看一级特黄三大片视频 | 免费91麻豆精品国产自产在线观看 | 免费网站看v片在线成人国产系列 | 成年看片免费高清观看 | 很黄的网站在线观看 | 暖暖高清日本在线 | 男男视频18免费网站 | 亚洲精品国精品久久99热 | 清清草在线视频 | 日岳母小说 | 成年美女黄网站色视频大全免费 | 美女视频久久 | 大片毛片女女女女女女女 | 视频一区在线免费观看 | 日韩成人精品在线 | 久久综合香蕉久久久久久久 | 午夜爱情动作片P | 91香蕉国产 | 国产欧美一区二区精品性色 | 99在线精品免费视频九九视 | 午夜福到在线2019 |