2 新建 STM32 工程#
2 新建 STM32 工程#
2.1 STM32F10X 型号分类及缩写#
STM32F103C8T6 : C8T6的 flash 是 64K,所以我们选择 MD 的启动文件
| 缩写 | 释义 | Flash容量 | 型号 |
|---|---|---|---|
| LD_VL | 小容量产品超值系列 | 16~32K | STM32F100 |
| MD_VL | 中容量产品超值系列 | 64~128K | STM32F100 |
| HD_VL | 大容量产品超值系列 | 256~512K | STM32F100 |
| LD | 小容量产品 | 16~32K | STM32F101/102/103 |
| MD | 中容量产品 | 64~128K | STM32F101/102/103 |
| HD | 大容量产品 | 256~512K | STM32F101/102/103 |
| XL | 加大容量产品 | 大于 512K | STM32F101/102/103 |
| CL | 互联型产品 | - | STM32F105/107 |
2.2 新建工程步骤#
建立工程文件夹,Keil 中新建工程,选择型号
工程文件夹里建立 Start、Library、User 等文件夹,复制固件库里面的文件到工程文件夹
工程里对应建立 Start、Library、User 等同名称的分组,然后将文件夹内的文件添加到工程分组里
工程选项,C/C++,Include Paths 内声明所有包含头文件的文件夹
工程选项,C/C++,Define 内定义 USE_STDPERIPH_DRIVER,其他的工程在这里还声明了一个STM32F10x_MD的字符串,但Keil5在新建工程后自动帮我们声明好了这个,因此不用再重复声明
工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download 里勾选 Reset and Run
2.3 工程架构图#

2.4 keil 5 新建工程结构图#

Start文件夹:#
.s启动文件,在 Keil 软件里只能添加一个,本次我们选择startup_stm32f10x_md.s启动文件
stm32f10x.h的外设寄存器描述文件,作用与 51 单片机的REGX52.h一样,用来描述 STM32 有哪些寄存器和它对应的地址
system_stm32f10x.c和system_stm32f10x.h文件是用来配置时钟的,STM32主频72MHz就是 system 文件里的函数配置的
core_cm3.c和core_cm3.h文件是内核的寄存器描述,它还带了一些内核的配置函数,所以多了个.c文件,
然后在工程选项里添加上 Start 这个文件夹的头文件路径,不然软件找不到.h文件
Library文件夹:#
inc和src两个文件夹里面是 ST 公司封装好的.h和.c库文件
System文件夹:#
System 文件夹内存放系统的资源,例如delay.c delay.h
User文件夹:#
main.c文件
stm32f10x_conf.h 文件是用来配置库函数头文件包含关系的,里面还有个用来参数检查的函数定义,这是所有库函数都需要的
stm32f10x_it.c 和stm32f10x_it.h 文件是用来存放 interrupt 中断函数的
2.5 使用STLink连接stm32单片机#
接线方式:

| ST-LINK V2 | STM32 |
|---|---|
| 3.3V | 3V3 |
| SWDIO | SWIO |
| SWCLK | SWCLK |
| GND | GND |
main.c
#include "stm32f10x.h" // Device header
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //打开C口时钟并使能
//定义一个结构体
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; // 13号引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50MHz速度
//配置端口模式
GPIO_Init(GPIOC, &GPIO_InitStructure);
//设置端口高低电平
//GPIO_SetBits(GPIOC, GPIO_Pin_13);//高电平
GPIO_ResetBits(GPIOC, GPIO_Pin_13);//低电平
while(1)
{
}
}