傻瓜式教程:如何使用“多合一”開發(fā)工具STM32CubeIDE
工欲善其事,必先利其器。
STM32Cube生態(tài)系統(tǒng)是ST為STM32開發(fā)者打造的軟件生態(tài),是嵌入式開發(fā)的利器。
為提升功能豐富且高能效的STM32系列微控制器的易用性,2019年,意法半導(dǎo)體在STM32Cube軟件生態(tài)系統(tǒng)中增加了一個(gè)免費(fèi)的多功能STM32開發(fā)工具:STM32CubeIDE。

為了和商用集成開發(fā)環(huán)境(IDE)工具一樣好用,STM32CubeIDE充分發(fā)揮了意法半導(dǎo)體2017年收購的嵌入式開發(fā)工具廠商Atollic?的技術(shù)優(yōu)勢(shì)。這套IDE軟件采用行業(yè)標(biāo)準(zhǔn)的開放式許可條款,為簡化和加快基于STM32的嵌入式設(shè)計(jì),新增了STM32專用功能,包括功能強(qiáng)大的STM32CubeMX微控制器配置和項(xiàng)目管理工具。
通過整合STM32CubeMX與STM32CubeIDE,意法半導(dǎo)體創(chuàng)建了一個(gè)更強(qiáng)大的開發(fā)環(huán)境。STM32Cube的完整生態(tài)系統(tǒng)還包含STM32CubeProgrammer的代碼燒寫器和STM32CubeMonitor系列的代碼運(yùn)行監(jiān)控器,以及眾多獨(dú)立的MCU固件包。
STM32CubeIDE是ST官方提供的免費(fèi)軟件開發(fā)工具,也是STM32Cube生態(tài)系統(tǒng)的一員大將。它基于Eclipse?/CDT框架,GCC編譯工具鏈和GDB調(diào)試工具,支持添加第三方功能插件。同時(shí),STM32CubeIDE還集成了部分STM32CubeMX和STM32CubeProgrammer的功能,是一個(gè) “多合一”的STM32開發(fā)工具。

用戶只需要STM32CubeIDE這一個(gè)工具,就可以完成從芯片選型,項(xiàng)目配置,代碼生成,到代碼編輯,編譯,調(diào)試和燒錄的所有工作。
在開發(fā)的過程中,用戶也可以非常方便地切換到內(nèi)嵌的CubeMX初始化窗口,添加或者修改之前的外設(shè)和中間件配置。不需要在多個(gè)工具之間進(jìn)行切換。
STM32CubeIDE提供的編譯和堆棧分析工具為用戶提供了關(guān)于項(xiàng)目狀態(tài)和內(nèi)存使用的有用信息。還提供了很多高級(jí)的調(diào)試功能幫助用戶進(jìn)行高效地調(diào)試。
跟 STM32CubeMX,STM32CubeProgrammer 一樣,它也是一個(gè)多平臺(tái)的STM32開發(fā)工具,用戶可以在Windows,Linux和macOS操作系統(tǒng)上通過STM32CubeIDE進(jìn)行軟件開發(fā)。
STM32CubeIDE界面
STM32CubeIDE 是基于 Eclipse 的框架,它繼承了 Eclipse 所特有的一些對(duì)用戶來說還不太熟悉的特性,比如透視圖,工作空間等。
工作空間(Workspace):STM32CubeIDE通過工作空間(workspace)對(duì)工程進(jìn)行管理,打開STM32Cube時(shí),它會(huì)新建一個(gè)默認(rèn)的工作空間,用戶也可以通過Browse按鈕另外選擇一個(gè)文件夾作為工作空間,之后新建或者導(dǎo)入的工程就都屬于前面選擇的這個(gè)工作空間。同一個(gè)工作空間下的工程具有相同的IDE層面的配置(在Window→Preferences中進(jìn)行設(shè)置),比如顯示和編輯的風(fēng)格設(shè)置等。從文件系統(tǒng)的角度,工作空間就是一個(gè)文件夾,里面包含了多個(gè)工程的文件夾和一個(gè)名為“.metadata”的文件夾,“.metadata”文件夾下包含了該工作空間內(nèi)的所有工程的信息。用戶可以通過File→Switch Workspace菜單,切換不同的工作空間。
透視圖(Perspective):透視圖是一系列和某類功能相關(guān)的窗口的組合。常用的有C/C++編輯透視圖,調(diào)試透視圖和CubeMX配置透視圖。

C/C++編輯透視圖包括了項(xiàng)目管理器,編輯窗口,Outline窗口等。在項(xiàng)目管理器中可以查看和操作當(dāng)前工作空間中的所有項(xiàng)目。雙擊打開項(xiàng)目中的文件,文件內(nèi)容會(huì)顯示在編輯窗口,在編輯窗口可以對(duì)其進(jìn)行編輯。最右邊的Outline窗口列出了當(dāng)前打開的文件中定義的所有函數(shù),變量和宏。
在Window Show View菜單中可以打開和關(guān)閉需要顯示在C/C++編輯透視圖中的窗口。
通過右上方的圖標(biāo)可以在不同的透視圖之間切換,比如點(diǎn)擊爬蟲圖標(biāo),就可以切換到調(diào)試透視圖。在C/C++編輯透視圖下點(diǎn)擊工具欄的Debug按鈕啟動(dòng)調(diào)試后,也會(huì)自動(dòng)切換到調(diào)試透視圖。

工程管理
11. 新建和導(dǎo)入工程
使用STM32CubeIDE,用戶可以通過多種方法來開始新建一個(gè)項(xiàng)目。在STM32CubeIDE的歡迎界面上,列出了創(chuàng)建/導(dǎo)入工程的快捷入口,分別對(duì)應(yīng)下面的四種場(chǎng)景。也可以通過File菜單下的New和Import實(shí)現(xiàn)對(duì)應(yīng)的功能。
??????? ??從零開始新建一個(gè)STM32工程
??????? ??已有STM32CubeMX的配置文件(*.ioc文件 ),希望根據(jù)該ioc文件新建一個(gè)STM32工程
??????? ??已有SW4STM32或者TrueSTUDIO工程,希望轉(zhuǎn)換成STM32CubeIDE工程
??????? ??基于STM32Cube庫中的例程創(chuàng)建新工程

2 STM32CubeIDE工程結(jié)構(gòu)
STM32CubeIDE有兩種工程結(jié)構(gòu),如下圖所示。

單核的MCU都是扁平結(jié)構(gòu)。
對(duì)于雙核架構(gòu)的MCU或者安全MCU,比如STM32H7,STM32L5和STM32MP1系列,STM32CubeIDE工程是分層結(jié)構(gòu)。以STM32H7為例,創(chuàng)建或者導(dǎo)入STM32H7工程后,在Project Explorer欄看到的是一個(gè)三層的工程結(jié)構(gòu):最上面一層是“根”工程,然后是兩個(gè)分別對(duì)應(yīng)CM7和CM4內(nèi)核的“子”工程,“子”工程下面才是工程文件。這兩個(gè)CM7和CM4“子”工程才是真正的可編譯和調(diào)試的工程,而“根”工程只是作為一個(gè)“容器”,包含了CM7和CM4這兩個(gè)“子”工程。AN5361,AN5394,AN5360和AN5564分別描述了在STM32CubeIDE中如何創(chuàng)建,導(dǎo)入,編譯和調(diào)試STM32H7雙核,STM32L5,STM32MP1以及STM32WL的工程。
3 打開/關(guān)閉/刪除/切換/導(dǎo)出STM32CubeIDE工程
在Project Explorer窗口中可以看到當(dāng)前工作空間下的所有工程。用戶可以對(duì)這里面的任一工程進(jìn)行打開/關(guān)閉/刪除/導(dǎo)入/導(dǎo)出/更名等操作。
具體請(qǐng)參考“工程的基本操作”(馬上推出,敬請(qǐng)期待)。
4固件庫管理
STM32CubeIDE集成了STM32CubeMX的部分功能,可以直接選擇芯片/開發(fā)板型號(hào),或者選擇例程來生成一個(gè)新工程。STM32CubeIDE生成工程所需要的驅(qū)動(dòng)和例程代碼都來自各個(gè)STM32系列的固件庫。?
在Help→Manage Embedded Software Packages里,可以對(duì)所有的STM32固件庫以及其他的插件進(jìn)行管理(安裝/刪除固件庫)。
用戶可以通過Install Now按鈕讓STM32CubeIDE自動(dòng)從網(wǎng)絡(luò)進(jìn)行下載安裝,也可以通過From Local按鈕來安裝已經(jīng)預(yù)先下載好的固件庫。
通過Remove Now按鈕可以刪除選中的固件庫。

在Window Preferences窗口的STM32Cube Firmware Updater標(biāo)簽頁下,可以設(shè)置固件庫安裝的路徑和更新的方式。

默認(rèn)STM3CubeIDE在打開和新建工程的時(shí)候,都會(huì)嘗試連接網(wǎng)絡(luò)。用戶也可以選擇“Off Line Mode”,不讓STM32CubeIDE去聯(lián)網(wǎng)。但是需要通過上一張圖中Embedded Software Packages Manager窗口的From Local按鈕來安裝已經(jīng)預(yù)先下載好的固件庫,否則將不能自動(dòng)為新建的STM32工程生成代碼。
點(diǎn)擊Check Connection按鈕可以檢測(cè)當(dāng)前的網(wǎng)絡(luò)連接狀態(tài)。檢測(cè)結(jié)束如果出現(xiàn)一個(gè)紅色的×,則說明網(wǎng)絡(luò)配置有問題,需要我們到Network Connection頁面去進(jìn)行設(shè)置。
除了前面主動(dòng)檢測(cè)網(wǎng)絡(luò)狀態(tài),如果出現(xiàn)固件下載失敗的情況,也請(qǐng)檢查STM32CubeIDE的網(wǎng)絡(luò)配置是否正確。
配置步驟見下圖:
1.進(jìn)入 Window Preferences菜單,選擇General Network Connections標(biāo)簽頁
2.選擇 Manual方式
3.選擇HTTP,雙擊打開編輯窗口,設(shè)置網(wǎng)絡(luò)連接參數(shù)。

代碼編輯
STM32CubeIDE基于Eclipse,Eclipse的一些常用快捷鍵和編輯技巧一樣適用于STM32CubeIDE。熟練掌握這些小技巧可以提高開發(fā)效率,使得程序開發(fā)的工作事半功倍。
代碼編譯
1工程屬性設(shè)置及編譯
在Project Explorer中選中一個(gè)工程,點(diǎn)擊右鍵后進(jìn)入properties菜單,在其中就可以對(duì)編譯項(xiàng)進(jìn)行配置。常用配置的操作細(xì)節(jié),請(qǐng)查看“STM32CubeIDE工程屬性配置技巧”。
配置完成之后就可以進(jìn)行編譯了。用戶可以通過下面三種方式啟動(dòng)編譯:
??方法一:選中工程,點(diǎn)擊右鍵,然后選擇“Build Project”
??方法二:選中工程,從Project菜單進(jìn)入,然后選擇“Build Project”
??方法三:選中工程,直接點(diǎn)擊工具欄里的Build圖標(biāo)?

2提高編譯速度
通過使能并行編譯,可以提高STM32CubeIDE的編譯速度。
選中工程,點(diǎn)擊右鍵后進(jìn)入properties菜單,選擇“C/C++ Build”,在Behavior標(biāo)簽頁下,勾選“Enable parallel build”功能。

3編譯相關(guān)輔助工具
工程編譯完成以后,在“Build Analyzer”窗口可以看到鏈接文件中定義的所有內(nèi)存區(qū)域(memory region)和段(section)的使用情況,包括加載地址,運(yùn)行地址,有多少字節(jié)已經(jīng)被占用,還剩余多少字節(jié)等。
在“Static Stack Analyzer”窗口中顯示了靜態(tài)堆棧的使用情況。
STM32CubeIDE還提供了Headless Build功能,可以不打開CubeIDE的圖形界面,通過命令行就可以進(jìn)行編譯。

代碼調(diào)試及燒錄
1調(diào)試及運(yùn)行配置
STM32CubeIDE工程編譯完成且無任何錯(cuò)誤,就可以進(jìn)行調(diào)試和下載了。
在C/C++透視圖的工具欄中有三個(gè)和下載調(diào)試相關(guān)的按鈕:調(diào)試,運(yùn)行和外部工具。
通過“調(diào)試”按鈕旁邊的小三角,可以打開Debug Configurations菜單,進(jìn)行調(diào)試參數(shù)的配置,比如調(diào)試器的選擇,GDB連接的設(shè)置,ST-LINK的設(shè)置,外部Flash Loader的設(shè)定等,并啟動(dòng)調(diào)試。
通過“運(yùn)行”按鈕,可以僅下載程序不啟動(dòng)調(diào)試。
通過“外部工具”按鈕,可以調(diào)用外部的命令行工具。
有關(guān)調(diào)試參數(shù)配置及調(diào)試技巧的內(nèi)容,請(qǐng)參考“STM32CubeIDE工程調(diào)試配置及技巧”(馬上推出,敬請(qǐng)期待)。

2啟動(dòng)調(diào)試
STM32CubeIDE使用GDB進(jìn)行調(diào)試,支持STLink和SEGGER J-Link調(diào)試器,支持通過SWD或JTAG接口連接目標(biāo)MCU。
STM32CubeIDE工程編譯完成之后,直接點(diǎn)擊工具欄的爬蟲圖標(biāo)或者通過選擇菜單Run-->Debug,可以啟動(dòng)調(diào)試。
如果是第一次對(duì)當(dāng)前工程進(jìn)行調(diào)試,STM32CubeIDE會(huì)先編譯工程,然后打開調(diào)試配置窗口。調(diào)試配置窗口包含:調(diào)試接口的選擇,STLink的設(shè)置,復(fù)位設(shè)置和外部flash loader的設(shè)置等選項(xiàng),用戶可以檢查或者修改各項(xiàng)配置。確認(rèn)所有的配置都正確無誤,就可以點(diǎn)擊OK,啟動(dòng)調(diào)試。
然后STM32CubeIDE會(huì)先將程序下載到MCU,然后從鏈接文件(*.ld)中指定的程序入口開始執(zhí)行。程序默認(rèn)從Reset_Handler開始執(zhí)行,并暫停在main函數(shù)的第一行,等待接下來的調(diào)試指令。

3基本調(diào)試操作
啟動(dòng)調(diào)試后,STM32CubeIDE將自動(dòng)切換到調(diào)試透視圖,在調(diào)試透視圖的工具欄中,列出了調(diào)試操作按鈕。如下圖所示。

插件的使用
STM32CubeIDE同樣支持Eclipse插件。
可以通過Help菜單下的“Eclipse Marketplace”,在Eclipse市場(chǎng)中查找并安裝插件;
或者通過Help菜單下的“Install New Software”,從指定的網(wǎng)址安裝插件。

STM32CubeIDE使用例程
下面我們通過一個(gè)LED閃燈的例程,來體驗(yàn)一下使用STM32CubeIDE進(jìn)行軟件開發(fā)的流程。
例程使用NUCLEO-H743ZI開發(fā)板,通過STM32CubeIDE從零開始新建工程。該工程就實(shí)現(xiàn)一個(gè)簡單的功能:板載的LED1以500ms的間隔自動(dòng)翻轉(zhuǎn)。
通過這個(gè)例程,可以了解到以下內(nèi)容:
??新建一個(gè)STM32CubeIDE工程
??對(duì)STM32芯片進(jìn)行配置
??添加用戶代碼并編譯
??設(shè)置調(diào)試參數(shù)
??調(diào)試代碼(查看變量及寄存器)
??設(shè)置斷點(diǎn)
首先,選擇File-->New-->STM32 Project,STM32CubeIDE會(huì)打開MCU選擇窗口。在這個(gè)窗口下,可以選擇某個(gè)型號(hào)的芯片,也可以選擇某個(gè)ST開發(fā)板或者例程。這里我們?cè)谒阉骺蚶镙斎隨TM32H743ZI,就可以直接選擇這個(gè)芯片了,然后點(diǎn)擊Next。

在接下來彈出的窗口中,需要設(shè)置項(xiàng)目的名稱,類型和工程保存的位置。默認(rèn)情況下,新建的工程會(huì)保存在當(dāng)前的workspace中,用戶也可以按下圖所示,取消“Use default location”,然后自定義工程保存的位置。需要注意的是,如果你試圖將兩個(gè)工程放在同一個(gè)路徑下,在后面的創(chuàng)建過程中可能會(huì)報(bào)錯(cuò)。所以你可以在路徑中加上工程名,以區(qū)別不同的工程。
設(shè)置完成后,點(diǎn)擊Finish,STM32CubeIDE將為我們創(chuàng)建一個(gè)工程,并打開芯片的配置界面,這個(gè)界面和STM32CubeMX是一樣的。
期間可能會(huì)彈出將要打開CubeMX配置透視圖的提示,點(diǎn)擊Yes就可以了。

接下來要做的是,在芯片配置界面,按功能需求對(duì)時(shí)鐘,GPIO,外設(shè),中間件等進(jìn)行配置。在這個(gè)例程中,我們只用到了PB0,作為輸出控制LED1,所以只需要配置它就可以了。時(shí)鐘就使用默認(rèn)配置。
在Pinout視圖下,通過搜索欄,可以在快速在芯片封裝圖上找到要配置的引腳。
選擇該引腳,點(diǎn)擊右鍵,選擇GPIO_Output功能。
然后轉(zhuǎn)到System視圖,點(diǎn)擊GPIO模塊,然后就可以看到剛剛配置的PB0引腳。這個(gè)窗口中,還可以繼續(xù)調(diào)整PB0的其他參數(shù),比如上/下拉,速度等。還可以為其定義一個(gè)用戶標(biāo)簽LDE1,方便在代碼中進(jìn)行引用。

所有的配置結(jié)束后,選擇Project-->Generate Code重新生成代碼。這時(shí)STM32Cube會(huì)切換到C/C++透視圖,然后可以添加用戶的文件或?qū)δ硞€(gè)C文件進(jìn)行修改。
在這里,我們添加了一段翻轉(zhuǎn)PB0的代碼。這里要注意,所有用戶添加的代碼必須放在“USER CODE BEGIN xxx”和“USER CODE END xxx”這一對(duì)聲明之間。這樣當(dāng)再次重新生成代碼的時(shí)候,才不會(huì)丟失這部分代碼。
代碼添加完成后,點(diǎn)擊“Build”開始編譯。

如果編譯結(jié)束并且沒有任何報(bào)錯(cuò)。就可以點(diǎn)擊Debug,啟動(dòng)調(diào)試。
第一次啟動(dòng)調(diào)試,會(huì)先彈出調(diào)試參數(shù)配置窗口,確認(rèn)好所有的參數(shù)無誤,點(diǎn)擊OK,STM32CubeIDE就會(huì)自動(dòng)從編輯界面切換到調(diào)試界面了。如下圖所示。
在調(diào)試界面下,通過工具欄的操作按鈕,可以進(jìn)行單步調(diào)試。
雙擊某一行代碼最左邊的標(biāo)記欄處,就可以在這行代碼處添加斷點(diǎn)。
右側(cè)打開了多個(gè)調(diào)試窗口,包括:局部變量,斷點(diǎn),全局變量和寄存器等等。這些窗口可以在Window-->Show View菜單中打開或者關(guān)閉。

相關(guān)資源
1如何查看STM32CubeIDE文檔集
第一次打開STM32CubeIDE時(shí),首先顯示的是“Information Center”頁面。這個(gè)頁面提供了創(chuàng)建工程的快速通道和使用STM32CubeIDE的文檔入口。用戶不需要在使用STM32CubeIDE之前閱讀所有這些文檔,但可以把這里作為一個(gè)入口,在需要的時(shí)候從這里進(jìn)入去搜索相關(guān)文檔。

2用戶手冊(cè)/應(yīng)用筆記


???