【保姆级实操版 - 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.csystem_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.hstm32f10x_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.cstm32f10x_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个文件组:CMSISFWLIBUser
  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 1Options 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);
	}
}

效果如下:

完结撒花 🌸

相关推荐
✎ ﹏梦醒͜ღ҉繁华落℘1 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
u152109648491 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
闪闪发亮的小星星1 天前
高斯光以及高斯光公式解释
笔记
zd8451015001 天前
RS485 总线详解
单片机·嵌入式硬件
cqbzcsq1 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
半条-咸鱼1 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
牛根生同志1 天前
SPI数据收发的时候 TXE与RXNE标志位置位的时机
stm32·spi·transfer
wohoo_wangzi1 天前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
阿米亚波1 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
自传.1 天前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding