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 运行模式,
测试成功。以上,是标准库新建工程的流程。
以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。
我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!