stm32標準庫開發需要的基本文件結構

使用STM32標準庫(STM32 Standard Peripheral Library,SPL)開發時,項目中必須包含一些必要的文件,這些文件確保項目能夠正常運行并與MCU硬件交互。以下詳細說明:


一、標準庫核心文件夾說明

使用標準庫開發STM32項目時,通常需要以下主要文件和目錄結構:

Project
│
├── User(用戶應用程序文件夾)
│    ├── main.c                       // 用戶程序入口文件,包含主函數main(),編寫具體應用邏輯
│    └── stm32f10x_conf.h             // STM32標準庫配置文件,選擇啟用的外設庫及相關宏定義
│
├── Libraries(庫文件夾,包含所有基礎支持文件)
│    │
│    ├── CMSIS(Cortex-M處理器軟件接口標準庫)
│    │   │
│    │   ├── Include                  // Cortex-M核心庫通用頭文件
│    │   │   └── core_cm3.h           // Cortex-M3處理器核心寄存器定義,提供NVIC、SysTick等內核功能
│    │   │
│    │   └── Device
│    │       └── ST
│    │           └── STM32F10x
│    │               │
│    │               ├── Include      // STM32F10x MCU硬件寄存器及系統定義頭文件
│    │               │   ├── stm32f10x.h 
│    │               │   │             // STM32F10x芯片的寄存器地址定義和位掩碼宏,所有外設寄存器的基礎定義
│    │               │   └── system_stm32f10x.h
│    │               │                 // 系統時鐘初始化函數聲明及相關系統頻率參數定義
│    │               │
│    │               └── Source       // STM32芯片啟動文件與系統初始化源文件
│    │                   ├── system_stm32f10x.c
│    │                   │             // MCU系統時鐘配置函數實現,包含SystemInit()函數,負責時鐘樹初始化
│    │                   └── startup_stm32f10x_md.s
│    │                                 // STM32啟動匯編代碼,定義中斷向量表,堆棧初始化,調用SystemInit()后進入main()
│    │                                 //(注:不同芯片容量版本啟動文件可能不同,例如_md適合中等密度芯片)
│    │
│    └── STM32F10x_StdPeriph_Driver(STM32標準外設驅動庫)
│         │
│         ├── inc(標準庫外設驅動頭文件,函數聲明)
│         │   ├── stm32f10x_gpio.h     // GPIO外設驅動函數聲明及相關結構定義,用于GPIO初始化及控制
│         │   ├── stm32f10x_rcc.h      // RCC(時鐘控制)驅動函數聲明,提供時鐘使能和系統頻率配置功能
│         │   ├── stm32f10x_usart.h    // USART串口驅動函數聲明,串口通信配置及數據收發函數
│         │   ├── stm32f10x_exti.h     // 外部中斷/事件控制驅動函數聲明,配置外部中斷源和模式
│         │   ├── stm32f10x_tim.h      // 通用定時器驅動函數聲明,用于計時器初始化、PWM輸出和計數功能
│         │   └── (其他外設頭文件,根據項目需求添加)
│         │
│         └── src(標準庫外設驅動源文件,函數具體實現)
│             ├── stm32f10x_gpio.c     // GPIO驅動函數實現,包含GPIO引腳模式配置及輸入輸出控制
│             ├── stm32f10x_rcc.c      // RCC驅動函數實現,提供時鐘系統初始化及各外設時鐘開啟/關閉
│             ├── stm32f10x_usart.c    // USART驅動函數實現,串口通信參數配置及數據發送/接收功能實現
│             ├── stm32f10x_exti.c     // EXTI驅動函數實現,外部中斷配置及中斷服務處理功能
│             ├── stm32f10x_tim.c      // TIM通用定時器驅動函數實現,包含定時、中斷和PWM輸出等功能
│             └── (其他外設源文件,根據項目需求添加)
│
└── Project settings(工程配置文件夾,由IDE自動生成,具體文件根據IDE不同有所差異)├── Project.uvprojx               // Keil MDK項目文件,包含工程配置(芯片型號、編譯選項等)└── (其他IDE工程文件,根據實際開發環境而定)

二、必備的核心文件說明

開發STM32項目時,必須包含以下文件:

1. 啟動文件(startup_xxx.s)
  • 作用:MCU復位后執行的匯編啟動代碼,負責初始化棧指針(SP),PC指針,異常向量表,中斷向量表,調用SystemInit函數后進入main函數。
  • 文件示例startup_stm32f10x_md.s(根據芯片具體型號選擇不同文件)
  • 位置
    Libraries/CMSIS/Device/ST/STM32F10x/Source/Templates/TrueSTUDIO/startup_stm32f10x_md.s
    
    (根據不同IDE,可能路徑不同,如MDK、IAR、GCC分別不同)

2. 系統初始化文件(system_stm32f10x.c/.h)
  • 作用:配置系統時鐘和PLL,設置系統時鐘頻率,以及提供SystemCoreClock變量更新函數。
  • 文件示例system_stm32f10x.csystem_stm32f10x.h
  • 位置
    Libraries/CMSIS/Device/ST/STM32F10x/Source/Templates/system_stm32f10x.c
    Libraries/CMSIS/Device/ST/STM32F10x/Include/system_stm32f10x.h
    

3. 芯片頭文件與寄存器定義(stm32f10x.h)
  • 作用:定義STM32芯片外設和寄存器地址,定義了大量寄存器結構體,便于底層寄存器操作。
  • 文件示例stm32f10x.h
  • 位置
    Libraries/CMSIS/Device/ST/STM32F10x/Include/stm32f10x.h
    

4. 外設驅動標準庫文件(外設驅動函數庫)
  • 作用:提供外設API調用,封裝了GPIO、USART、RCC、ADC、SPI、I2C等常用外設的函數庫。
  • 文件示例
    • GPIO:stm32f10x_gpio.cstm32f10x_gpio.h
    • RCC:stm32f10x_rcc.cstm32f10x_rcc.h
    • USART:stm32f10x_usart.cstm32f10x_usart.h
  • 位置
    Libraries/STM32F10x_StdPeriph_Driver/src/*.c
    Libraries/STM32F10x_StdPeriph_Driver/inc/*.h
    

5. 庫配置頭文件(stm32f10x_conf.h)
  • 作用:用于選擇啟用哪些外設驅動模塊,并配置庫的參數選項。
  • 文件示例stm32f10x_conf.h
  • 位置:通常位于項目的User文件夾(自定義創建)
  • 示例片段:
    /* Define to prevent recursive inclusion -------------------------------------*/
    #ifndef __STM32F10x_CONF_H
    #define __STM32F10x_CONF_H/* Includes ------------------------------------------------------------------*/
    #include "stm32f10x_gpio.h"
    #include "stm32f10x_rcc.h"
    #include "stm32f10x_usart.h"
    // 啟用需要的外設庫頭文件,未啟用的庫就注釋掉/* Exported macro ------------------------------------------------------------*/
    #define assert_param(expr) ((void)0)#endif /* __STM32F10x_CONF_H */
    

6. Cortex-M3/M4 核心庫文件(core_cm3.h 或 core_cm4.h)
  • 作用:提供Cortex-M內核基礎函數,如NVIC中斷、SysTick定時器、系統復位、低功耗管理。
  • 文件示例core_cm3.h
  • 位置
    Libraries/CMSIS/Include/core_cm3.h
    

7. 用戶應用程序文件(main.c等)
  • 作用:用戶主程序入口,包含用戶自定義的功能代碼。
  • 位置:自定義放置于項目的User文件夾中,示例如下:
    #include "stm32f10x.h"int main(void)
    {// 用戶代碼初始化while(1){// 用戶應用循環}
    }
    

以上為STM32標準庫開發項目所必須使用和包含的文件及目錄結構詳細說明。實際項目開發時,應根據芯片型號和應用需求適當增減外設驅動文件。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73138.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73138.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73138.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學生管理系統(需求文檔)

需求: 采取控制臺的方式去書寫學生管理系統 分析: 初始菜單: “----------歡迎來到java學生管理系統----------” “1:添加學生” “2:刪除學生” “3:修改學生” “4:查詢學生” “5:…

Java算法OJ(13)雙指針

目錄 1.前言 2.正文 2.1快樂數 2.2盛最多水的容器 2.3有效的三角形的個數 2.4和為s的兩個數 2.5三數之和 2.6四數之和 3.小結 1.前言 哈嘍大家好吖,今天繼續加練算法題目,一共六道雙指針,希望能對大家有所幫助,廢話不多…

SpringBoot分布式定時任務實戰:告別重復執行的煩惱

場景再現:你剛部署完基于SpringBoot的集群服務,凌晨3點突然收到監控告警——優惠券發放量超出預算兩倍!檢查日志發現,兩個節點同時執行了定時任務。這種分布式環境下的定時任務難題,該如何徹底解決? 本文將…

MySQL 設置允許遠程連接完整指南:安全與效率并重

一、為什么需要遠程連接MySQL? 在分布式系統架構中,應用程序與數據庫往往部署在不同服務器。例如: Web服務器(如NginxPHP)需要連接獨立的MySQL數據庫數據分析師通過BI工具直連生產庫多服務器集群間的數據同步 但直接…

系統架構書單推薦(一)領域驅動設計與面向對象

本文主要是個人在學習過程中所涉獵的一些經典書籍,有些已經閱讀完,有些還在閱讀中。于我而言,希望追求軟件系統設計相關的原則、方法、思想、本質的東西,并希望通過不斷的學習、實踐和積累,提升自身的知識和認知。希望…

動態規劃-01背包

兜兜轉轉了半天,發現還是Carl寫的好。 看過動態規劃-基礎的讀者,大概都清楚。 動態規劃是將大問題,分解成子問題。并將子問題的解儲存下來,避免重復計算。 而背包問題,就是動態規劃延申出來的一個大類。 而01背包&…

使用VS2022編譯CEF

前提 選擇編譯的版本 CEF自動編譯,在這里可以看到最新的穩定版和Beta版。 從這里得出,最新的穩定版是134.0.6998.118,對應的cef branch是6998。通過這個信息可以在Build requirements查到相關的軟件配置信息。 這里主要看Windows下的編譯要…

C++20:玩轉 string 的 starts_with 和 ends_with

文章目錄 一、背景與動機二、string::starts_with 和 string::ends_with(一)語法與功能(二)使用示例1\. 判斷字符串開頭2\. 判斷字符串結尾 (三)優勢 三、string_view::starts_with 和 string_view::ends_w…

智能飛鳥監測 守護高壓線安全

飛鳥檢測新紀元:視覺分析技術的革新應用 在現代化社會中,飛鳥檢測成為了多個領域不可忽視的重要環節。無論是高壓線下的安全監測、工廠內的生產秩序維護,還是農業區的作物保護,飛鳥檢測都扮演著至關重要的角色。傳統的人工檢測方…

ADC噪聲全面分析 -04- 有效噪聲帶寬簡介

為什么要了解ENBW? 了解模數轉換器 (ADC) 噪聲可能具有挑戰性,即使對于最有經驗的模擬設計人員也是如此。 Delta-sigma ADC 具有量化和熱噪聲的組合,這取決于 ADC 的分辨率、參考電壓和輸出數據速率 (ODR)。 在系統級別,額外的信…

STM32單片機uCOS-Ⅲ系統10 內存管理

目錄 一、內存管理的基本概念 二、內存管理的運作機制 三、內存管理的應用場景 四、內存管理函數接口講解 1、內存池創建函數 OSMemCreate() 2、內存申請函數 OSMemGet() 3、內存釋放函數 OSMemPut() 五、實現 一、內存管理的基本概念 在計算系統中,變量、中…

考研課程安排(自用)

文章目錄 408數據結構(王道)計算機組成原理(王道)操作系統(王道)計算機網絡(湖科大版) 數學一高等數學(微積分)線性代數和概率論 408 數據結構(王…

ultraiso制作u盤啟動

UltraISO制作U盤啟動盤的方法 UltraISO是一款功能強大的工具,可以幫助用戶將ISO鏡像文件寫入U盤,從而制作成可啟動的系統安裝盤。以下是詳細的步驟和注意事項: 1. ?準備工作? ?硬件準備?:一個容量至少為8GB的U盤&#xff0…

C語言-發布訂閱模式詳解與實踐

文章目錄 C語言發布訂閱模式詳解與實踐1. 什么是發布訂閱模式?2. 為什么需要發布訂閱模式?3. 實際應用場景4. 代碼實現4.1 UML 關系圖4.2 頭文件 (pubsub.h)4.3 實現文件 (pubsub.c)4.4 使用示例 (main.c) 5. 代碼分析5.1 關鍵設計點5.2 實現特點 6. 編譯…

藍橋杯2023年第十四屆省賽真題-異或和之差

題目來自DOTCPP: 思路: 什么是異或和? ①題目要求我們選擇兩個不相交的子段,我們可以枚舉一個分界線i,子段1在 i 的左邊, 子段2在 i 的右邊,分別找到子段1和子段2的最大值、最小值。 ②怎么確…

Linux作業2——有關文件系統權限的練習

1、創建/www目錄,在/www目錄下新建name和https目錄,在name和https目錄下分別創建一個index.html文件,name下面的index.html文件中包含當前主機的主機名,https目錄下的index.html文件中包含當前主機的ip地址。 #創建/www目錄&…

leeCode 70. 爬樓梯

假設你正在爬樓梯。需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢? 示例 1: 輸入:n 2 輸出:2 解釋:有兩種方法可以爬到樓頂。 1. 1 階 1 階 2. 2 階 示例 2&#x…

算法題(105):小貓爬山

審題: 本題需要我們找出將n個小貓放在有限重的纜車上運下山所需的最小纜車數 時間復雜度分析:本題的數據量小于等于18,所以我們在做好剪枝的前提下可以使用深度優先搜索解題 思路: 方法一:dfs 搜索策略:將小…

第十六章:Specialization and Overloading_《C++ Templates》notes

Specialization and Overloading 一、模板特化與重載的核心概念二、代碼實戰與測試用例三、關鍵知識點總結四、進階技巧五、實踐建議多選題設計題代碼測試說明 一、模板特化與重載的核心概念 函數模板重載 (Function Template Overloading) // 基礎模板 template<typename…

多協議兼容+高并發處理:EasyCVR如何破解AI安防規模化落地難題?

隨著AI技術在安防領域的深入應用&#xff0c;規模化部署面臨兩大核心挑戰&#xff1a;設備協議碎片化導致的接入壁壘與海量視頻流并發帶來的性能瓶頸。TSINGSEE青犀視頻的EasyCVR平臺通過“多協議兼容高并發處理”雙引擎驅動&#xff0c;結合云邊端協同架構與智能算法優化&…