# STM32 最小系統開發板 LED亮滅閃爍工程建立 [原文](https://microcontrollerslab.com/stm32-blue-pill-gpio-pins-stm32cube-ide-led-blinking-tutorial/) ## STM32 Blue Pill 介紹 這款低成本 STM32 系列開發板配備 STM32F103C8T6 微控制器。STM32F103C8T6是基於RISC架構的STM32F103x8系列中端微控制器單元之一。整合式 Blue Pill 開發板作為低成本板推出,作為意法半導體 STM 發現板的替代品。Blue Pill的價格約為2-3美元。 STM32F103C8T6 微控制器配備 GPIO 接腳、處理器、記憶體、USB 連接埠、類比數位轉換器和其他週邊裝置。ARM Cortex 核心具有 72 MHz 的驚人速度和卓越的功效。 ## STM32F103C8T6簡介 STM32F103C8T6 Blue Pill 開發板包含一個 32 位元 Cortex-M3 RISC ARM 內核,具有 4 -16 MHz 的內部振盪器。它是一款CMOS快閃記憶體技術晶片。該晶片有 37 個 GPIO 引腳和 10 個類比引腳。它具有一些現代通訊接口,如 CAN 和 USB 連接埠。由於該板在非常低的電壓下運行,因此週邊裝置可以對板進行出色的控制,因此適合低功耗應用。它還配備了一個整合式看門狗和一個視窗看門狗計時器,用於正確執行指令。 ![image](https://hackmd.io/_uploads/HkaInpYja.png) ## 引腳排列 下圖顯示了STM32F103C8T6 Blue Pill開發板的引腳排列: ![image](https://hackmd.io/_uploads/HJJOhTKop.png) ## STM32 藍色藥丸 GPIO 引腳 它共有 37 個 GPIO 引腳,由四個連接埠共用:PORTA 和 PORTB(16 個引腳)、PORTC(3 個引腳)和 PORTD(2 個引腳)。每個引腳可吸收/拉出約 6mA 的電流。此外,每個引腳都有一個內部上拉和下拉電阻,可以透過編程使能。 注意:所有這些 GPIO 引腳都具有多種功能,並且在不同的周邊之間共享,例如 UART、I2C、SPI 和 PWM 引腳等。 ## 下載並安裝STM32Cube IDE 我們將使用STM32Cube開發平台來對我們的STM32板進行程式設計。為此,我們將首先向您展示如何在系統中設定 IDE。 第一步是下載程式。 前往以下連結:( https://www.st.com/en/development-tools/stm32cubeide.html#get-software ),然後根據您的作業系統點擊「取得最新」區塊。我們正在使用Windows。 ![image](https://hackmd.io/_uploads/HyQ5nTFip.png) 將會開啟以下表格。您必須註冊您的帳戶。提供以下資訊並點擊“下載”按鈕。如果您已經在 my.st.com 上擁有帳戶,那麼您也可以使用該帳戶登入。 ![image](https://hackmd.io/_uploads/H1A52aFs6.png) 指定您的個人資訊並點擊下載按鈕後,您的註冊將完成。您的電子郵件地址中將提供一個鏈接,用於驗證您的電子郵件地址,然後下載將自動開始。請注意,該電子郵件地址是您用於註冊的電子郵件地址。該電子郵件將由意法半導體發送。 稍後,指定目錄後,您將開始下載。開啟 .zip 檔案後,系統將詢問您是否同意。接受協定並選擇安裝 IDE 所需的位置後,安裝過程將開始。STM32Cube 安裝需要一些時間。 安裝完成後,按一下「下一步」。 ![image](https://hackmd.io/_uploads/HJwo2aKo6.png) 安裝完成後,按一下「完成」關閉安裝。您的桌面現在將建立一個 STM32Cube 的捷徑。 ![image](https://hackmd.io/_uploads/rkf2natjp.png) ## STM32 Blue Pill LED 閃爍範例 前面提到,我們將學習使用STM32 Blue Pill的GPIO引腳作為數位輸出引腳。出於演示目的,我們將建立一個 LED 閃爍範例。該板有一個連接到 GPIO 引腳 13 的板載 LED。 首先,讓我們看看如何在 STM32Cube IDE 中為 STM32 Blue Pill 編寫第一個程式。 ## 在 STM32Cube IDE 中編寫您的第一個 STM32 Blue Pill 程式 現在我們已經在系統中安裝了 STM32Cube 應用程序,讓我們學習如何使用它來對 STM32 板進行編程。 打開應用程式。系統將要求您指定工作場所的目錄。您可以指定目錄,並勾選下面的方塊以將其保留為預設目錄。接下來,點擊“啟動”啟動應用程式。 ![image](https://hackmd.io/_uploads/S1HA3ptia.png) STM32Cube 工作區將會開啟。 ![image](https://hackmd.io/_uploads/BkAA36FsT.png) ## 在STM32Cube中建立STM32項目 現在點選「開始新的 STM32 專案」。 ![image](https://hackmd.io/_uploads/HJQep6tsa.png) 目標選擇將會開啟。 ![image](https://hackmd.io/_uploads/r10epTYip.png) 從“部件號”中選擇您的設備。我們正在使用「STM32F103C8」。然後按一下任意列條目,然後按一下「下一步」按鈕繼續。 ![image](https://hackmd.io/_uploads/BJuWT6Fia.png) 為您的項目命名。由於我們要讓 STM32 板的板載 LED 閃爍,因此我們將專案命名為「BLINK_LED」。然後點選“完成”。 ![image](https://hackmd.io/_uploads/H1NMaTYiT.png) 系統將要求您開啟關聯的觀點。按一下“是”。 ![image](https://hackmd.io/_uploads/HJpz6pKip.png) STM32 有一個連接在 PC-13 上的板載 LED。請參閱上面電路板的詳細引腳輸出。按一下裝置設定工具上的 PC-13 接腳。 ![image](https://hackmd.io/_uploads/SJkHTpKs6.png) 這就是它的外觀。在這裡您可以看到我們已將 GPIO_Output 連接到 PC-13。 ![image](https://hackmd.io/_uploads/HkZUTTKoa.png) 此外,我們還有更多引腳選項。前往 System Core > GPIO > PC-13,PC-13 的引腳配置將會開啟。在這裡,我們為該引腳指定了“LED”用戶標籤。您可以在裝置設定工具中看到,現在 PC-13 已被賦予標籤「LED」。 除了標籤之外,還有其他幾個選項可供選擇,包括 GPIO 輸出電平、模式、上拉/下拉狀態等。 ![image](https://hackmd.io/_uploads/H15D66toT.png) 現在我們將保存我們的文件。按 Ctrl + S。將出現下列視窗。按一下“是”。這將為您產生一個模板程式碼 ![image](https://hackmd.io/_uploads/Sktdp6Yj6.png) 將出現另一個窗口,詢問您是否要開啟透視圖。按一下“是”。 ![image](https://hackmd.io/_uploads/H1zY66Fo6.png) ## 程式碼 現在開啟以下頁面。在右側,您將能夠查看程式碼大綱。發生這種情況是因為我們以透視方式開啟程式碼。 在中間,您可以查看 main.c 文件,在左側您可以查看 Project Explorer。 如果要前往裝置設定工具,請按一下 BLINK_LED.ioc 標籤。 ![image](https://hackmd.io/_uploads/rJEjTpFj6.png) ## STM32 Blue pill LED 閃爍代碼 現在讓我們修改 BLINK_LED 專案的 main.c 檔案。我們的目標是在延遲後無限期地閃爍板載 LED。 首先,在 main() 函數中轉到 while(1) 並插入以下程式碼行。這些將負責使板載 LED 無限閃爍。 ``` while (1) { HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); delay(500000); HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); delay(500000); } ``` 現在發生的情況是,HAL_GPIO_WritePin() 函數接受三個參數:板載 LED 連接埠、板載 LED 引腳和引腳狀態。此函數負責將板載 LED 引腳設定為高電平或低電平。 :::info 請注意,我們已將板載 LED 標記為“LED”,因此我們指定了 LABEL_GPIO_Port 和 LABEL_Pin :前兩個參數為 LED_GPIO_Port 和 LED_Port。請記住將“LABEL”替換為您自己的引腳標籤。 ::: 當我們將第三個參數指定為GPIO_PIN_RESET 時,它將板載LED 引腳設定為低電平,而當我們將第三個參數指定為GPIO_PIN_SET 時,它將板載LED 引腳設為高電平。 在這兩個函數之間,我們呼叫delay()函數。它不是內建函數,因此我們也必須定義它。在Error_Handler() 之後插入以下delay() 函數的定義。 ``` void delay (int x) { volatile int i,j; for (i=0 ; i < x ; i++) { j++; } return; } ``` 此外,將delay()函數的原型與其餘私有函數原型一起添加,如下所示: ``` /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); void delay (int x); ``` 修改後儲存main.c檔。現在我們準備好建造我們的專案了。 ## 建設項目 若要建立 BLINK_LED 項目,請按 Ctrl + B 或前往「項目」>「建置全部」。 ![image](https://hackmd.io/_uploads/HyNRRTtj6.png) 您的專案將開始建置。幾分鐘後,如果沒有錯誤,您的專案將被建置。 ![image](https://hackmd.io/_uploads/BJCR0TtoT.png) ## ST-Link編程器與STM32的連接 現在,我們已經成功建立了 BLINK_LED 項目,讓我們繼續將程式碼上傳到我們的 STM32 板。為此,首先我們必須將 Blue Pill STM32 與 ST-Link 程式設計器連接起來。我們將使用 ST-Link V2。 ![image](https://hackmd.io/_uploads/r1Pxy0FsT.png) 這將在我們的電腦和 STM32 板之間提供一個介面。它由 10 個引腳組成。我們將使用 pin2 SWDIO、pin6 SWCLK、pin4 GND 和 pin8 3.3V 與我們的 STM32 板連接。SWDIO 是資料輸入/輸出引腳,SWCLK 是時脈引腳。按照 ST-LINK V2 上給出的引腳配置來識別每個引腳。 請依照下表正確連接兩個設備。 | STM32 Blue Pill | ST Link V2 | | -------- | -------- | | VCC 3.3V pin | pin8 3.3V | | SWDIO pin | pin2 SWDIO | | SWCLK pin | pin6 SWCLK | | GND | pi4 GND | ![image](https://hackmd.io/_uploads/r1XGxRtoT.png) 另外,將啟動跳線移至右側以使微控制器進入程式模式。 ![image](https://hackmd.io/_uploads/SkVQx0Fop.png) 現在透過 USB 連接埠將 ST-LINK V2 連接到電腦。兩個設備都將開機。 ![image](https://hackmd.io/_uploads/r1RXgRFsa.png) 接下來按 IDE 中的 RUN 按鈕。將開啟以下「編輯配置」視窗。按一下“確定”。 ![image](https://hackmd.io/_uploads/HJtNg0tja.png) 片刻之後,程式碼將成功發送到STM32板。您可以在控制台終端中查看它。 否則,請按 STM32 板上的 RESET 按鈕。 ![image](https://hackmd.io/_uploads/Sy7SeAtia.png) 現在,要將藍色藥丸恢復到正常模式,請確保將啟動跳線放回原位。完成後按下板上的 RESET 按鈕。板載 LED 將立即開始閃爍。