Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

STM32 工程代碼規範:main.c/hw_config 分層架構與變量管理最佳實踐

編輯:Linux 教學

專案文件組織原則

  • main.c:僅包含功能邏輯代碼 (初始化調用 + while(1) 主循環)。
  • hw_config.h:統一管理硬件相關宏定義、外部變量聲明、函數聲明。
  • hw_config.c:實現所有硬件初始化函數 (RCC、NVIC、GPIO、TIM、USART、SysTick、IWDG 等) 及硬件相關全局變量定義。
  • stm32f0xx_it.c:中斷服務程序,僅包含 hw_config.h 即可訪問共享變量。

main.c 極簡模板

#include "stm32f0xx.h"
#include "hw_config.h"

// 用戶宏定義 (功能相關)
#define OE GPIO_Pin_5

// 全局變量 (僅 main 使用)
uint32_t sys_tick_cnt = 0;

int main(void) {
    // 局部變量
    uint8_t status = 0;

    // 硬件初始化
    RCC_Configuration();
    NVIC_Configuration();
    GPIO_Configuration();
    TIM_Configuration();
    USART1_Configuration();
    SysTick_Configuration();
    IWDG_Configuration();

    // 功能主循環
    while (1) {
        // 業務邏輯
        if (usart1_rx_flag) {
            process_usart_data();
            usart1_rx_flag = 0;
        }
        // 喂狗、心跳等
        IWDG_ReloadCounter();
    }
}

hw_config.h 核心內容

// 函數聲明
void RCC_Configuration(void);
void NVIC_Configuration(void);
void GPIO_Configuration(void);
void TIM_Configuration(void);
void USART1_Configuration(void);
void SysTick_Configuration(void);
void IWDG_Configuration(void);

// 共享變量外部聲明
extern volatile uint32_t usart1_invalidframe_time;
extern volatile uint8_t usart1_rx_flag;

hw_config.c 變量定義與初始化

#include "hw_config.h"

// 硬件相關全局變量定義
volatile uint32_t usart1_invalidframe_time = 0;
volatile uint8_t usart1_rx_flag = 0;

void SysTick_Configuration(void) {
    SysTick_Config(SystemCoreClock / 1000);  // 1ms 中斷
}

void SysTick_Handler(void) {  // 在 stm32f0xx_it.c 中實現
    if (usart1_invalidframe_time < 0xFFFFFFFF)
        usart1_invalidframe_time++;
}

跨文件變量共享機制

  1. 定義在 hw_config.c (如 usart1_invalidframe_time)
  2. 在 hw_config.h 用 extern 聲明
  3. main.c、stm32f0xx_it.c 僅需 #include "hw_config.h" 即可讀寫

優勢總結

維度傳統單文件分層架構
main.c 可讀性混雜大量初始化代碼純業務邏輯,清晰
硬件移植需在 main 中大量修改只改 hw_config.c/h
中斷訪問變量extern 分散聲明易出錯統一 hw_config.h 管理
團隊協作衝突多硬件/應用分離並行開發

避坑指南

  • 不要在 .h 中定義變量 (多文件 include 會重複定義),只聲明。
  • 中斷中修改共享變量必須加 volatile。
  • 初始化順序:RCC → NVIC → GPIO → 外設 → SysTick → 看門狗。
  • CubeMX 生成代碼可直接映射到 hw_config.c,保持架構整潔。

總結

「main 做業務,hw_config 做硬件」分層思想,配合 extern 共享變量機制,是 STM32 中大型專案可維護、可移植、團隊協作的基石。

Copyright © Windows教程網 All Rights Reserved