【STM32】從新建一個工程開始:STM32 新建工程的詳細步驟

STM32 開發通常使用 Keil MDKSTM32CubeMXIAR 等工具來創建和管理工程。此處是 使用 Keil MDK5 + STM32CubeMX 創建 STM32 工程的詳細步驟。

新建的標準庫工程文件已上傳至資源中,下載后即可直接使用。

標準庫新建 STM32 工程的基本目錄結構:STD_STM32F103RC_Demo

1. 新建 STM32 工程的基本目錄結構

在 STM32 工程中,通常會有以下幾個文件夾:
工程構架
新建工程

外設庫(FWLib):存放 STM32 官方提供的驅動庫,例如 HAL 庫或標準外設庫(StdPeriph Lib
用戶文件(USER):存放用戶編寫的代碼,如 main.c
工程文件(MDK-ARM):存放 Keil 相關的 *.uvprojx 工程文件
核心文件(COER):CMSIS 核心支持庫
編譯中間文件(OBJ):存放編譯過程中生成的 .o 文件
系統文件(SYSTEM):存放 STM32 系統初始化相關的 system_stm32f10x.c

2. 使用 STM32CubeMX 生成工程

? 2.1 安裝必要的軟件
? Keil MDK-ARM(用于編寫和編譯代碼)
? STM32CubeMX(用于生成初始化代碼)
? ST-Link 驅動 和 FlyMcu(用于調試和燒錄)

? 2.2 創建 STM32CubeMX 工程

  1. 打開 STM32CubeMX,點擊 “New Project
  2. 選擇目標 STM32 芯片(例如 STM32F103C8T6)
  3. 配置文件:時鐘(RCC)、串口(USART)、GPIO、定時器(TIM)等外設
  4. 選擇代碼生成方式
    • 庫類型:HAL 庫(推薦)或 LL 庫
    • IDE 選擇:Keil MDK-ARM
  5. 點擊“Generate Code” 生成工程
    流程一
    流程二
    流程三
標準庫移植 STM32F10x_StdPeriph_Lib_V3.5.0:

標準庫目錄:
在這里插入圖片描述
移植第一 步在 COER 文件夾下:

G:\(stm32)\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
文件夾下的文件:

在這里插入圖片描述
文件夾:

G:\(stm32)\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
添加文件:startup_stm32f10x_hd.s   和    startup_stm32f10x_md.s

在這里插入圖片描述
移植第二步在 USER 文件夾下:
進入標準庫的文件夾中:

G:\(stm32)\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x

在這里插入圖片描述
在標準庫的文件夾中:

G:\(stm32)\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template

在這里插入圖片描述

移植第三步在 FWLib 文件夾下:

G:\(stm32)\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver
將 文件夾 inc 和 src 復制到工程目錄的 FWLib 下

在這里插入圖片描述
第四步 在 Keil uVision5 中新建的工程目錄中,將標準庫的 .c.h 文件分別加入在工程中:
在這里插入圖片描述
在這里插入圖片描述

以上。便添加完成了標準庫中的所有 .c 文件,之后點擊魔法棒,開始添加 .h 文件。

第一步:改為V5版本:
在這里插入圖片描述
第二步:進入C/C++目錄下新增目錄:

\COER
\FWLib\inc
\USER

在這里插入圖片描述
在這里插入圖片描述
然后在 Define 中添加宏:

STM32F10X_HD,USE_STDPERIPH_DRIVER

點擊 OK 結束。以上,便完成了標準庫的前置配置。接下來我們測試一下代碼是否能夠調試與運行↓:

在這里插入圖片描述
配置一下,將生成文件的目錄放在OBJ文件夾下:
在這里插入圖片描述

LED 亮滅:寫一段點亮 LED 燈的代碼:

main.c 中編寫代碼:

int	 main(void)
{GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStruct);GPIO_WriteBit(GPIOC, GPIO_Pin_7, Bit_RESET);}
編譯工程
  • 點擊“Build”按鈕(F7)編譯代碼
  • 若無報錯,生成 *.hex 文件

然后點擊編譯:此時會將代碼生成至OBJ文件夾下:
打開 FlyMcu.exe
在這里插入圖片描述
在這里插入圖片描述
這里按一下開發板上的復位鍵(記得此時開發板的按鈕開關模式為 ISR)

開發板的 ISR(Interrupt Service Routine)和 RUN(運行模式)ISR(中斷服務程序) 是 當外部或內部事件發生時,CPU 自動執行的特定函數,用于響應和處理中斷事件。
📌 1.1 ISR 主要用于:外部中斷(按鍵、傳感器觸發)定時器中斷(周期性任務、PWM 計時)串行通信中斷(USART、I2C、SPI 數據接收)DMA 傳輸完成中斷異常處理(如硬件故障)? 1.2 ISR 的運行流程1.中斷發生(如 GPIO 觸發、定時器超時)。2.CPU 停止當前任務,保存上下文(寄存器、堆棧)。3.跳轉到 ISR 處理程序,執行中斷任務。4.ISR 結束,恢復原任務,繼續運行。在嵌入式系統中,RUN 模式指的是 MCU 正常運行的狀態。
📌 MCU 可能有多種運行模式,如:RUN 模式(正常運行)SLEEP 模式(低功耗模式,CPU 暫停但外設運行)STOP 模式(更低功耗,RAM 保持但 CPU 停止)STANDBY 模式(最低功耗,RAM 斷電)

流程四
以上。代碼便燒錄成功了。然后將按鈕切換至 RUN 運行模式,
請添加圖片描述
測試成功。以上,是標準庫新建工程的流程。

以上。僅供學習與分享交流,請勿用于商業用途!轉載需提前說明。

我是一個十分熱愛技術的程序員,希望這篇文章能夠對您有幫助,也希望認識更多熱愛程序開發的小伙伴。
感謝!

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

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

相關文章

探索 Trossen AI:從 Aloha到智能機器人平臺的進化之路

在人工智能與機器人技術快速發展的當下,科研硬件的性能與成本成為影響行業創新的重要因素。Trossen Robotic為在機器人領域二十余年的知名企業,近日推出的 Trossen AI 系列產品,為科研機構與開發者提供了高性能、高性價比的解決方案。 Trosse…

C語言:5.20程序練習題

打印一個菱形圖案。程序分為兩部分&#xff1a;上半部分和下半部分。上半部分打印一個逐漸增大的星號圖案&#xff0c;下半部分打印一個逐漸縮小的星號圖案。 #include<stdio.h> int main() {int row 5;//定義行數int t 2;for (int i row; 0 < i; i--){for (int k…

一些docker命令

一、基礎命令 查看 Docker 版本 docker --version 或 docker version&#xff1a;顯示 Docker 客戶端和服務器的版本信息。 查看 Docker 系統信息 docker info&#xff1a;顯示 Docker 系統的詳細信息&#xff0c;包括鏡像、容器數量、存儲驅動類型等。 Docker 服務管理 s…

C語言內容

C語言是一門經典且廣泛應用的編程語言&#xff0c;具有以下基礎要點&#xff1a; 基本數據類型 包括整型&#xff08;如 int &#xff09;、字符型&#xff08; char &#xff09;、浮點型&#xff08; float 和 double &#xff09;等&#xff0c;用于定義不同類型的變量來…

Python----數據可視化(Pyecharts一:介紹安裝,全局配置,系列配置)

一、PyEcharts介紹 1.1、概況 Echarts 是一個由百度開源的數據可視化&#xff0c;憑借著良好的交互性&#xff0c;精巧的圖表設計&#xff0c;得到了眾多開發者的認可。而 Python 是一門富有表達力的語言&#xff0c;很適合用于數據處理。當數據分析遇上數據可視化時&#xff…

dockerfile 編寫入門

Dockerfile編寫指南 Dockerfile是一個文本文件&#xff0c;其中包含了一系列的指令和參數&#xff0c;用于定義如何構建Docker鏡像。一個良好編寫的Dockerfile不僅可以確保鏡像的構建過程高效、可靠&#xff0c;還可以使得鏡像更加安全和易于維護。 1. Dockerfile基本結構和語…

Git 本地常見快捷操作

Git 本地常見快捷操作 &#x1f4cc; 1. 基本操作 操作命令初始化 Git 倉庫git init查看 Git 狀態git status添加所有文件到暫存區git add .添加指定文件git add <file>提交更改git commit -m "提交信息"修改最后一次提交信息git commit --amend -m "新…

如何處理PHP中的文件上傳錯誤

如何處理PHP中的文件上傳錯誤 在Web開發中&#xff0c;文件上傳是一個常見的功能需求。然而&#xff0c;文件上傳過程中可能會遇到各種錯誤&#xff0c;如文件大小超出限制、文件類型不被允許、上傳過程中斷等。為了確保用戶能夠順利上傳文件&#xff0c;并且開發者能夠有效地…

Linux--普通文件的管理

目錄 1、創建根目錄結構中的所有的普通文件 2、列出所有賬號的賬號名 3、將/etc/passwd中內容按照冒號隔開的第三個字符從大到小排序后輸出所有內容 4、列出/etc/passwd中的第20行-25行內容 head命令 tail命令 5、切割出你的ip地址和mac地址 ip地址 MAC地址 6、切割…

【SpringMVC】常用注解:@RequestBody

1.作用 用于獲取請求實體內容&#xff0c;直接使用得到的是keyvalue&keyvalue的數據。獲取請求實體內容不適用get請求。 2.屬性 required 描述是否有請求體&#xff0c;默認值為true。當取值為true時&#xff0c;get 請求方式會報錯。如果取值為false&#xff0c;get請…

RK3588 遠程 SSH時出現WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 翻譯過來就是 警告&#xff1a;遠程主機標識已更改&#xff01; 此報錯是由于遠程的主機的公鑰發生了變化導致的。 ssh服務是通過公鑰和私鑰來進行連接的&#xff0c;它會把每個曾經訪問過計算機或服務器的公鑰&#xff…

Go紅隊開發—web網絡編程

文章目錄 web網絡編程Req快速請求 調試DevModeDebugLogTraceInfo瓶頸分析 控制請求與響應控制請求的字段內容控制調試打印的內容分開dump請求與響應部分請求體設置 作用范圍級別設置參數查詢URL 路徑參數表單請求設置請求頭設置 判斷響應狀態碼解析數據SetSuccessResultgjson響…

PawSQL for TDSQL:騰訊云TDSQL數據庫性能優化全攻略

TDSQL 作為騰訊云推出的分布式數據庫&#xff0c;憑借其高擴展性、高可用性和高性能等優勢&#xff0c;廣泛應用于金融、互聯網、政務等領域。隨著業務的不斷增長和數據量的爆炸式增長&#xff0c;如何優化 TDSQL 數據庫的性能&#xff0c;成為眾多企業和開發者面臨的挑戰。本文…

67.Harmonyos NEXT 圖片預覽組件之性能優化策略

溫馨提示&#xff1a;本篇博客的詳細代碼已發布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下載運行哦&#xff01; Harmonyos NEXT 圖片預覽組件之性能優化策略 文章目錄 Harmonyos NEXT 圖片預覽組件之性能優化策略效果預覽一、性能優化概述1. 性能優化的關鍵指標…

C語言中的字符串與數組的關系

在C語言中,字符串和數組之間有著緊密的關系。理解它們的區別和聯系對于編寫高效且可靠的代碼至關重要。在本篇博文中,我們將詳細分析字符串和數組在C語言中的概念、它們的關系以及如何在編程中應用它們。 一、字符串與數組的基礎知識 1.1 數組概念 在C語言中,數組是一組相…

56.HarmonyOS NEXT 登錄模塊開發教程(十):總結與展望

溫馨提示&#xff1a;本篇博客的詳細代碼已發布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下載運行哦&#xff01; HarmonyOS NEXT 登錄模塊開發教程&#xff08;十&#xff09;&#xff1a;總結與展望 文章目錄 HarmonyOS NEXT 登錄模塊開發教程&#xff08;十&a…

添加 ChatGPT/Grok/Gemini 到瀏覽器搜索引擎

添加 ChatGPT/Grok/Gemini 到瀏覽器搜索引擎 添加 ChatGPT/Grok/Gemini 到瀏覽器搜索引擎如何添加步驟 1: 打開瀏覽器設置步驟 2: 添加新搜索引擎步驟 3: 保存設置 注意事項 添加 ChatGPT/Grok/Gemini 到瀏覽器搜索引擎 在使用 ChatGPT/Grok/Gemini 進行對話時&#xff0c;每次…

【數據分享】2000—2024年我國省市縣三級逐月歸一化植被指數(NDVI)數據(Shp/Excel格式)

之前我們分享過2000—2024年逐月歸一化植被指數&#xff08;NDVI&#xff09;柵格數據&#xff08;可查看之前的文章獲悉詳情&#xff09;&#xff0c;該數據來源于NASA定期發布的MOD13A3數據集&#xff01;很多小伙伴拿到數據后反饋柵格數據不太方便使用&#xff0c;問我們能不…

oracle中OS BLOCK的含義

在Oracle數據庫中&#xff0c;OS BLOCK&#xff08;操作系統數據塊&#xff09;是指操作系統層面上的數據塊&#xff0c;它與Oracle數據庫內部的邏輯存儲單元BLOCK&#xff08;數據塊&#xff09;有所區別但密切相關。以下是對OS BLOCK的詳細解釋&#xff1a; 定義與概念 OS BL…

深入理解Linux網絡隨筆(七):容器網絡虛擬化--Veth設備對

深入理解Linux網絡隨筆&#xff08;七&#xff09;&#xff1a;容器網絡虛擬化 微服務架構中服務被拆分成多個獨立的容器&#xff0c;docker網絡虛擬化的核心技術為&#xff1a;Veth設備對、Network Namespace、Bridg。 Veth設備對 veth設備是一種 成對 出現的虛擬網絡接口&…