【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 中编写代码:

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 运行模式,

测试成功。以上,是标准库新建工程的流程。

以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。

我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!

相关推荐
czhaii1 小时前
STM32配套程序接线图
stm32·单片机·嵌入式硬件
F133168929572 小时前
WD5202L超低成本 Buck 电源芯片的特性与应用电路解析, 将市电转换为 5V 电压
单片机·嵌入式硬件·物联网
charlie1145141912 小时前
理解我们单片机拥有的资源
笔记·单片机·嵌入式硬件·学习·教程
四夕白告木贞2 小时前
stm32week7
stm32·单片机·嵌入式硬件·学习
老子姓李!3 小时前
【GD32】《当RISC-V撞上Wi-Fi 6:GD32VW553的“芯“动初体验》
单片机·嵌入式·risc-v·iot·gd32
无际单片机编程4 小时前
学习单片机需要多长时间才能进行简单的项目开发?
java·stm32·单片机·嵌入式硬件·嵌入式
二年级程序员4 小时前
51单片机指令系统入门
单片机·嵌入式硬件·51单片机
智木芯语8 小时前
【极光 Orbit·STC8A&H】04. 深度探索 GPIO 底层逻辑
单片机·嵌入式·#stm32·#stc8
Ronin-Lotus8 小时前
嵌入式硬件篇---龙芯GPIO控制
嵌入式硬件·算法·c·gpio·龙芯·2k1000