首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

STM32 固件庫中結構體的實戰應用詳解

     編輯:關於C語言

STM32 固件庫中結構體的實戰應用詳解

在嵌入式開發中,結構體是組織複雜數據的核心工具。上一篇我們介紹了結構體的基本定義與引用方式,本文將深入剖析 STM32 官方標準外設庫如何運用結構體來配置 GPIO 等硬體資源,並透過實際程式碼示範其初始化流程。

結構體指標成員存取

當使用結構體指標時,需透過 -> 運算子存取成員。例如若 student1 為結構體指標,存取其 name 成員的寫法為:

student1->name;

GPIO 初始化結構體定義解析

STM32 固件庫將 GPIO 配置參數封裝於 GPIO_InitTypeDef 結構體中,其核心定義如下:

typedef enum {
    GPIO_Mode_AIN        = 0x00,  // 類比輸入
    GPIO_Mode_IN_FLOATING= 0x04,  // 浮空輸入
    GPIO_Mode_IPD        = 0x28,  // 下拉輸入
    GPIO_Mode_IPU        = 0x48,  // 上拉輸入
    GPIO_Mode_Out_OD     = 0x14,  // 開漏輸出
    GPIO_Mode_Out_PP     = 0x10,  // 推挽輸出
    GPIO_Mode_AF_OD      = 0x1C,  // 復用開漏輸出
    GPIO_Mode_AF_PP      = 0x18   // 復用推挽輸出
} GPIOMode_TypeDef;

typedef enum {
    GPIO_Speed_10MHz = 1,
    GPIO_Speed_2MHz  = 2,
    GPIO_Speed_50MHz = 3
} GPIOSpeed_TypeDef;

typedef struct {
    uint16_t       GPIO_Pin;        // 要配置的腳位
    GPIOSpeed_TypeDef GPIO_Speed;   // 輸出速率
    GPIOMode_TypeDef  GPIO_Mode;    // 工作模式
} GPIO_InitTypeDef;

實戰範例:PB5 腳位驅動 LED 閃爍

以下完整程式碼展示如何利用結構體配置 GPIOB 第 5 腳為推挽輸出,並以軟體延時實現 LED 閃爍:

#include "stm32f10x.h"

void Delay(uint32_t count) {
    uint32_t i = 0;
    for (; i < count; i++);
}

int main(void) {
    GPIO_InitTypeDef GPIO_InitStructure;           // 宣告結構體變數
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 開啟 GPIOB 時鐘

    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_5;    // 指定 PB5
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP; // 推挽輸出模式
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 50 MHz 速率
    GPIO_Init(GPIOB, &GPIO_InitStructure);         // 初始化 GPIOB

    while (1) {
        GPIO_ResetBits(GPIOB, GPIO_Pin_5); // 輸出低電平,LED 亮
        Delay(3000000);
        GPIO_SetBits(GPIOB, GPIO_Pin_5);   // 輸出高電平,LED 滅
        Delay(3000000);
    }
}

關鍵步驟總結

  1. 啟用外設時鐘:呼叫 RCC_APB2PeriphClockCmd 開啟對應 GPIO 埠的時鐘,否則寄存器操作無效。
  2. 填充結構體:依需求設定 GPIO_Pin、GPIO_Mode、GPIO_Speed 三個成員。
  3. 呼叫初始化函式:將結構體位址傳給 GPIO_Init,由固件庫完成寄存器級配置。
  4. 應用層操作:後續透過 GPIO_SetBits/ResetBits 控制腳位電平。

掌握結構體在固件庫中的應用模式,能讓嵌入式開發更具條理、可維護性更高,也是從「寫暫存器」邁向「用框架」的關鍵一步。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved