基于正點(diǎn)原子 MiniSTM32 開發(fā)板 使用 STM32CubMx 構(gòu)建工程的準(zhǔn)備工作
MiniSTM32 開發(fā)板是正點(diǎn)原子出品的一款基于意法半導(dǎo)體?STM32F103RCT6 單片機(jī)的開發(fā)板,就其本身的硬件售價(jià)而言性價(jià)比不能說高,但是其配套的豐富的文檔以及開箱即用的例程可以說完全值回票價(jià)。然而其配套的例程對(duì)于學(xué)習(xí)如何繼續(xù)快速開發(fā)其他同款、同系列、同廠商的單片機(jī)還是有所差距。
就我現(xiàn)在的開發(fā)流程來說,在硬件工程師完成原理圖設(shè)計(jì)后就可以開始進(jìn)行軟件開發(fā)了,為了使得開發(fā)速度更加快速,我使用了STM32CubeMx進(jìn)行了時(shí)鐘樹的配置、基礎(chǔ)的IO口的配置以及部分單片機(jī)片內(nèi)外設(shè)功能的初步配置(例如串口、外部中斷、定時(shí)器中斷等),在此之后生成 HAL 庫工程,再次基礎(chǔ)上拼接之前已經(jīng)寫好的其他外設(shè)和算法的庫文件(如果沒有就按照 datasheet 和項(xiàng)目要求現(xiàn)寫一個(gè))。如果還有上位機(jī)的需求則還需要完成上位機(jī)和通訊協(xié)議的適配和設(shè)計(jì)。至此就完成初步的軟件設(shè)計(jì),如果不寫上位機(jī)、新的庫文件,那么至此大概只需要兩個(gè)小時(shí),可以說是相當(dāng)?shù)目焖匍_發(fā)了。
而正點(diǎn)原子提供的例程的缺陷就在這里,有可能我在 MiniSTM32 上使用配套的 HAL 庫例程的基礎(chǔ)上進(jìn)行了開發(fā),而要把開發(fā)后的內(nèi)容移植到實(shí)際的項(xiàng)目上要用不少的功夫。所以使用 STM32CubMx 重新構(gòu)建正點(diǎn)原子 MiniSTM32 開發(fā)板的 HAL 庫工程至關(guān)重要。
本項(xiàng)目用到的軟件有:
STM32CubeMx v6.6.1 ------ 用于工程的配置
Keil?v5.29?-----------------------?用于程序的編寫和調(diào)試
FLYMCU(可選)?------------?如果沒有Debug器可以使用次軟件連接串口進(jìn)行燒錄
XCOM(可選) --------------- 正點(diǎn)原子編寫的串口調(diào)試助手
開發(fā)板配套外設(shè)對(duì)應(yīng)單片機(jī)的引腳表在 3,ALIENTEK MiniSTM32開發(fā)板原理圖 的壓縮包中。
整個(gè)項(xiàng)目的配套工程都已經(jīng)寫完并且上傳至Github中
項(xiàng)目地址是:
https://github.com/Wingplane/MiniSTM_STM32CubeMX
在開始后面的實(shí)驗(yàn)講解之前,先要講解一下?STM32CubeMX 的使用方法。首先在每一個(gè)實(shí)驗(yàn)文件夾打開后,都可以看到一個(gè) MiniSTM.ico的文件,這是?STM32CubeMX 的工程文件,其內(nèi)部的內(nèi)容是以類似?yaml 格式保存的工程內(nèi)配置
下面以實(shí)驗(yàn)一內(nèi)的 ico 文件為例
我們一般不直接通過文檔進(jìn)行編輯,而是通過?STM32CubeMX?打開,使用圖形界面進(jìn)行便捷的配置。
打開文件后,可能會(huì)彈出一下的警告,這是因?yàn)?STM32CubeMX 是在一直保持更新的,生成 HAL 庫代碼中的部分內(nèi)容可能會(huì)有一些更改,但是隨著?STM32CubeMX 的迭代,現(xiàn)在生成的代碼基本的改變不多,更新更多的是加入對(duì)更多單片機(jī)的支持。所以不管是選擇 continue?用6.6.1的版本,還是選擇 migrate 使用最新的版本都是 OK 的。

打開以后就是如下圖所示的一個(gè)界面上面的 File Window Help三個(gè)選項(xiàng)欄分別是關(guān)于
工程文件的保存、讀取、導(dǎo)入、導(dǎo)出、另存為等操作
關(guān)于輸出窗口的開關(guān)和軟件內(nèi)字體的大小
幫助文檔、相關(guān)信息以及軟件的更新

這邊是告知用戶選擇的芯片和工程名等信息,這里可以點(diǎn)擊芯片名重新選擇單片機(jī)并新建一個(gè)工程。

點(diǎn)擊這里可以生成 HAL 庫的代碼,這一般是配置完成后的最后一步

然后就是四個(gè)選項(xiàng)卡了
第一個(gè)是引腳功能的配置
第二個(gè)是時(shí)鐘樹的配置
第三個(gè)是輸出的工程文件的配置
第四個(gè)是開發(fā)時(shí)用到的工具

接下來我們一個(gè)一個(gè)選項(xiàng)卡進(jìn)行說明
首先是第一個(gè)關(guān)于引腳功能的配置的選項(xiàng)卡
這里最上面還有兩個(gè)選項(xiàng)欄
Software Packs 包含的是包和庫的管理,這里不僅有官方提供的大量和樣板匹配的庫,還有像 FreeRTOS 等開源的軟件包,它們也是由官方進(jìn)行適配了的,此外它還支持了第三方通過導(dǎo)入的方式導(dǎo)入第三方包,比如國內(nèi)的 RT-Thread 。
Pinout 中則有有關(guān)于引腳配置的各種快捷方式,方便快捷的選中、清空、標(biāo)記等。

往左下方下看,這一側(cè)的工具欄中顯示的是各種外設(shè)和可供使用的包和庫(在上面提到的Software Packs中添加后就可以在這里顯示了)

用戶可以點(diǎn)開對(duì)應(yīng)的功能進(jìn)行快速的初始化

而這邊占地最大的部分就是芯片引腳的示意圖,我們可以直觀的在配置中看到配置的是哪一個(gè)引腳,同時(shí)也可以通過點(diǎn)擊對(duì)應(yīng)引腳,直接在示意圖上進(jìn)行功能的配置和修改。

接下來是時(shí)鐘樹的配置,時(shí)鐘的配置是 STM32 以及各類單片機(jī)乃至所有高處理能力芯片的重點(diǎn),這里只抓幾個(gè)重點(diǎn)說明。

首先就是輸入的兩個(gè)時(shí)鐘信號(hào)?LSE 和 HSE 的配置,首先在自己開發(fā)的過程中這兩個(gè)外部時(shí)鐘不是必須的。如果不使用RTC功能,那么LSE可以省去,不擔(dān)心片內(nèi)時(shí)鐘不穩(wěn)的問題,那么HSE也可以省去改用片內(nèi)的HSI。


一般情況下,我們輸入的 HSE 信號(hào)會(huì)通過片內(nèi)鎖相環(huán)倍頻為需要的頻率(一般就是最大,在 STM32F103RCT6 上就是 72MHz)

經(jīng)過鎖相環(huán)的時(shí)鐘信號(hào)會(huì)通過各個(gè)分頻器給到各個(gè)總線上,由總線連接的各個(gè)外設(shè)和核心就被分配到了各自需要的時(shí)鐘信號(hào),關(guān)于各個(gè)總線上分別掛載了哪幾個(gè)設(shè)備,可以參考單片機(jī)的數(shù)據(jù)手冊(cè)。

這里有一篇文章可以幫助你快速找到芯片的用戶手冊(cè)

第三個(gè)選項(xiàng)卡是工程管理,這個(gè)選項(xiàng)卡下左側(cè)還有三個(gè)選項(xiàng)卡,分別是工程、代碼生成器和高級(jí)設(shè)置。

在工程選項(xiàng)卡中,新建的工程要修改主要是工程名,以及工程文件的保存位置,這些一旦保存后就無法在這里繼續(xù)修改了,但是你可以在文件夾中隨意移動(dòng)和修改工程的文件名,修改后。此外還有就是要修改工具鏈和IDE,我之后的內(nèi)容使用的是?Keil 所以選用?MDK-ARM,如果使用其他的工具鏈就選擇其他內(nèi)容,需要注意的是對(duì) SW4STM32?的支持只到了6.5.0版本,之后的版本不在支持生成?SW4STM32 的代碼。下面的 Linker Setting 可以修改堆大小和棧大小,一般不用修改,但是在使用實(shí)時(shí)操作系統(tǒng)或者編譯時(shí)出現(xiàn)報(bào)錯(cuò),那么就需要根據(jù)實(shí)際需要進(jìn)行修改。工程選項(xiàng)卡中其他的內(nèi)容根據(jù)具體的環(huán)境進(jìn)行修改。

代碼生成器中會(huì)修改生成的源文件、頭文件以及工具鏈的鏈接。這里勾選了只在工程中添加必要的包,以及每個(gè)功能都會(huì)生成獨(dú)立的源文件、頭文件,如果不勾選這個(gè),絕大部分的函數(shù)都會(huì)創(chuàng)建在main.c中。

STM32Cube MCU 包和嵌入式軟件包有著三個(gè)不同的選項(xiàng)
復(fù)制所有庫到工程文件夾中
只復(fù)制必要的庫文件
通過鏈接工具鏈文件來添加庫到工程文件夾中
這3個(gè)選項(xiàng),可擴(kuò)展性逐步上升,工程文件大小也逐步上升

最后是高級(jí)設(shè)置,這里可以看到具體用了什么庫,這里的 HAL 庫可以選擇換成 LL 庫, LL 庫包含的接口更少,內(nèi)存占用更小,執(zhí)行效率也更高。

四個(gè)選項(xiàng)卡中的最后一個(gè)選項(xiàng)卡是工具選項(xiàng)卡,其中有著一系列能夠幫助開發(fā)的工具

以上就簡要介紹完成了? STM32CubeMX 的大體功能,接下來介紹一下生成的工程的文件目錄結(jié)構(gòu)
移植時(shí)可以方便的從Inc和Src取用對(duì)應(yīng)的文件。