【保姆级实操版 - STM32 系列笔记】STM32F103标准库开发:Keil5新建工程完整教程

STM32F103标准库开发:Keil5新建工程完整教程

本文详细讲解如何使用 Keil5 新建 STM32F103 标准库工程,适合STM32入门开发者快速搭建开发环境

  • 这是我创建完成的工程模板 👌 工程模板,欢迎大家按需取用~ (链接失效了的话喊我!)

Keil5新建工程

一、开发环境准备

在开始创建工程前,需确保已安装并配置好以下工具:

  1. Keil MDK-ARM:本文以 V5.39 版本为例
  2. STM32F10x标准外设库:本文以 V3.6.0 版本为例(ST官方提供,可从官网或社区镜像下载)

二、创建工程模板文件

步骤1:创建根目录与模板文件夹

  1. 在电脑中新建一个文件夹(如STM32_PROJS)作为工程根目录
  2. 在根目录下创建template文件夹,用于存放工程模板文件

步骤2:划分模板子文件夹

在template文件夹中新建4个子文件夹,用于分类管理文件:

  • CMSIS:用于存放内核驱动、启动引导文件(核心系统文件)
  • FWLIB:用于存放标准库外设函数文件(GPIO、UART、TIM等驱动)
  • User :用于存放用户程序文件(主函数main.c、自定义功能代码)

三、导入STM32标准库文件

步骤1:复制CMSIS核心文件

从解压后的标准库中,将以下文件复制到工程CMSIS文件夹:

  1. 内核支持文件 :core_cm3.h
    • 路径:STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\CoreSupport
  2. 设备系统文件 :system_stm32f10x.c、system_stm32f10x.h
    • 路径:STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
  3. 启动文件 :根据芯片型号选择,STM32F103C8T6选择startup_stm32f10x_md.s(中等容量芯片)
    • 路径:STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
  4. 头文件 :stm32f10x.h、stm32f10x_conf.h
    • 路径:STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x, STM32F10x_StdPeriph_Lib_V3.6.0\Project\STM32F10x_StdPeriph_Template

操作结果如下:

步骤2:复制FWLIB外设库文件

将标准库中STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\STM32F10x_StdPeriph_Driver文件夹下的inc(头文件)和src(源文件)完整复制到工程FWLIB文件夹,包含所有外设驱动文件(如stm32f10x_gpio.c、stm32f10x_rcc.c等)。

四、Keil5新建工程并配置

步骤1:新建Keil工程

  1. 打开Keil uVision5,点击顶部菜单栏Project → New μVision Project
  2. 选择工程保存路径为根目录 STM32_PROJS 下的 template 文件夹,新建工程文件夹 TEST,点击保存

步骤2:选择芯片型号

在弹出的Select Device for Target窗口中:

  1. 搜索框输入STM32F103C8
  2. 选择STMicroelectronics → STM32F1 Series → STM32F103C8
  3. 点击OK,完成芯片选择
  1. 关闭弹出的新建工程小助手

步骤3:创建文件组并添加库文件

  1. 在Project窗口右键Target 1,依次创建3个文件组:CMSIS、FWLIB、User
  2. 向CMSIS组添加工程CMSIS文件夹下的 core_cm3.h 等全部 6 个文件
  3. 向FWLIB组添加工程FWLIB文件夹下的 misc.c 等全部 46 个文件
  4. 向User组添加空的main.c文件(后续编写主函数,我随便写了点内容)

五、配置Keil编译环境

步骤0:配置调试器 (本文用的是 ST-LINK)

  1. 点击 "魔术棒按钮",点击 Debug 选项
  2. 下拉列表选中 ST-LINK
  3. 点击 OK 确认

步骤1:添加头文件搜索路径

  1. 右键Target 1 → Options for Target 'Target 1'
  2. 切换到C/C++选项卡,点击Include Paths后的...按钮
  3. 添加以下路径(相对路径,确保路径正确):
    • ../CMSIS
    • ../FWLIB/inc
    • ../User

步骤2:添加宏定义

在C/C++选项卡的Define输入框中添加宏: USE_STDPERIPH_DRIVER

  • USE_STDPERIPH_DRIVER:启用标准库驱动

六、编写测试代码(验证工程)

在User文件夹下的main.c中编写简单的LED闪烁测试代码,验证工程是否正常:

c 复制代码
#include "stm32f10x.h"

// 标准库 延时函数(带 volatile,不被优化,否则灯是常亮的)
void Delay_ms(uint32_t ms)
{
	volatile uint32_t i, j;
	for(i = 0; i < ms; i++)
		for(j = 0; j < 7200; j++);
}

int main(void)
{
	// 1. 使能 GPIOC 时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	
	// 2. 初始化 PC13 为推挽输出
	GPIO_InitTypeDef GPIO_InitStruct;
	
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOC, &GPIO_InitStruct);
	
	// 3. 死循环,LED 闪烁
	while(1)
	{
		GPIO_ResetBits(GPIOC, GPIO_Pin_13);	// 亮
		Delay_ms(500);
		
		GPIO_SetBits(GPIOC, GPIO_Pin_13);	// 灭
		Delay_ms(500);
	}
}

效果如下:

完结撒花 🌸

相关推荐
wuyoutrans2 小时前
以色列专利OA答复翻译,重点要避开哪些坑?
笔记
宝绿特塑业再生科技2 小时前
HDPE再生颗粒户外家具表面粉化机理与改性技术全解析
笔记·户外家具·再生塑料·塑木桌椅
铅笔小新z3 小时前
【stm32】WWDG(窗口看门狗)
stm32·单片机·嵌入式硬件
凉、介3 小时前
深入理解 ARMv7-A | Generic Timer
笔记·学习·嵌入式·arm
n 55!w !1084 小时前
MySQL笔记整理2
数据库·笔记·mysql
comyccccc4 小时前
平衡车底板设计:精准布局与高效布线学习笔记
单片机·嵌入式硬件
La Pulga4 小时前
【FreeRTOS源码学习笔记】任务创建
笔记·stm32·mcu·学习·嵌入式·freertos·实时操作系统
Zhao-Jichao4 小时前
AI Prompting for Everyone 课程笔记 - P06 模型提示词对比 AI Model Prompt Comparison
人工智能·笔记·prompt
computersciencer5 小时前
贝叶斯入门:由全概率公式引出贝叶斯公式
笔记·数学建模·概率论
叼烟扛炮5 小时前
Linux 学习笔记(四十七):TCP 状态机与 tcpdump 抓包排雷实战
linux·网络·笔记·学习·tcp/ip·tcpdump