天天看點

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

第十章STM32CubeMX簡介​

ST官方新推出的STM32CubeIDE已經內建內建了TrueSTUDIO和STM32CubeMX插件,是以可以在STM32CubeIDE上配置時鐘樹以及外設,然後生成初始化代碼,TrueSTUDIO插件具有項目建立和管理、代碼編輯、代碼編譯以及代碼調試等功能,是以也可以使用STM32CubeIDE來開發,可以檢視正點原子的《STM32MP1 M4裸機CubeIDE開發指南》進行學習。​

如果想使用MDK來開發,又想使用STM32CubeMX生成初始化代碼給MDK使用的朋友,可以安裝STM32CubeMX來實作。​

STM32CubeMX是由ST公司開發的圖形化代碼自動生成工具,能夠快速生成初始化代碼,如GPIO,時鐘樹,中間件等,使使用者專注于業務代碼的開發。現在ST主推HAL庫代碼,經典的标準外設庫已經停止維護了,新産品也隻提供HAL庫的代碼,是以,我們學習HAL庫是更加有優勢的,由于HAL庫具有低耦合、通用、抽象了硬體層,使得開發者無需太過關注硬體驅動的實作,使得開發更加的簡單快速,更容易維護,是以被越來越多的産品所使用。​

本章将分為如下幾個小節:​

10.1、STM32CubeMX的作用;​

10.2、安裝STM32CubeMX;​

10.3、使用STM32CubeMX生成MDK工程;​

10.4、STM32CubeMX界面介紹;​

10.1 STM32CubeMX的作用​

STM32CubeMX具有如下特性:​

  1. 直覺的選擇MCU型号,可指定系列、封裝、外設數量等條件​
  2. 微控制器圖形化配置​
  3. 自動處理引腳沖突​
  4. 動态設定時鐘樹,生成系統時鐘配置代碼​
  5. 可以動态設定外圍和中間件模式和初始化​
  6. 功耗預測​
  7. C代碼工程生成器覆寫了STM32微控制器初始化編譯軟體,如IAR,KEIL,GCC​
  8. 可以獨立使用或者作為Eclipse插件使用​

對于STM32CubeMX和STM32Cube的關系這裡我們還需要特别說明一下,STM32Cube包含STM32CubeMX圖形工具和STM32Cube庫兩個部分,使用STM32CubeMX配置生成的代碼,是基于STM32Cube庫的。也就是說,我們使用STM32CubeMX配置出來的初始化代碼,和STM32Cube庫相容,例如硬體抽象層代碼就是使用的STM32的HAL庫。不同的STM32系列晶片,會有不同的STM32Cube庫支援,而STM32CubeMX圖形工具隻有一種。是以我們配置不同的STM32系列晶片,選擇不同的STM32Cube庫即可。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.1.1 STM32CubeMX和STM32Cube庫的關系​

當然,自動生成的驅動代碼我們不去仔細專研其原理的話,對學習的提升很有限,而且在出現BUG的時候難以快速定位解決,是以我們也要了解其背後的原理。​

10.2安裝STM32CubeMX​

STM32CubeMX運作環境搭建包含兩個部分。首先是Java運作環境安裝,其次是STM32CubeMX軟體安裝。​

10.2.1 安裝JAVA環境​

對于Java運作環境,大家可以到Java官網​​www.java.com​​下載下傳最新的Java軟體,也可以直接從我們CD光牒複制安裝包,目錄為:開發闆CD光牒A-基礎資料\3、軟體\Java 安裝包。關于Java版本,這裡推薦大家安裝V1.8.0_271版本的Java,因為正點原子《STM32MP1嵌入式Linux驅動開發指南》中會用到STM32CubeProgrammer來燒寫程式,而教程裡提供的STM32CubeProgrammer軟體使用的是V1.8.0_271版本的Java。如果不使用STM32CubeProgrammer的話,大家也可以選擇更高版本的STM32CubeMX和對應的Java。​

注:​

STM32CubeIDE已經內建了STM32CubeMX,STM32CubeIDE生成的工程檔案中,有STM32CubeMX工程檔案,也就是說,可以用獨立的STM32CubeMX軟體來打開STM32CubeIDE生成的STM32CubeMX工程檔案。如果安裝的是V1.4版本的STM32CubeIDE,那麼STM32CubeMX軟體版本至少為V6.0.0版本才可以打開STM32CubeIDE生成的STM32CubeMX工程檔案,本章節安裝的STM32CubeMX是V6.0.1版本,是以完全可以打開STM32CubeIDE生成的STM32CubeMX工程檔案。雖然STM32CubeIDE可以生成STM32CubeMX工程檔案,但是目前不能夠導出MDK工程檔案給MDK來使用,是以需要STM32CubeMX生成工程給MDK用的話,就得安裝獨立的STM32CubeMX軟體。​

大家直接輕按兩下安裝包jre-8u271-windows-x64.exe,根據提示安裝即可。安裝完成之後提示界面如下圖10.2.1.1所示。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.2.1.1 Java安裝成功提示界面​

安裝完 Java 運作環境之後,為了檢測是否正常安裝,我們可以打開 Windows 的cmd指令輸入框,輸入:java –version 指令查詢Java版本,如果顯示 Java 為1.8.0_271版本,且為64位(注意:要安裝64位的),則安裝成功,提示資訊如圖10.2.1.2:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.2.1.2 檢視Java版本​

10.2.2安裝STM32CubeMX ​

在安裝了Java運作環境之後,接下來我們安裝STM32CubeMX圖形化工具。該軟體可以直接從CD光牒複制,目錄為:開發闆CD光牒A-基礎資料\5、開發工具\2、ST官方開發工具en.stm32cubemx_v6-0-1.zip,也可以直接從ST官方下載下傳,下載下傳位址為:​​www.st.com/stm32cube。本小節我們安裝的STM32CubeMX是V6.0.1​​版本的。接下來我們直接輕按兩下SetupSTM32CubeMX-6.0.1.exe,安裝步驟如下。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.2.2.1 啟動安裝​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.2.2.2 接受本許可協定​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.2.2.3 勾選第一項即可​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.2.2.4 指定安裝路徑​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.2.2.5 建立快捷方式​

等待安裝進度條完成,完成後點選Next:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.2.2.6 等待安裝完成​

點選Done完成安裝:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.2.2.6 完成安裝​

10.2.3 解除安裝STM32CubeMX​

如果需要解除安裝STM32CubeMX的話,可以輕按兩下STM32CubeMX按章目錄下的Uninstaller\startuninstall.exe可執行檔案,然後勾選要解除安裝的STM32CubeMX,這裡筆者解除安裝的是之前安裝的V6.0.0版本的STM32CubeMX軟體:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.2.3.1解除安裝STM32CubeMX​

10.4 使用STM32CubeMX生成MDK工程​

數情況下,我們都隻使用STM32CubeMX來生成工程的時鐘系統初始化代碼以及外設的初始化代碼,因為使用者控制邏輯代碼是無法在STM32CubeMX中完成的,需要使用者自己根據需求來實作。​

本節實驗生成的工程位于 開發闆CD光牒A-基礎資料\1、程式源碼\3、M4裸機驅動例程\庫V1.2\第十章生成的MDK工程 下。​

10.3.1 打開STM32CubeMX​

輕按兩下桌面STM32CubeMX快捷方式圖示,如圖10.3.1.1所示。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.1.1 CubeMX快捷方式​

打開後CubeMX主界面如圖10.3.1.2所示。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.1.2 CubeMX主界面​

10.3.2 下載下傳和關聯的STM32Cube固件包​

我們知道STM32CubeMX圖形工具隻有一種, STM32Cube固件包卻有多種,需要選擇我們工程對應的固件包。​

為了友善,建立工程前,我們先來下載下傳和關聯STM32Cube固件包,點選Help->Manage embedded software packages,如圖10.3.2.1所示。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.2.1 管理固件包​

然後彈出管理界面,在該視窗找到STMMP1清單選項,勾選1.2.0版本(目前最新版本是1.2.0版本,也可以選擇自己需要的版本)。關聯STM32Cube固件包有兩個方法,如圖10.3.2.2所示。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.2.2 下載下傳和關聯STM32Cube固件包​

如果選擇方法二:軟體會線上下載下傳好固件包并解壓之後,會自動關聯,是以不需要多講什麼。​

如果是方法一:點選後,彈出下面的視窗,然後選擇CD光牒中的對應的固件包,注意這裡是以壓縮包的形式來選擇的固件包版本,如下圖所示。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.2.3 關聯本地STM32Cube固件包​

選擇好固件包後,點選打開選項,STM32CubeMX會自動将所選的固件包解壓到一個目錄下,如下是解壓過程的進度條:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.2.4 等待關聯​

解壓完成後,則關聯成功:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.2.5 關聯成功​

關聯好固件包我們就可以開始建立工程了。​

10.3.3建立工程​

使用STM32CubeMX配置工程的一般步驟為:​

1. 工程初步建立​

2. HSE和LSE時鐘源設定​

3. 時鐘系統(時鐘樹)配置​

4. GPIO功能引腳配置​

5. 生成工程源碼​

6. 使用者程式​

接下來我們将按照上面6個步驟,依次教大家使用STM32CubeMX工具生成一個完整的工​

程。​

1.工程初步建立​

方法一:依次點選“File”,“New Project”即可建新工程。如果之前打開過的話,左側最近打開的過程一列會有打開的工程清單,直接點選這些工程也可以打開。​

方法二:直接點選ACCESS TO MCU SELECTOR。​

具體操作如圖10.3.3.1所示。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.1 建立工程​

點選建立工程後,第一次可能會聯網下載下傳一些的檔案,例如會下載下傳STM32Cube固件包,可能等待時間比較長,我們的資料盤裡有STM32Cube固件包了,可以直接選擇取消即可。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.2 啟動時聯網更新檢測​

之後就可以進入晶片選型界面,如圖10.3.3.3所示。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.3 晶片選型界面​

選擇具體的晶片型号,如圖10.3.3.4所示,在搜尋框中先輸入晶片的型号,正點原子STM32MP157開發闆的主要晶片型号是STM32MP157DAAx,有448個引腳,另外,從此界面中可以檢視CPU的介紹、功能框圖,可以線上下載下傳文檔資料以及資料手冊等:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.4 選擇具體的晶片型号​

輕按兩下選中晶片型号後,則彈出主設計界面,如圖10.3.3.5所示。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.5 主設計界面​

2. HSE和LSE時鐘源設定​

進入工程主設計界面後,首先設定時鐘源HSE和LSE。如圖10.3.3.6所示。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.6 設定時鐘源HSE和LSE​

圖10.3.3.6中的标号3,HSE和LSE我們都選擇了Crystal/Ceramic Resonator,表示選擇外部晶振作為它們的時鐘源。我們開發闆的外部高速晶振(HSE)和外部低速晶振(LSE)分别是:24MHZ和32.768KHZ。是以HSE時鐘頻率就是24MHZ,LSE時鐘頻率就是32.768KHZ。​

選項Master Clock Output 1 用來選擇是否使能MCO1引腳時鐘輸出,選項Master Clock Output 2用來選擇是否使能MCO2引腳時鐘輸出,最後一個選項Audio Clock Input(I2S_CKIN)用來選擇是否從I2S_CKIN(PC9)輸入I2S時鐘。​

3. 時鐘系統(時鐘樹)配置​

點選Clock Configuration頁籤即可進入時鐘系統配置欄,如下圖10.3.3.7所示:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.7時鐘系統配置欄​

進入Clock Configuration配置欄之後可以看到,界面展現一個完整的STM32MP157時鐘系統框圖。從這個時鐘樹配置圖可以看出,MCU的時鐘預設使用的是64MHz的HSI。這裡主要​

配置外部晶振大小,分頻系數,倍頻系數以及選擇器。在我們配置的工程中,時鐘值會動态更新,如果某個時鐘值在配置過程中超過允許值,那麼相應的選項框會紅色提示。​

這裡,我們将24MHz的HSE選作時鐘源,配置MCU的時鐘來自PLL3P,然後手動在輸入框中輸入209後,按下回車,等待系統自動配置參數,如圖10.3.3.8,系統配置好的參數中有紅色提示的,說明紅色提示的參數超出範圍了:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.8 配置時鐘樹​

我們手動修改紅色提示的參數,如圖10.3.3.9所示,最終配置系統時鐘最大為209MHz,同時,還配置了APB1~APB3的分頻系數位2:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.9 系統時鐘配置圖​

以上是手動輸入參數讓系統自動配置,然後手動調整參數的過程,如果我們要手動配置所有參數,則應先計算出要用到的參數值,然後在對應的選項框中輸入計算好的參數。關于時鐘樹的參數我們會在配置系統時鐘實驗章節介紹到,這裡為了講解STM32CubeMX的使用,是以直接配置,按照如下步驟完成:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.10 手動配置參數​

我們把MCU時鐘配置分為七個步驟,分别用标号1~10表示,詳細過程為:​

1、時鐘源參數設定:我們選擇HSE為時鐘源,是以我們要根據硬體實際的高速晶振頻率(這裡我們是24MHZ)填寫。​

2、時鐘源選擇:我們配置選擇器選擇HSE即可。​

3、PLL3分頻系數M配置。分頻系數M我們設定為2。​

4、PLL3倍頻系數N配置。倍頻系數N我們設定為52。​

5、PLL3分頻系數P配置。分頻系數P我們配置為3。​

6、MCU時鐘時鐘源選擇:PLL,HSI還是HSE。我們選擇PLL3,選擇器選擇PLL3P即可。​

7、配置MCU的分頻值預設為1;​

8~10、配置APB1~APB3總線分頻值為2。​

AHB1~AHB4、APB1~APB3和Systick時鐘的最終來源都是MLHCLK,經過上面配置以後此時MCU的頻率為209Mhz,AHB1~AHB4的時鐘頻率為209MHz,APB1~APB3總線的時鐘頻率為104.5MHz,定時器的時鐘頻率為209MHz,Systick的時鐘頻率為209MHz:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.11 配置步驟​

4. GPIO功能引腳配置​

本小節,我們來講解怎麼使用STM32CubeMX工具配置STM32MP157的GPIO口。STM32MP157開發闆的PI0引腳連接配接一個LED燈,我們來學習配置這個IO口的相關參數。這裡我們回到STM32CubeMX的Pinout&Configuration選項,在搜尋欄輸入PI0後回車,可以在引腳圖中顯示位置,如下圖10.3.3.12所示:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.12 搜尋引腳位置​

接下來,我們在圖10.3.3.12引腳圖中點選PI0,在彈出的下拉菜單中,選擇IO口的功能為GPIO_Output。操作方法如下圖10.3.3.13所示:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.13 配置GPIO模式​

然後再右鍵PI0,選擇将PI0配置設定給M4使用,因為STM32MP157有兩個A7核心和一個M4核心,是以GPIO引腳要做好資源配置設定,給誰用就要指定給誰:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.14 GPIO選項​

接下來配置PI0的引腳模式參數,打開左邊的System CoreàGPIO進入GPIO模式配置界面,在下方會列出該GPIO的配置項。下面我們依次來解釋這些配置項的含義:​

名稱​ 說明​
GPIO mode​ 設定引腳輸出模式,可選Output Push Pull(推挽)模式或者Output Open Drain(開漏)模式​
GPIO Pull-up/Pull-down​ 設定 引腳是上拉/下拉/沒有上下拉​
Mzximum ouput speed​ 設定引腳輸出速度,可選為低速(Low)/中速(Medium)/高速(Hign)/快速(Very High)模式​
User Label​ 設定引腳的标簽名稱,此項可以填寫自定義的标簽名稱​

表10.3.3.1配置項​

如圖10.3.3.15所示,我們配置PI0引腳的參數如下:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.15 PI0引腳配置​

5. 生成工程源碼​

接下來我們學習怎麼設定生成一個工程,Project Manager-> Project選項用來配置工程的選項,我們了解一下裡面的資訊。​

Project Settings是基本的工程配置:​

  • Project Name:工程名稱,填入工程名稱(半角,不能有中文字元)​
  • Project Location:工程儲存路徑,點選Browse選擇儲存的位置(半角,不能有中文字元)​
  • Toolchain Folder Location:工具鍊檔案夾位置,預設即可。​
  • Application Structure:應用的結構,選擇Basic(基礎),不勾選Do not generate the main(),因為我們要其生成main函數。​
  • Toolchain/IDE:工具鍊/內建開發環境,我們使用Keil,是以選擇MDK-ARM,Min Version選擇V5.27(最新,本教程的MDK是V5.31版本的,高版本的MDK可以打開低版本的MDK工程)。​Linker Settings 是連結器設定:​
  • Minimum Heap Size 最小堆大小,預設(大工程需按需調整)。​
  • Minimum Stack Size 最小棧大小,預設(大工程需按需調整)。​MCU and Firmware Package是 MCU及固件包設定:​
  • MCU Reference:目标MCU系列名稱。​
  • Firmware Package Name and Version :固件包名稱及版本。​
  • 勾選Use Default Firmware Location,文本框裡面的路徑就是固件包的存儲位址,我們使用預設位址即可。(這裡如果有兩個版本的固件包,它會預設使用最新版本的固件)。 最後工程配置,如圖10.3.3.16所示。​

OpenSTLinux Settings是和Linux有關的,我們可以不用管。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.16工程配置​

打開Project Manager->選項,Generated files生成檔案選項,勾選Generate peripheral initialization as a pair of ‘.c/.h’files per peripheral,勾選這個選項的話将會将每個外設單獨生成一組.c、和.h檔案,這使得代碼結構更加的清晰,如圖10.3.3.17所示。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.17代碼生成器設定​

至此工程最基礎的配置就已經完成,先按下Ctrl+S儲存配置,再點選藍色按鈕(SENERATE CODE)就可以生成工程:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.18選擇生成工程​

如下圖10.3.3.19,STM32CubeMX會從之前我們關聯的固件包中拷貝本工程需要使用的檔案到要生成的工程目錄中:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.19 STM32CubeMX從固件包中拷貝檔案​

在彈出來的視窗中點選Open Project就可以打開MDK工程(已經按照本教程安裝了MDK):​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.20使用MDK打開工程​

完整的STM32MP157工程就已經生成了。生成後的工程目錄結構如下圖10.3.3.21所示,輕按兩下帶MX圖示的LED0.ioc檔案即可打開STM32CubeMX工程:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.21 STM32CubeMX生成的工程目錄結構​

以上檔案夾裡有什麼檔案,大家可以嘗試打開看看:​

檔案​ 說明​
CA7檔案夾​ CA7檔案夾存放的是工程生成的裝置樹源檔案​
CM4檔案夾​ CM4檔案夾存放生成的.c檔案和.h檔案(MDK用到的.c和.h檔案在此)​
Common檔案夾​ 主要是system_stm32mp1xx.c檔案​
Drivers檔案夾​ CMSIS标準檔案(包含Device檔案夾和Include檔案夾)和HAL庫檔案​
LED0檔案夾​ 有一個DeviceTree空檔案夾​
MDK-ARM檔案夾​ MDK工程檔案夾,輕按兩下LED0.uvprojx檔案即可打開MDK工程​
.mxproject檔案​ STM32CubeMX配置檔案​
LED0.ioc檔案​ STM32CubeMX工程檔案,輕按兩下可通過STM32CubeMX軟體打開工程​

表10.3.3.2 LED0工程根目錄下的檔案夾​

6.添加使用者程式​

輕按兩下LED0.uvprojx即可打開MDK工程:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.22打開MDK工程​

(1)編譯工程​

在添加我們的代碼之前,我們先打開生成的工程模闆進行編譯,看看是否有錯,如下圖10.3.3.23編譯完成後沒有任何錯誤。我們打開工程裡的目錄,工程模闆結構如圖10.3.3.23所示:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.23 STM32CubeMX生成的工程目錄結構​

(2)手動添加使用者代碼​

大家需要注意,STM32CubeMX生成的main.c檔案中,有很多地方有“/* USER CODE BEGIN X */”和“/* USER CODE END X */”格式的注釋,我們在這些成對出現的注釋的BEGIN和END之間編寫代碼,那麼使用STM32CubeMX重新生成工程之後,這些代碼會保留而不會被覆寫,如果不是在成對出現的BEGIN和END之間編寫代碼,那麼使用STM32CubeMX重新生成工程後原來添加的代碼就會被覆寫掉了。​

接下來,我們手動在while循環中添加如下代碼,注意代碼添加的位置,這裡為了完成整個流程,我們先不解釋這些代碼是怎麼回事,在後面的實驗中我們将會學習這些函數:​

HAL_GPIO_WritePin(GPIOI,GPIO_PIN_0,GPIO_PIN_SET); /* 設定PI0為高電平 */​
HAL_Delay(500);            /* 延時500ms */​
HAL_GPIO_WritePin(GPIOI,GPIO_PIN_0,GPIO_PIN_RESET); /* 設定PI0為低電平 */​
HAL_Delay(500);            /* 延時500ms */      

添加完成後,記得儲存修改,然後編譯工程,如下圖10.3.3.24:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.24工程編譯無報錯​

進行仿真調試,如果忘記MDK進入仿真調試的配置操作步驟,可以傳回檢視第四章節的相關章節介紹。這裡注意的是,如果ST LINK在STM32CubeIDE下仿真後,拿到MDK下仿真的話,需要在MDK下更新ST LINK的驅動才可以進行仿真,驅動更新步驟可以參考前面的第四章 4.2.3小節。進入仿真後,點選運作程式(或者按快捷鍵F5),可以看到開發闆底闆的LED0在閃爍。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.3.3.25 進入仿真界面​

至此,使用STM32CubeMX生成MDK工程的步驟已經講解完了,我們隻是以一個最簡單的GPIO配置為例子進行介紹,如果想用STM32CubeMX來配置其它的外設,如ADC、定時器、DMA等等,可以參考正點原子《STM32MP1 M4裸機CubeIDE開發指南》的配置方法,因為STM32CubeIDE已經內建了STM32CubeMX了,外設參數的配置方法基本上是一樣的,隻是建立工程和導出工程的步驟不太一樣而已。本文的實驗,都可以參考《STM32MP1 M4裸機CubeIDE開發指南》的配置方法來配置而生成一個MDK工程,是以之後的實驗我們不會花過多的篇幅去講解怎麼使用STM32CubeMX的配置了。​

10.4 STM32CubeMX界面介紹​

下面,我們來介紹STM32CubeMX的配置界面,如果要使用STM32CubeMX來生成工程,那麼我們要了解每個選項是用于配置什麼的。​

如下圖10.4.1,進入STM32配置界面以後:​

①處是主菜單欄;​

②處是一些社交和社群連結,是提供随時與世界各地志同道合的人會面的場所。例如Facebook(臉書)、Youtube(油管)和twitter(推特)等社交連結,點選ST Home可以進入ST官網;​

③處是STM32CubeMX的主要配置功能選項界面,這裡有4個配置項:​

名稱​ 說明​

介紹​

(點選跳轉)​

Pinout &Configuration​ 引腳配置視窗,包含外設配置、軟體包管理、引腳排列視圖、引腳操作模式、元件和外設配置狀态以及引腳搜尋框等​
Clock Configuration​ 時鐘配置視窗,包含了STM32MP157的五個時鐘源​ ​​(2)​​
Project Manager​ 項目管理配置視窗,可以檢視項目名稱以及儲存位置、使用的固件包版本、Linux核心和Uboot版本,可以配置是否生成初始化的.c和.h檔案​ ​​(3)​​
Tool​ 相關工具配置視窗,包含功率測試和DDR測試​ ​​(4)​​

表10.4.1 Pinout & Configuration配置視窗配置項清單​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

10.4.1 STM32CubeMX配置界面​

下面,我們分别介紹4個配置功能選項視窗:​

10.4.1 Pinout &Configuration視窗​

1. 外設欄​

外設欄選項,可以按照AàZ的順序來排列,也可以按照(Categories)分類目錄來排列,預設是按照Categories來排列,我們簡單介紹一下外設欄有什麼配置。​

名稱​ 說明​
System Core​ 系統核心配置項,一般是必備的配置項,晶片的DDR、GPIO、看門狗、時鐘、DMA、系統和中斷等重要配置​
Analog​ 模拟量配置項,例如ADC、DAC和參考量​
Timers​ 定時器配置項,包括RTC和TIM1-TIM8,TIM12-TIM17以及低功耗的LPTIM定時器​
Connectivity​ 晶片的通信接口配置項,例如網絡ETH、I2C和SPI總線、USB和UART接口等​
Multimedia​ 多媒體功能配置接口,例如音頻相關的I2S和SAI,顯示相關的GPU、HDMI、LTDC和DSI等​
Security​ 安全項配置項,例如可對随機數RNG、擴充的TrustZone保護控制器(ETZPC)進行設定​
Computing​ 校驗類型配置項,例如CRC校驗和DFSDM(數字濾波器子產品)相關校驗。​
Middleware​ 中間件的配置項,例如FREERTOS實時作業系統和OPENAMP系統​
Trace and Debug​ 跟蹤和調試相關配置項​
Power and Thermal​ MCU功率模式配置​
Utilities​ 資源管理實用程式​

表10.4.2 外設欄介紹​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.4.2外設欄​

2. Additional Software選項​

Additional Software附加軟體選項,可以搜尋或者檢視已經下載下傳或者可用的元件包,以及檢查是否有新的嵌入式固件包發行版。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.4.1.3附加軟體選項​

3.配置選項​

Pinout是引腳操作工具項,常用的有:​

選項​ 說明​ 快捷鍵​
Undo Mode and pinout​ 撤銷操作​ Ctrl + Z​
Redo Mode and pinout​ 恢複撤銷​ Ctrl + Y​
Show User Label​ 顯示使用者自定義标簽​
Disable All Modes​ 禁用所有外設和中間件​ Ctrl + D​
Clear Pinouts​ 清除所有管腳配置​ Ctrl + P​
Clear Single Mapped Signals​ 解除沒有關聯模式的信号​ Ctrl + M​
Reset used GPIOs​ 重置部分或全部使用的GPIO​ Alt + G​

表10.4.3 Pinout引腳操作選項清單​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.4.1.4 Pinout引腳操作選項​

4.配置選項​

System view以圖形化顯示了系統資源的中間件的配置狀态。通過選擇Category view,然後勾選by Context Execution中的選項,可以列出它們的中間件。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.4.1.5 Category view配置圖​

點選Context Execution view可以列出系統資源的所有中間件。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.4.1.6 Context Execution view配置圖​

10.4.2 Clock Configuration視窗介紹​

時鐘配置視窗,主要完成STM32MP1的時鐘樹配置,我們配置好時鐘來源以及分頻和倍頻系數,系統就會自動計算參數來生成所需頻率,通過圖形化動态配置時鐘樹,我們就不需要像以前一樣再手動去計算時鐘了。關于時鐘的配置,我們後面會有專門的章節來講解。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.4.2.1時鐘配置視窗​

10.4.3 Project Manager視窗介紹​

Project Manager視窗是對工程進行配置,可以設定工程名稱以及儲存的位置、使用的固件包版本、裝置樹對應的Linux核心和Uboot版本,可以設定堆棧大小(一般不設定),可以配置代碼生成的方式,還可以設定選擇使用HAL庫還是LL庫等。​

Project Manager的配置很重要,要注意的地方也比較多,下面我們分點來講解:​

1. Project選項配置​

Project選項配置我們一般可以不用管,可以大概浏覽一下裡邊的内容。​

①Projcet Settings​

此項是工程基礎設定,這裡設定的工程名字是LED0,工程位置是E:\STM32CubeMX_Project。Application Struture應用程式結構中有兩種可選,一個是Basic,另一個是Advanced。一般來說,Basic是不包含中間件(RTOS、檔案系統、USB裝置等)的基礎結構,Advanced的話,是結構中會包含中間件。Do not generate the main()就是不要生成main函數,這項就不勾選了。Toolchain Folder Location是工程路徑,Toolchain/IDE是選擇生成的工程,這裡是可選的,可以選MDK、STM32CubeIDE、TrueSTUDIO等。​

②Linker Settings​

此項是堆棧設定,主要就是設定堆和棧的大小,Heap堆預設設定為0x200,Stack棧預設設定為0x400,這兩個我們一般也可以不用設定。​

③Mcu and Firmware Package ​

此項是MCU和固件包資訊,可以看到我們使用的MCU是STM32MP157DAAx,固件包版本是STM32Cube FW_MP1 V1.2.0。當然這兩項也是不能改的,建立工程的時候就已經确定好了。​

④OpenSTLinux Settings設定:​

STM32MP1通用微處理器系列産品主要是基于Arm Cortex-A7核 和 Arm Cortex-M4核架構,而開源OpenSTLinux主要針對于Cortex-A7。openstlinux-5.4-dunfell-mp1-20-06-24是ST官方釋出的Linux系統內建開發包,這個包裡整合了Linux核心源碼、uboot源碼和TF-A源碼,可以看出TF-A版本是2.2,核心版本是5.4,U-Boot版本是2020.01。STM32CubeMX可以為OpenSTLinux分發生成部分裝置樹,在後面我們生成的初始化代碼裡是可以看到裝置樹的。​

關于Linux系統的知識部分,這裡我們先不用理會,正點原子《STM32MP1嵌入式Linux驅動開發指南》對這部分會有一個詳細的講解。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.4.3.1 Project選項​

2.選項配置​

①STM32Cube MCU packages and embedded software packs​

此項預設選擇Copy only the necessary library files選項(在前面建立工程的時候我們就預設的采用這項),意思就是,工程會從STM32Cube MCU軟體包中拷貝需要用到的HAL庫檔案,沒用到的不會拷貝,這樣生成的工程就比較精簡和小巧。​

②Generated files​

此項主要是生成的檔案配置項,其中:​

Generate peripheral initialization as a pair of'.c/.h' files per peripheral 表示讓每個外設生成獨立的'.c/.h'檔案,如果此項不勾選,那麼外設相關的初始化代碼将會生成在man.c中了,這樣的話,如果外設一多,就不好調用了,還會造成main.c檔案的臃腫(不過系統時鐘初始化的代碼預設生成在main.c檔案中,勾選或者不勾選此項對系統時鐘沒有影響)。這裡我們要勾選此項,STM32CubeMX就會為每個外設生成獨立的.c和.h檔案,例如前面10.3章節的實驗是GPIO相關的實驗,後期生成的代碼中會看到有gpio.h和gpio.c這兩個檔案。這點大家要注意,如果忘了勾選,可以再次打開.ioc檔案來配置此項。​

Backup previously generated files when re-generating表示在重新生成初始化代碼的時候備份以前生成的檔案,系統會在相關目錄中生成一個Backup檔案夾,并自動将之前源檔案拷貝到其中,進而完成備份。本實驗,我們選擇此項。​

Keep User Code when re-generating 表示在重新生成初始化代碼時保留使用者之前添加的代碼,例如我之前在main.c中寫了一串代碼,我希望這串代碼被保留,那麼就要勾選此項。這裡注意的是,所添加的代碼一定要在成對出現的BEGIN和END之間,系統才會保留,在其它位置的話還是會被清除的,我們後面會講解怎麼添加。這裡我們不希望每次改了.ioc以後把之前添加的代碼清除,是以此項要選擇。​

Delete previously generated files when not re-generated 表示删除以前生成,但現在沒有生成的檔案,例如假設之前的工程中生成了UART.c檔案,工程經過修改以後不會再生成UART.c檔案,如果不想要之前生成的UART.c檔案,就可以勾選此項讓系統自動清掉這些檔案。這裡我們勾選此項。​

③HAL Settings​

此項涉及到HAL庫設定,其中:​

Set all free pins as analog (to optimize the power consumption)表示将所有空閑引腳設定為模拟模式,此項是在做産品的時候會用到的,目的是優化功耗。此項我們不選。​

Enable Full Assert表示使能所有斷言,Assert即斷言,可以了解為功能函數中的一些布爾表達式,使用斷言做一些假設,可以檢查代碼中隐藏的bug。在任何時候都可以啟用和禁用斷言驗證,這裡我們就不選了。關于斷言,我們在前面已經介紹過了。​

④Template Settings​

此項是模闆選擇,Select a template to generate customized code 表示選擇一個模闆來生成自定義代碼,這裡我們可以不配置,系統會預設選擇。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.4.3.2選項​

3. Advanced Settings進階設定​

①Driver Selector選項可以配置使用的是HAL庫還是LL庫,STM32CubeMX是以HAL庫為基礎的,且目前STM32CubeMX僅支援HAL庫及LL庫,我們選擇預設的HAL庫。​

②Generated Function Calls(生成的函數調用)中,有如圖10.4.3.3兩個可選欄:​

Not Generate Function Call(不生成函數調用)欄,表示main.c代碼不調用對應初始化函數。什麼意思呢,比如在IP Instance Name中的GPIO選項,我們在Not Generate Function Call下勾選框框的選項,然後儲存修改,最後生成的初始化代碼裡,main.c函數中是沒有調用MX_GPIO_Init這個函數的。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.4.3.3配置項​

如果GPIO選項沒有勾選Not Generate Function Call,在儲存修改生成初始化代碼以後,可以在main.c中看到調用了MX_GPIO_Init函數。這裡,有些選項是預設值,不能修改的,即使修改了也沒有效果,例如SystemClock_Config這項。如下圖,筆者沒有勾選GPIO選項的Not Generate Function Call,生成的代碼中可以看到main.c中調用了MX_GPIO_Init函數,大家可在生成代碼的時候留意一下此項配置:​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.4.3.4中調用MX_GPIO_Init函數​

Visibility (Static)欄就是配置初始化代碼聲明為static,不過有些選項是預設值,不能修改的,例如SystemClock_Config配置不聲明為ststic。另外,如果Code Generator選項我們已經配置了生成.c .h獨立檔案了,那就不會生成static了。​

如下圖10.4.3.5,預設選擇了MX_GPIO_Init函數,我們可以不用管,保持預設。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介

圖10.4.3.5進階設定​

10.4.4 Tools視窗介紹​

此視窗是工具選項,裡邊有晶片性能測試的工具配置,例如功耗測試、DDR測試等等,此項會在設計産品時會用到。後續試驗用到的時候我們再進行介紹。​

《STM32MP1 M4裸機HAL庫開發指南》第十章 STM32CubeMX簡介