☰
标准外设库点亮STM32流水灯
2026/9/28 21:21:53 网站建设 项目流程

标准外设库点亮STM32流水灯

一、工程的创建

(一)官网下载标准外设库

1.打开网站:https://www.st.com/zh/embedded-software/stm32-standard-peripheral-libraries.html

2.页面找到F1 蓝色方块(STM32F1 系列),点击进入,点击获取软件


3.作为访客下载,填写相关信息,ST 会发一封邮件到你填的邮箱,邮件里面有下载链接,点链接下载

(二)工程创建

1.新建工程总文件夹

在 D 盘新建文件夹,命名为led,进入该文件夹,创建四个子文件夹,分别命名为User,CORE,FWLIB,OBJ

2.从标准库中复制文件

(1)复制到CORE文件夹

路径Libraries\CMSIS\CM3\CoreSupport复制:core_cm3.c、core_cm3.h

路径Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x复制stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h

路径Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm复制:startup_stm32f10x_md.s

(2)复制到 FWLIB 文件夹

进入Libraries\STM32F10x_StdPeriph_Driver

src目录复制stm32f10x_gpio.c,stm32f10x_rcc.c,misc.c

inc目录复制stm32f10x_gpio.h,stm32f10x_rcc.h,misc.h

(3) User 文件夹

新建空白文本文件,改名字为main.c(注意:要把后缀.txt改成.c、)

3.打开keil,新建工程

(1)新建工程,保存到创建的USER子文件夹中

(2)选择芯片(标准外设库不使用 Keil 自带的软件包)

(3)在工程窗口新建 4 个分组

左侧 Project 窗口,右键Target 1→Add Group,依次创建 4 个分组USER,CORE,FWLIB,STARTUP

(4)打开魔法棒配置

按照下述设置








双击左侧USER下的main.c

#include"stm32f10x.h"// Device header#include"Delay.h"intmain(void){GPIO_InitTypeDef GPIO_InitStructure;//开启GPIOA、GPIOC时钟(PA1 PA3 PA5、PC13)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);// PA1 PA3 PA5 推挽输出 50MHzGPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);// PC13 推挽输出 50MHzGPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;GPIO_Init(GPIOC,&GPIO_InitStructure);//初始全部熄灭(输出高电平,低电平点亮LED)GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_5);GPIO_SetBits(GPIOC,GPIO_Pin_13);while(1){//点亮PA1,其余熄灭GPIO_ResetBits(GPIOA,GPIO_Pin_1);GPIO_SetBits(GPIOA,GPIO_Pin_3);GPIO_SetBits(GPIOA,GPIO_Pin_5);GPIO_SetBits(GPIOC,GPIO_Pin_13);Delay_ms(1000);//点亮PA3,其余熄灭GPIO_SetBits(GPIOA,GPIO_Pin_1);GPIO_ResetBits(GPIOA,GPIO_Pin_3);GPIO_SetBits(GPIOA,GPIO_Pin_5);GPIO_SetBits(GPIOC,GPIO_Pin_13);Delay_ms(1000);//点亮PA5,其余熄灭GPIO_SetBits(GPIOA,GPIO_Pin_1);GPIO_SetBits(GPIOA,GPIO_Pin_3);GPIO_ResetBits(GPIOA,GPIO_Pin_5);GPIO_SetBits(GPIOC,GPIO_Pin_13);Delay_ms(1000);//点亮PC13,其余熄灭GPIO_SetBits(GPIOA,GPIO_Pin_1);GPIO_SetBits(GPIOA,GPIO_Pin_3);GPIO_SetBits(GPIOA,GPIO_Pin_5);GPIO_ResetBits(GPIOC,GPIO_Pin_13);Delay_ms(1000);}}

二实验波形及现象

(一)波形

1.进入keil仿真波形

2.调试波形



依次添加自己的引脚,全部改完

3.运行波形

4.波形图

(二)实验现象

三.总结

寄存器开发是直接操作硬件寄存器;标准外设库将寄存器操作封装为函数,简化开发,便于快速编写和维护程序,但底层仍然是寄存器操作。寄存器开发直接操作寄存器地址与比特位;标准库通过结构体和 API 函数配置外设,屏蔽底层寄存器细节。

对比项直接寄存器编程标准外设库 SPL
操作对象直接操作寄存器地址、bit 位调用库函数 + 结构体,底层由库函数操作寄存器
代码长度代码简短,但需要记忆寄存器名字、位编号代码行数多,填写结构体参数,不用记寄存器每一位
学习门槛高。要看懂芯片手册寄存器说明,容易写错 bit 位置低。只需要记住函数名、结构体成员,适合入门
可读性差,一堆移位<<,别人很难看懂可读性好,函数名字语义清晰:GPIO_Init、RCC_APB2PeriphClockCmd
出错概率高。移位写错、寄存器选错,报错很难排查低。库已经封装好,参数写错更容易定位
可移植性差。换芯片寄存器地址、位定义变了,代码大量修改较好。同系列 F1 芯片,修改少量宏即可移植
运行效率最高,没有函数调用开销几乎和寄存器一致,函数 inline 优化后差距极小
调试难度难,需要对照手册看寄存器值容易,Keil 可以直接看库函数参数
适合场景底层优化、资源极度受限、想深入理解单片机原理课程实验、项目快速开发,学校最常用

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询