STM32 開發通常使用 Keil MDK、STM32CubeMX、IAR 等工具來創建和管理工程。此處是 使用 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 工程
- 打開 STM32CubeMX,點擊 “New Project”
- 選擇目標 STM32 芯片(例如 STM32F103C8T6)
- 配置文件:時鐘(RCC)、串口(USART)、GPIO、定時器(TIM)等外設
- 選擇代碼生成方式
- 庫類型:HAL 庫(推薦)或 LL 庫
- IDE 選擇:Keil MDK-ARM
- 點擊“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 運行模式,
測試成功。以上,是標準庫新建工程的流程。
以上。僅供學習與分享交流,請勿用于商業用途!轉載需提前說明。
我是一個十分熱愛技術的程序員,希望這篇文章能夠對您有幫助,也希望認識更多熱愛程序開發的小伙伴。
感謝!