2 新建工程步骤
2 新建工程步骤
0.建立工程文件夹
选择一个程序储存文件,新建一个2-1 STM32工程模板文件夹,在2-1 STM32工程模板文件夹新建一个Start,User,Library文件夹
1.Keil中新建工程,选择型号
打开keil5,project->new project->选择文件夹(2-1 STM32工程模板)->给工程取个名称(Project),点击保存,选择型号:STM32F103C8,点击ok
2.工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
1)添加STM32的启动文件
打开固件库,…\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm,将这些文件复制下来,将复制下来的文件粘贴进2-1 STM32工程模板文件夹下的Start文件夹;
2)添加STM32的头文件和配置时钟文件
//STM32的外设寄存器描述文件,用来描述STM32有哪些寄存器和它对应的地址的
stm32f10x.h
//用来配置时钟的,STM32主频72MHz,就是system文件里的函数配置的
system_stm32f10x.c
system_stm32f10x.h
将…\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x下的三个.c,.h文件也复制到Start文件夹下;
3)添加STM32的内核寄存器的描述文件
core_cm3.c
core_cm3.h
将…\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下的文件也复制到Start文件夹下。
4)添加文件到工程
打开keil5,在Project树下,修改Source Group 1为Start,然后右键,选择Add Existing Files to Group ‘Start’,打开Start文件夹,将startup_stm32f10x_md.s启动文件添加进来,然后再将.c和.h文件都添加进来。
5)在工程选项中添加头文件路径
在keil5软件下,点击魔术棒按钮,在C/C++里,在Include Paths栏,然后点击右边三个点的按钮,点击新建,选中Start文件夹,将其路径添加进来,点击ok(一定要记得添加进来,不然后面运行程序可能会报错);
6)在工程选项中添加main函数
将main函数就存放在在2-1 STM32工程模板文件夹下的User文件夹里面;然后在keil5软件下,在target 1下右键,点击Add Group,将组的名字改为User,然后在User右键,点击添加Add new …,选择C文件,名字叫main,路径选择User文件夹,点击Add。
在main.c文件下编辑:(文件最后一行必须要空行,要不然会报警告)
#include "stm32f10x.h" // Device header
int main(void)
{
while (1)
{
}
}
然后点击编译看看会不会报错,理论上不会出错。.
7)调试
拿出STM32最小系统板用杜邦线与STLINK连接好,将usb口插上,发现stm32板上,一个灯频闪,一个灯常亮;
然后配置一下调试器,点击魔术棒按钮,选择debug,将调试器选择为ST-Link Debugger,点击setting,在Flash Download的这一项下,把Reset and Run 这一项勾上(勾上这一项,我们下载程序后会立马复位执行);
8)点灯(寄存器)
main:
#include "stm32f10x.h" // Device header
int main(void)
{
RCC->APB2ENR = 0X00000010;
GPIOC->CRH = 0X00300000;
GPIOC->ODR = 0X00002000; //常灭(低电平点亮,把2换成0就点亮)
while (1)
{
}
}
9)添加库文件
将…\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src的文件全选,粘贴在Library文件夹下;
将…\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc的文件全选,粘贴在Library文件夹下;
回到软件,在target 1下右键,点击Add Group,将组的名字改为Library,然后在Library右键,选择Add Existing Files to Group ‘Library’,打开Library文件夹,将全部文件都添加进来;
打开…\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template,将下面三个文件复制下来,粘贴到工程的User目录下,然后回到软件,将添加进来的三个文件Add进来;
//用来配置库函数头文件的包涵关系的
stm32f10x_conf.h
//用来存放中断函数的
stm32f10x_it.c
stm32f10x_it.h
3.工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
打开魔术棒,在C/C++选项下的Define栏目粘贴USE_STDPERIPH_DRIVER;
然后在C/C++里,在Include Paths栏将User和Library也添加进来;
然后编译运行,0错误,0警告
总结:
建立工程文件夹,Keil中新建工程,选择型号
工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER
工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run
2.3 验证环节:点灯(库函数)
#include "stm32f10x.h" // Device header
int main(void)
{
//step1:使能时钟(第一个参数,使用外设时钟;第二个参数,选择外设状态)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
//定义一个结构体(GPIO模式,端口,速度)
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//step2:配置端口模式(第一个参数,选择哪个GPIO;第二个参数,参数的结构体)
GPIO_Init(GPIOC, &GPIO_InitStructure);
//step3:设置高低电平进行点灯
GPIO_SetBits(GPIOC, GPIO_Pin_13); //高电平
// GPIO_ResetBits(GPIOC, GPIO_Pin_13); //低电平(点亮)
while (1)
{
}
}
点灯完毕~