跳轉到主要內容

1. 創建專案

動機

在本節中,我們將使用STM32CubeMX生成特定MCU的工程專案。 該專案將作為本使用指南中的其餘步驟的基礎。

我們將在接下來的步驟中使用STM32CubeMX改善專案,並編寫和整合程式碼,以使所有必需的周邊都正常工作。

這個專案會將長期存在以供反覆使用。 您現在應確定一種策略,使得不同的版本保持可用,以便可以返回並再次執行。 或者在新硬體上進行,或者只是重新檢查硬體。

也許您需要許多小型測試程式。 在這種情況下,該專案是一個很好的起點。

目標

其目標是在STM32CubeMX中創建一個可燒錄到您的開發板上並執行的專案。 如果您有帶除錯器的IDE(如STM32CubeIDE或IAR Embedded Workbench),則還應檢查是否可以除錯並逐步完成MCU上的專案。

如果您沒有除錯器,則應找到一種從專案的各個位置列印出調試語句的方法。 如 串列連接埠。

驗證

以下是本節的驗證點:

驗證點基本原理
在IDE中開啟專案專案由STM32CubeMX生成,並可以用作後續開發板開發的起點。
專案編譯此專案進行驅動程式包含類別路徑的正確設定。 我們可以編寫更多程式碼並重複編譯該專案。
進入斷點專案可以調試運行並在斷點處停止。 我們可以檢查專案狀態並調查錯誤。

先決條件

以下是此步驟的先決條件:

  • 基於STM32開發板
  • 程式碼/除錯介面 - ST-LINK,JLINK或類似介面
  • 安裝STM32CubeMX
  • 安裝IDE - STM32CubeIDE、IAR Embedded Workbench、Keil μVision或類似軟體

執行

現在,我們將完成在STM32CubeMX中創建新專案的步驟。 在該範例中,我們將使用STM32F429 MCU。 當然,您應在硬體上選擇MCU。

在STM32CubeMX中,按下「從MCU啟動我的專案」的「存取MCU選擇器」:

創建新專案

也可以基於STM32評估套件啟動一個新專案,如STM32F429探索板。 如果您的硬體設計基於評估套件,您可以或說應當執行該操作。

然後,我們選擇相關MCU。 在這裡我們選擇STM32F429ZIT6U:

選擇MCU

跳到專案管理員選項,並為專案命名。 當然,您也可以選擇新的專案儲存位置。 在「應用結構」下,選擇「進階」。 在「工具鏈/IDE」下,您必須選擇要使用的IDE。 在範例中,我們選擇IAR:

設定專案名稱與IDE

現在,按下右上角的「產生程式碼」按鈕。 如果這是您選取MCU系列(F4/F7/H7)中的首個專案,則STM32CubeMX自動建議下載相關STM32Cube韌體套件。 接受該選項,以獲取供以後使用的最新版本。

STM32CubeMX可下載STM32Cube韌體

按下「開啟專案」,以開啟IDE中的專案:

專案已生成

專案在IAR Embedded Workbench開啟

STM32CubeMX生成的專案包含特定MCU啟動程式碼、中斷向量表、系統初始化程式碼以及MCU中所有外設週邊的HAL驅動程式。

現在可通過IDE編譯和除錯專案。 在IAR中,點選「專案」->「編譯」來編譯專案,點選「專案」->「下載並除錯」來除錯專案:

在IAR Embedded Workbench中除錯專案

設置IAR專案,使用STLink除錯器。 如果您使用其他除錯器,請在IDE中更改專案的「除錯器」屬性。

主迴圈繼續運行

在無作業系統的情況下運行的專案,main的while迴圈通常很重要。 通過設置斷點來檢查是否執行到某個位置,也可以在迴圈中添加一些程式碼。

建議瀏覽IDE中的專案,以熟悉程式碼結構。 另外,可以嘗試一下追踨SystemInit到main的動作步驟。

使用者代程式碼區段

對於此步驟,在開始編輯專案之前,至關重要的是瞭解STM32CubeMX使用的「使用者程式碼區段」這一概念。 專案的Core/Src資料夾中的所有來源檔均由STM32CubeMX產生。 在您以後更改STM32CubeMX中的專案設定時(如啟用UART),將重新生成其中的一些檔案。 您可能也在其中的一些檔中插入程式碼。 除非使用底下規則,使用者程式碼在使用STM32CubeMX重新產生專案時會被移除:

  • 將程式碼寫在使用者程式區段

寫在使用者程式區段以外的任何程式碼都將被STM32CubeMX刪除。

在這個範例中,讓我們看一下Core/Src/main.c中的前幾行:

main.c
int main(void)
{
/* USER CODE BEGIN 1 */

/* USER CODE END 1 */


/* MCU Configuration--------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
...
}

如果您希望在main函數的開頭插入程式碼,必須將其放在使用者程式碼開始1與使用者程式碼結束1之間。 如果將程式碼放在此區之外,它將被STM32CubeMX刪除。

Caution
請勿在使用者程式區段以外寫程式碼。 當STM32CubeMX生成程式碼時,將刪除此類程式碼。

進一步閱讀

此處的連結文件包含有關CubeMX的更多資訊: