小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

VSCode解決了Keil的一些痛點(diǎn)

 新用戶0118F7lQ 2022-10-21 發(fā)布于山東

眾所周知,Keil是一款收費(fèi)軟件,雖然可以Po解使用,但很多公司還是有點(diǎn)害怕,想必有不少讀者都收到過**函。

之前,開發(fā)單片機(jī)項(xiàng)目,可以說(shuō) Keil 是最佳選擇之一,但VSCode橫空問世之后,這種格局被打破。

因?yàn)?VSCode 免費(fèi)且好用,可以安裝各種插件,很多工程師逐漸從Keil 轉(zhuǎn)向了 VSCode。而且,VSCode還能實(shí)現(xiàn) Keil 不能實(shí)現(xiàn)的一些功能。

圖片

下面就給大家分享一下 VSCode 搭建 STM32 開發(fā)環(huán)境的一些常規(guī)且使用的功能。

一、需要的軟件和工具

  1. 下載最新版VS Code: 安裝好插件,具有良好的代碼補(bǔ)全與調(diào)試功能。
VS Code下載地址:https://code./
  1. 下載 LLVM:用于代碼補(bǔ)全,其實(shí)可以理解為 Clang。因?yàn)閂S Code 中“C/C++”插件的自動(dòng)補(bǔ)全功能不太好用。STM32中好多庫(kù)函數(shù)都補(bǔ)全不出來(lái)。記得按照好之后,將路徑添加到環(huán)境變量里。
LLVM下載地址:http://releases./download.html
  1. 下載安裝 Git for Windows: 提供Git支持和MINGW64指令終端。
Git下載地址:https:///
  1. 下載安裝 arm-none-eabi-gcc:選擇gcc-arm\-none-eabi-5\_4-2016q3-20160926-win32.exe (md5)這里是一個(gè)2016年的,我目前也是用的這個(gè),好像還有其他的新版的下載,GNU Arm Embedded Toolchain。正常安裝后,記得需要將軟件的安裝目錄下的bin文件夾設(shè)置進(jìn)入環(huán)境變量PATH中。
arm-none-eabi-gcc下載地址:https:///gcc-arm-embedded/+download
  1. 下載 OpenOCD for Windows:一個(gè)開源的片上調(diào)試器(Open On-Chip Debugger)。在Windows下自己編譯可能有問題 。所以,我們選擇編譯好的。下載后的文件不是安裝包,把程序文件夾放入自己的軟件安裝目錄下,將軟件的bin文件夾路徑加入用戶環(huán)境變量PATH中。
OpenOCD下載地址:http:///arm-eabi/openocd/
  1. STM32CubeMX:用于生成帶makefile的工程。這樣我們就可以不用自己寫MakeFile了。套用他的模板,然后修改為自己的目錄就可以。
STM32CubeMX鏈接:http://www./

二、搭建編譯環(huán)境

1. 用STM32Cube創(chuàng)建工程。

STM32CubeMX生成的是用HAL庫(kù)開發(fā)的項(xiàng)目,具體怎么配置這里就不介紹了,只介紹與主題有關(guān)的部分。
(1)STM32CubeMx芯片包(固件庫(kù))下載,注意事項(xiàng):

圖片

需要選擇help -> updater settings ->Connection Parameters設(shè)置好網(wǎng)絡(luò)后,才能下載固件包。
(2)生成工程。選擇MakeFile選項(xiàng)。
注意: 4.18.0以下的版本是沒有Makefile這個(gè)選項(xiàng)的。最后下載一個(gè)中間版本,因?yàn)?.0以上的版本界面很亂。我選擇的是 4.27.0.

圖片

2.配置VS Code

(1)打開工程所在的文件夾。在右鍵“用VS Code打開工程文件夾”,

圖片

你將會(huì)看到這樣的目錄結(jié)構(gòu)

圖片


.ioc文件是STM32Cube的工程文件,Inc和Src是供用戶修改的源碼,Driver里是STM32和ARM CMSIS的庫(kù),最好不要修改。
不過,如果你要采用標(biāo)準(zhǔn)庫(kù)開發(fā)的話,就修改為標(biāo)準(zhǔn)庫(kù)的Driver.

(2)安裝VS Code插件,需要這幾樣:

圖片圖片

(3)配置VS Code內(nèi)置終端

這里將我們上面安裝的 Git for Windows 設(shè)置為VScode 的內(nèi)置終端。
文件–首選項(xiàng)–設(shè)置,搜索terminal,設(shè)置內(nèi)置終端的Shell為Bash(安裝VS Code的時(shí)候它會(huì)推薦你安裝Git,里面有這個(gè)Bash)?;蛘叽蜷_ Settings.json添加下面兩句。
 
'terminal.integrated.shell.windows''D:\\Program Files\\Git\\bin\\bash.exe',
'terminal.external.windowsExec''D:\\Program Files\\Git\\bin\\bash.exe'
然后按Ctrl+` 就可以打開終端,看到Bash了

圖片

(4)配置智能補(bǔ)全、智能感知插件。

前面我們安裝了 LLVM 用它來(lái)實(shí)現(xiàn)智能補(bǔ)全,與糾錯(cuò),自然就需要一個(gè)路徑去尋找這些文件。因此我們需要一個(gè)。c\_cpp\_properties.json文件的配置文件。
我們?cè)诋?dāng)前目錄的.vscode文件夾下創(chuàng)建c\_cpp\_properties.json配置文件,用來(lái)告訴VS Code我們定義的宏與文件的路徑。
{
    'configurations': [
        {
            'name''Win32',
            'browse': {
                'path': [
                    '${workspaceFolder}/',
                    '${workspaceFolder}/Drivers/CMSIS',
                    '${workspaceFolder}/Drivers/FWlib/inc',
                    '${workspaceFolder}/Drivers/CMSIS/startup',
                    '${workspaceFolder}/User/inc',
                    '${workspaceFolder}/User',
                    '${workspaceFolder}/ThirdParty/crclib/include'
                ],
                'limitSymbolsToIncludedHeaders'true
            },
            'includePath': [
                '${workspaceFolder}/',
                '${workspaceFolder}/',
                '${workspaceFolder}/Drivers/CMSIS',
                '${workspaceFolder}/Drivers/FWlib/inc',
                '${workspaceFolder}/Drivers/CMSIS/startup',
                '${workspaceFolder}/User/inc',
                '${workspaceFolder}/User',
                '${workspaceFolder}/ThirdParty/crclib/include'
            ],
            'defines': [
                '_DEBUG',
                'UNICODE',
                '_UNICODE',
                '__CC_ARM',
                'USE_STDPERIPH_DRIVER',
                'STM32F10X_HD'
            ],
            'compilerPath''C:\\Program Files\\LLVM\\bin\\clang-format.exe',
            'cStandard''c11',
            'cppStandard''c++17',
            'intelliSenseMode''clang-x64'
        }
    ],
    'version'4
}
注意:如果提示variable “uint32\_t” is not a type name不是一個(gè)type類型。
則需要 添加宏定義\_\_CC\_ARM,如果沒有該宏定義,則uint32\_t類型會(huì)報(bào)錯(cuò)。并且結(jié)構(gòu)體中使用了uint32\_t定義的成員,也會(huì)補(bǔ)全不了。

(5)編譯程序

gcc下編譯過程如下圖所示:
  • .c文件 經(jīng)過 arm-none-eabi-gcc 編譯成 .o文件
  • .s文件 經(jīng)過 arm-none-eabi-as 編譯成 .o文件
  • .o文件 和 .a文件 經(jīng)過 arm-none-eabi-ld 鏈接成 .elf文件
  • .elf文件 經(jīng)過 arm-none-eabi-objcopyarm-none-eabi-objdump 轉(zhuǎn)換成 hex文件/dis文件
  • arm-none-eabi-gdb 使用 .elf文件 進(jìn)行debug
圖片
在Terminal下輸入make指令,即會(huì)開始build程序
圖片
編譯完成后,生成的所有文件都會(huì)放在Build文件夾下.

圖片


注意: 由于我安裝了 Qt. Qt中自帶了 mingw32-make.exe。我把這個(gè)文件復(fù)制了一份,重命名為make.exe。并且添加進(jìn)了環(huán)境變量中。因此我可以直接使用 make。
如果你沒有 make 的環(huán)境??梢韵螺d一個(gè)choco包管理器,它類似于linux下的apt,只不過是windows下使用的。然后用choco安裝make即可:

圖片

如果改了source code,需要重新編譯程序,那就得先執(zhí)行make clean指令去刪除之前build好的所有東西。然后重新執(zhí)行make指令即可。

三、搭建調(diào)試環(huán)境

1.配置openocd。

要運(yùn)行openocd這個(gè)gdb server,需要配置如下幾個(gè)參數(shù):
  • 用什么仿真器?(J-link, ST-link…)
  • 用什么接口?(JTAG, SWD…)
  • 目標(biāo)芯片是什么?(STM32F4x, tm4c123g…)
首先我們打開openocd的安裝目錄,打開share/openocd/scripts,里面有很多提前寫好的配置文件。

圖片


target里存放目標(biāo)芯片的配置文件,例如stm32f4.cfg
interface里存放仿真器相關(guān)的配置文件,例如jlink.cfg,stlink.cfg.
當(dāng)我們啟動(dòng)openocd時(shí),可以用-f參數(shù)來(lái)指定一個(gè)配置文件。例如:
 openocd –f interface/stlink.cfg –f target/stm32f4.cfg

【注】配置仿真器的參數(shù)必須在配置目標(biāo)MCU的參數(shù)之前,否則將報(bào)錯(cuò)。
如果我們不帶參數(shù)啟動(dòng),openocd就會(huì)自動(dòng)查找當(dāng)前目錄下有沒有名為openocd.cfg的文件,并把它作為配置文件來(lái)啟動(dòng)。因此,我們就在當(dāng)前工程下創(chuàng)建一個(gè)名為openocd.cfg的文件。
圖片
我們選擇使用ST-link,SWD接口,目標(biāo)芯片為stm32f1x。
(PS:這里注釋掉了SWD接口,如果采用Jlink 則需要SWD接口)。
這樣,我們連好板子上好電,直接在終端里敲openocd,即可啟動(dòng)。
圖片
openocd運(yùn)行時(shí),這個(gè)shell終端就被占用了,我們一會(huì)要新開一個(gè)終端。

2.用gdb連接上openocd

(1)直接啟動(dòng)gdb,參數(shù)為編譯好的調(diào)試文件(.elf)

圖片


(2)使gdb連接上openocd 前面已經(jīng)說(shuō)過openocd留給gdb的TCP/IP端口是3333,因此輸入:
target remote localhost:3333

圖片


注意,在連接openocd的時(shí)候,一定需要先運(yùn)行 openocd 服務(wù)才能通信上,否則一直出現(xiàn) taget remote 錯(cuò)誤。
(3)下載代碼.

圖片


后面就和普通的gdb一樣操作了,加斷點(diǎn),單步運(yùn)行什么的,網(wǎng)上可以搜到很多教程。
【注】 最后記得輸入q來(lái)退出gdb,以免影響后面的配置。

3.配置openocd任務(wù)與build任務(wù)

為了避免每次都在終端輸入 make 和 make clean ,與 openocd 。我們可以在VSCode 中,建立一個(gè) Task 來(lái)幫我們完成這個(gè)任務(wù),

(1)在當(dāng)前目錄下創(chuàng)建build.py的文件。

圖片

(2)在VSCode界面下,單擊“任務(wù)”,選擇“配置任務(wù)”

按 F1,選擇'配置任務(wù)' .vscode目錄下就會(huì)創(chuàng)建一個(gè)tasks.json配置文件.

圖片


打開 tasks.json ,修改內(nèi)容如下:

圖片


注意上面是兩個(gè)任務(wù),一個(gè)是openocd.用于連接st-link調(diào)試。一個(gè)是 build 用于編譯。
它相當(dāng)于是創(chuàng)建了一個(gè)名為build的任務(wù),任務(wù)的內(nèi)容是在shell里面執(zhí)行 python build.py這個(gè)命令。只是不用我們手動(dòng)輸入而已。

4.配置VS Code的調(diào)試功能

使用VS Code,肯定是圖方便,圖好看。所以我肯定不會(huì)讓大家靠敲命令來(lái)調(diào)試,這樣豈不是開倒車,還不如用keil。因此,這里要配置VS Code的調(diào)試功能,相當(dāng)于對(duì)gdb的一個(gè)圖形化吧。
在VS Code內(nèi)選擇debug(就是左邊那個(gè)蟲子圖標(biāo)),選擇“添加配置”,類型為GDB。就會(huì)在.vscode文件夾下生成launch.json配置文件。
按照下面來(lái)配置:
{
    'version''0.2.0',
    'configurations': [

        {
            'name''ARM Debug',
            'type''cppdbg',
            'request''launch',
            'program''${workspaceFolder}/Build/STM32F103RC_Template.elf',
            'args': [],
            'stopAtEntry'false,
            'cwd''${workspaceFolder}',
            'environment': [],
            'externalConsole'false
            'MIMode''gdb',
            'miDebuggerPath''C:\\Program Files (x86)\\GNU Tools ARM Embedded\\5.4 2016q3\\bin\\arm-none-eabi-gdb.exe',
            'targetArchitecture''arm'
            'setupCommands': [
                {
                    'description''選擇調(diào)試文件(.elf)到gdb',
                    'text''file E:/VScode/STM32_VSCode/stm32f103_temp/Build/STM32F103RC_Template.elf',
                    'ignoreFailures'false
                },
                {
                    'description''連接GDB Server',
                    'text''target remote localhost:3333',                                 
                    'ignoreFailures'false
                },
                {
                    'description''Reset MCU',
                    'text''monitor reset',                                              
                    'ignoreFailures'false
                },
                {
                    'description''Halt',
                    'text''monitor halt',                                                  
                    'ignoreFailures'false
                },
                {
                    'description':'下載代碼到MCU',
                    'text''load' ,              
                    'ignoreFailures'false                                      
                }
            ],
            'preLaunchTask''build'
        }
    ]
}
可以看到,setupCommands里面就是我們之前試用gdb時(shí)操作過的流程:連接GDB Server——reset——halt——下載代碼。
而preLaunchTask中是我們之前在tasks.json中配置的build任務(wù)。它可以讓我們每次調(diào)試時(shí)都先編譯一遍。
保存后,隨便打幾個(gè)斷點(diǎn),按下F5,就可以快樂調(diào)試了。可以看到功能還是很齊全的。

圖片


【注意】:在進(jìn)行調(diào)試的時(shí)候,需要先 按 F1 --> 任務(wù):運(yùn)行任務(wù)里選擇 openocd 任務(wù)運(yùn)行。

圖片


因?yàn)檎{(diào)試,需要連接st-link進(jìn)行調(diào)試,而openocd任務(wù)是開啟st-link的服務(wù)。這樣客戶端才能連接上。
否則會(huì)一直出現(xiàn) target remote localhost:3333 的錯(cuò)誤。

看到這里,基本就差不多了,開發(fā)STM32完全沒問題了。
來(lái)源:
https://blog.csdn.net/qq_33559992/article/details/97548915

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多