keil 5 STM32工程介紹

目錄

一、工程文件介紹

1.自動生成的文件

2.自建文件

(1)USER 文件夾

(2)FWLIB 文件夾

(3)CMSIS 文件夾

二、工程創建教程

1.下載固件庫

2.創建工程

(1)創建不完善的工程

(2)移植文件

(3)配置工程


一、工程文件介紹

????????如下圖所示是一個 STM32 的 keil 5 工程文件,其中包含了其他 keil 5 工程文件基本都包含的文件,其他工程可能還有其他文件,但并非基本文件。部分文件夾是用戶自定義的,名稱可能不完全一致,但內容文件應當是類似的。接下來將一一介紹其中的文件。

1.自動生成的文件

? ? ? ? 如上圖所示,除了文件夾?CMSISFWLIBUSER?外,其他文件均為創建工程和編譯后產生的。

  1. 最下面綠色標的?.uvprojx?文件是工程的本體,雙擊該文件即可打開 keil 5 并進入工程。
  2. 倒數第二個.uvoptx文件是工程的選項配置文件,它存儲了針對該工程的所有軟件配置,包括編譯器的優化等級和警告級別、匯編器和鏈接器的設置、頭文件包含路徑、預處理宏定義、Flash 下載算法的選擇等,即Options for Target設置頁面中的內容。若刪除此文件,再次打開工程時,Keil 會重新生成一個使用所有默認設置的新的.uvoptx文件。
  3. 順數第二個 DebugConfig 文件夾中有一個 DBGCONF 文件,它保存的是Options for Target設置頁面的Debug調試設置,在較新版本的 Keil MDK 中會自動生成這個文件,其將調試相關的設置從傳統的上面講的?.uvoptx 文件中分離出來獨立管理。若刪除此文件,再次打開工程時,Keil會重新生成一個使用默認 Debug 設置的 DebugConfig 文件夾和DBGCONF 文件。
  4. 倒數第三個 .uvguix 文件是工程的用戶界面配置文件,保存了用戶的個性化 IDE 設置,如窗口的布局和位置、工具欄的顯示和隱藏、代碼編輯器的字體和顏色主題、項目瀏覽器等視圖的狀態以及其他所有個性化設置。若刪除此文件,再次打開工程時,Keil 會重新生成一個使用默認界面配置的新文件,工程代碼和編譯設置完全不受影響,只是個人界面布局需要重新設置。
  5. 工程中自動生成的 Listings 文件夾和 Objects 文件夾分別和 Options for Target 設置頁面中的 Output 和 Listing 設置有關,可以安全刪除,暫不做詳細介紹。

2.自建文件

? ? ? ? 這里要介紹的是USERFWLIBCMSIS三個文件夾。

(1)USER 文件夾

????????USER?文件夾是自己創建的文件,可以用來存放用戶代碼,例如 main.c,以及其他自建源文件、頭文件,像如果要設計一個電機控制模塊 motor_control.c/.h,可以存放在這里。當然了,這取決于個人習慣,可以根據習慣創建其他文件夾用于存放編寫完成的應用程序。

(2)FWLIB 文件夾

????????FWLIB?文件夾是自己創建的文件,表示Firmware Library(固件庫),可以用來存放外設標準庫,并使用 inc 子文件夾和 src 子文件夾將頭文件和源文件分開,文件夾內容如下圖所示:????????

????????上述文件中的 stm32f10x_ppp.c/.h 是對應外設的庫文件,有了這些庫文件就可以使用對應外設的標準庫函數了。其中另有 misc.c/.h 文件,這里面定義了NVIC的相關配置函數(如 NVIC_Init() 等)以及一個配置 SysTick 的時鐘源的函數。若要使用標準庫開發STM32,這些文件是必不可少的,若使用直接操作寄存器的方式開發STM32,這些文件是不需要的。

(3)CMSIS 文件夾

????????接下來介紹自建的 CMSIS 文件夾中的內容。文件夾內容如圖所示:

? ? ? ? 首先是 core_cm3.c/.h 文件,它們是ARM公司提供的 CMSIS 核心文件,它們為所有基于Cortex-M3內核的芯片提供了一套統一的、標準化的軟件接口,用于訪問和控制內核本身的核心功能,如中斷控制器(NVIC)、系統定時器(SysTick)、特殊指令以及CPU寄存器,從而實現了對處理器底層硬件的抽象,為不同廠商的芯片庫和應用程序(如RTOS)提供了可移植的基礎。

? ? ? ? 然后是 startup_stm32f10x_hd.s 文件,這是一個使用匯編語言編寫的啟動文件,STM32 上電或者復位后首先執行這個文件,負責進行最底層的硬件初始化,包括初始化堆棧指針、初始化中斷向量表、執行復位處理程序(Reset_Handler())和跳轉到 main 函數。

? ? ? ? 接著是 stm32f10x.h?文件,其在標準外設庫開發中扮演著基石和總樞紐的角色,其作用主要有芯片型號選擇與配置、定義外設寄存器結構體和內存映射、定義外設寄存器位定義等等。

? ? ? ? 下面是?stm32f10x_conf.h?文件,這個文件中,前半部分是標準外設庫頭文件的包含,后半部分是斷言相關的宏定義。如果不適用標準外設庫開發,這個文件是不需要的。

? ? ? ? 再后面到 stm32f10x_it.c/.h 文件,這個文件中包含了一些異常的中斷處理函數模板,但都是空函數,實際上我們可以在其他地方定義中斷服務函數,所以這個文件不是必要的。但可以保留,以集中管理中斷服務程序,取決于個人。

? ? ? ? 最后是?system_stm32f10x.c/.h?文件,這個文件中有大量的和時鐘配置有關的函數定義,是非常重要的一個文件,即使是使用直接操作寄存器的方式開發STM32也建議保留,當然也可以自己自定義初始化時鐘代碼。

二、工程創建教程

1.下載固件庫

? ? ? ? 首先,搜索“ST官網”,進入中國大陸地區官網:

? ? ? ? 進入官網后,依次選擇“工具與軟件”、“嵌入式軟件”、“STM32嵌入式軟件”。如下圖所示:

? ? ? ? 接著,在網頁左側選擇“STM32標準外設軟件庫”,并選擇需要的芯片系列,我將以STM32F103RCT6為例,選擇“F1”。如下圖所示:

? ? ? ? 至此,就可以選擇版本下載固件庫了。下載需要登陸,沒有注冊過的可以注冊一個,不難。下載界面如下圖:

? ? ? ? 得到的文件包打開后如下圖所示,其中主要需要第二個?Libraries?文件夾中的文件。第一個_htmresc文件夾是一些官方圖標,不重要。第三個 Project 文件夾包含各個外設的使用示例和空的工程模板,有耐心的話可以做參考用。第四個Utilities文件夾是ST評估板的相關示例和驅動,如果有用ST官方指定的開發板的話可以使用。最下面的stm32f10x_stdperiph_lib_um文件是一個已編譯的HTML幫助文件,是標準外設庫的官方離線文檔,用于查詢所有庫函數的詳細用法、參數和示例代碼,可以做學習使用。

2.創建工程

? ? ? ? 記住如下步驟,即可自己手動創建基于標準庫開發的STM32 keil工程,而不用再跟著教學視頻做。現在以STM32F103RCT6為例創建工程。

? ? ? ? 首先,記住下面這些文件,這些是建議工程要包含的文件:

  • ① stm32f10x.h
  • ② stm32f10x_conf.h
  • ③ system_stm32f10x.c/.h
  • ④ stm32f10x_it.c/.h
  • ⑤ core_cm3.c/.h
  • ⑥ startup_stm32f10x_hd.s
  • ⑦ 外設標準庫文件

? ? ? ? 現在,創建工程分成三大步,一是使用 keil 5 生成一個不完善的工程,二是添加上述文件,三是做簡要配置。

(1)創建不完善的工程

? ? ? ? 第一小步,創建一個工程文件夾,可以在桌面等處創建,如下圖所示:

? ? ? ? 第二小步,在這個文件夾中創建三個文件夾(CMSIS、FWLIB、USER),認為麻煩也可以只創建兩個文件夾(FWLIB、USER),然后把上述①~⑦的文件全塞 FWLIB 里。怎么做完全取決于個人。如下圖所示:

? ? ? ? 第三小步,打開keil 5 MDK,選擇 “Project”、“New μVision Project”。然后選擇進入剛剛創建的工程文件夾內。

? ? ? ? 第四小步,在彈出的芯片選擇界面選擇對應的芯片系列,我這里選擇“STM32F103RC”。如果沒有下載芯片支持包的可以點這里的 “Pack Installer” 進行下載。選擇完芯片直接關掉彈出來的“Manage Run-Time Environment” 界面,這個界面若感興趣的可以自己去了解下。

(2)移植文件

? ? ? ? 打開從ST官網下載的外設固件庫,打開Libraries文件夾。得到如圖所示頁面:

? ? ? ? 第二個文件夾 STM32F10x_StdPeriph_Driver 里面的就是上面標的第七點“外設標準庫文件”了。打開,將里面的inc文件夾(裝著外設標準庫頭文件)和src文件夾(裝著外設標準庫源文件)直接復制粘貼到我們創建的FWLIB文件夾中。如果認為有哪些外設根本不用的話,也可以將其源文件和頭文件從中剔除。

? ? ? ? 然后打開固件包的CMSIS文件夾,可以在其中找到這幾個需要的文件:①、③、⑤、⑥,都比較好找,自己找一下也好更多的了解一下這個固件包的文件結構。要注意的是,其中⑥?startup_stm32f10x_hd.s 文件從STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup來到如下這個頁面:

這里分為不同編譯器需要使用的啟動文件,第一個是keil中的ARMCC/ARMClang編譯器,我們創建的是keil工程,需要選擇這里面的啟動文件。下面分別是GCC編譯器、IAR的ICCARM編譯器和某個編譯器對應所需的啟動文件。至于里面的啟動文件選擇什么,這個取決于芯片的FLASH容量,使用一款芯片時應當對自己這款芯片的FLASH容量大小有所了解,隨便一搜即有結果,這里先不多介紹。

? ? ? ? 剩余②?stm32f10x_conf.h、④?stm32f10x_it.c/.h 在這個文件夾里是沒有的,如果開發不是那么深的話,④是沒必要的其實,中斷處理程序放在哪里都行,這個文件主要是給了一些中斷處理程序模板。但我們還是都加入進去吧。

? ? ? ? ②和④可以在固件包中的工程模板中找到。如下圖所示:

? ? ? ? 將①②③④⑤⑥這些文件都放入我們創建的CMSIS文件夾中后,現在工程已經完整了,接下來只需要簡單配置一下工程即可。

(3)配置工程

? ? ? ? 點擊“Manage Project Items”圖標,如下圖所示:

? ? ? ? 在彈出的頁面中將自動生成的 Source Group 1 組雙擊改名為 CMSIS,并增加兩組 FWLIB 和 USER,對應我們自己創建的三個文件夾。然后選中某一組,在右側點擊 “Add Files”,將對應文件夾中的所有文件加入到組中。注意文件夾不能被加入,然后要將所有源文件、頭文件和啟動文件加入到組中。需要選擇文件類型,否則有的文件不顯示,如下圖所示:

? ? ? ? 然后點擊 “Options for Target”,選擇 “C/C++”頁面,加入頭文件包含路徑(點擊右側的三個點)。如下圖所示:

有頭文件的文件夾路徑都要包含,包括USER、CMSIS、FWLIB的inc文件夾這三個地方。如下圖所示:

? ? ? ? 然后,還是同樣的 “C/C++” 頁面,在上方的 “Define” 框中寫入 USE_STDPERIPH_DRIVERSTM32F10X_HD,使用英文逗號隔開,如下圖所示:

? ? ? ? 前者 USE_STDPERIPH_DRIVER 宏是使用標準外設庫必須要定義的,這在 stm32f10x.h 文件中有說明,如下圖所示:

????????當然了,也可以不在上面的預處理器定義框中去定義,可以在文件中定義,只是建議還是在預處理器中定義的好。

? ? ? ? 至于第二個宏 STM32F10X_HD,顯然這和芯片類型有關(HD和前面的FLASH容量大小有關,同樣在stm32f10x.h文件中顯示需要定義這個宏,如下圖所示,不定義這個宏編譯時將會報錯。不過,不在上面說的預處理器中預定義也不會報錯,這可能是在選擇了芯片之后在哪里會自動定義這個宏。所以不定義這個宏也沒問題。

? ? ? ? 至此,我們已經完成了工程的創建,可以自己編寫 main 文件和其他源文件、頭文件并放入 USER 組中來開發 STM32 了。

? ? ? ? 最后,建議有時間還是自己去鉆研一下上面談到的文件①~⑦,文件并不算太難看懂,看完會對 STM32 有更深的理解,這其實也是學習 STM32 的一個必要的過程。

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

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

相關文章

AI大模型如何重塑日常?從智能辦公到生活服務的5個核心改變

AI大模型重塑日常:從智能辦公到生活服務的5個核心改變一、引言? 簡述AI大模型技術的快速發展背景,說明其已從技術領域逐步滲透到大眾日常生活? 提出核心觀點:AI大模型正從辦公和生活服務兩大場景,深度改變人們的行為模式與…

邁威通信從送快遞角度教你分清網絡二層和三層

還在為網絡里的二層、三層概念頭大?其實就像送快遞那么簡單!今天邁威通信用最接地氣的方式給你講明白~網絡傳輸 送快遞?沒錯!二層網絡:本地送貨員負責同小區的包裹配送(局域網傳輸),就像小區里的快遞站(對應設備:交換機)&#…

【Linux】網絡安全管理:SELinux 和 防火墻聯合使用 | Redhat

本專欄文章持續更新,新增內容使用藍色表示。 往期相關內容 【Linux】權限管理詳解(三):SELinux安全性管理 | Redhat-CSDN博客 【Linux】網絡安全管理:Netfilter、nftables 與 Firewalld | Redhat_linux netfilter-C…

微論-構建完整的智能環:具身智能系統的層級化架構探析

### **構建完整的智能環:具身智能系統的層級化架構探析**#### **引言:邁向與現實交互的智能**人工智能的發展正經歷一場從“虛擬”走向“現實”的范式遷移。具身智能,作為這一浪潮的核心,強調智能體必須擁有“身體”,并…

Spring如何解決循環依賴:深入理解三級緩存機制

Spring如何解決循環依賴:深入理解三級緩存機制 引言 在我們之前的文章中,我們探討了什么是循環依賴以及它帶來的問題。作為Java生態系統中最重要的框架之一,Spring Framework在處理循環依賴方面有著獨特而精妙的解決方案。今天,讓…

HTML第六課:表格展示

HTML第六課&#xff1a;表格展示學生花名冊學生花名冊 效果示列 代碼展示 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang"zh-CN"> <head><meta …

醫療行業API管理優化:使用QuickAPI提高數據安全與接口性能

背景與挑戰在醫療行業&#xff0c;特別是醫院信息系統&#xff08;HIS&#xff09;或其他相關部門&#xff08;如實驗室信息系統LIS、藥品管理系統等&#xff09;&#xff0c;數據安全和隱私保護一直是核心問題。然而&#xff0c;許多醫療機構仍然面臨著以下問題&#xff1a;數…

docker 部署RustDesk服務

最近要用到遠程桌面服務&#xff0c;網上的資料很豐富&#xff0c;但是和我的情況有點點區別&#xff0c;我是要搭一臺局域網使用的遠程桌面服務。 首先是源的問題&#xff1a; 很多都是不能用的&#xff0c;我用的docker桌面版&#xff0c; 其他的不重要&#xff0c;源地址&…

Kubernetes 中為 ZenTao 的 Apache 服務器添加請求體大小限制

本文將詳細介紹如何通過修改 Apache 配置模板并在 Kubernetes 中使用 ConfigMap,為 ZenTao 系統添加請求體大小限制(LimitRequestBody)。 背景介紹 在企業級項目管理軟件 ZenTao 的部署過程中,我們經常需要對 Apache 服務器進行安全加固。其中一個重要的安全措施是限制客戶…

綜述 | Agentic RL for LLM的最新進展與未來挑戰,idea滿滿

近年來&#xff0c;大語言模型&#xff08;LLMs&#xff09;和強化學習&#xff08;RL&#xff09;的融合正在徹底改變我們構建和部署AI系統的方式。早期的LLM強化學習&#xff08;LLM-RL&#xff09;主要關注如何通過人類反饋&#xff08;如RLHF&#xff09;讓模型生成更符合人…

【代碼隨想錄算法訓練營——Day3】鏈表——203.移除鏈表元素、707.設計鏈表、206.反轉鏈表

LeetCode題目鏈接 https://leetcode.cn/problems/remove-linked-list-elements/ https://leetcode.cn/problems/design-linked-list/ https://leetcode.cn/problems/reverse-linked-list/ 題解 203.移除鏈表元素 重要的是創立頭結點&#xff0c;這點在寫題前已經經受過提示。 注…

CI/CD流水線驅動自動化流程深度解析:選型、競品、成本與資源消耗

目錄 一、CI/CD是什么&#xff1f;核心定位與價值 二、選型與競品分析 (GitLab CI vs. Jenkins vs. GitHub Actions vs. GitLab CI) 三、部署成本分析 四、服務器資源消耗分析 五、給您的最終建議 一、CI/CD是什么&#xff1f;核心定位與價值 CI/CD&#xff08;持續集成/…

工廠辦公環境如何實現一臺服務器多人共享辦公

在現代化工廠的辦公環境中&#xff0c;如何通過一臺服務器實現多人共享辦公是一個既實用又高效的需求。這種方案不僅能降低硬件成本&#xff0c;還能簡化IT管理&#xff0c;提高數據安全性。在工廠辦公環境中&#xff0c;通過云飛云共享云桌面實現一臺服務器多人共享辦公&#…

系統性學習數據結構-第三講-棧和隊列

系統性學習數據結構-第三講-棧和隊列1. 棧1.1 棧和隊列1.2 棧的實現2. 隊列2.1 概念與結構2.2 隊列的實現3. 棧和隊列算法題3.1 [有效的括號](https://leetcode.cn/problems/valid-parentheses/description/)3.2 [用隊列實現棧](https://leetcode.cn/problems/implement-stack-…

硬件(三) 通信方式、串口通信

一、通信類型&#xff08;一&#xff09;并行通信多個比特通過并行線同時傳輸&#xff0c;傳輸速率快&#xff0c;但會大量占用芯片資源&#xff0c;在對資源敏感的場景下不太適用。&#xff08;二&#xff09;串行通信把數據拆成單個比特&#xff0c;按順序在一根總線上發送。…

vsan default storage policy 具體是什么策略?

vSAN Default Storage Policy&#xff08;vSAN 默認存儲策略&#xff09;是 VMware vSAN 部署后自動創建的基礎存儲策略&#xff0c;其核心目標是在“通用性”和“可靠性”之間取得平衡&#xff0c;為大多數虛擬機提供默認的數據保護和存儲服務&#xff0c;無需管理員手動創建策…

雨后陽光為何更強烈?

1. 降雨后的輻射是否會增強一般來說&#xff0c;降雨時天空多云&#xff0c;云層對太陽輻射有強烈削弱作用&#xff0c;所以降雨時的短波輻射顯著下降。但雨后&#xff0c;空氣濕度大、顆粒物被沖刷、天空轉晴時&#xff0c;大氣透明度會提高&#xff0c;短波輻射相較于降雨前往…

美團發布 | LongCat-Flash最全解讀,硬剛GPT-4.1、Kimi!

一、導讀 本報告解析了美團LongCat團隊推出的LongCat-Flash模型&#xff0c;一個擁有5600億參數的混合專家模型&#xff08;Mixture-of-Experts, MoE&#xff09;。面對大規模語言模型在計算資源和效率上的挑戰&#xff0c;LongCat-Flash旨在實現計算效率與高級智能體&#xf…

Ubuntu 18.04 上升級 gcc 到 9.4

18.04 默認的源中可能沒有 GCC-9.3 或更新版本&#xff0c;在終端運行以下命令來添加 PPA&#xff1a; sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update2.安裝 GCC 和 G sudo apt install gcc-9 g-93.更新替代版本 如果系統中安裝了多個 GCC 版本&#x…

.NET GcPDF V8.2 新版本:人工智能 PDF 處理

一、GcPDF 產品簡介 GcPDF&#xff08;GrapeCity Documents for PDF&#xff09;是葡萄城&#xff08;GrapeCity&#xff09;推出的一款功能強大的 .NET PDF 開發組件&#xff0c;旨在為開發人員提供高效、靈活的 PDF 文檔處理解決方案。無論是創建全新 PDF 文檔、編輯現有 PD…