在keil中新建STM32的工程文件,该工程基于STM32F1。同样也是根据正点原子的文档进行操作。
1.1.新建一个文件夹,自己根据所要进行的项目进行命名“超声波测距”,同样在内部新建“USER”;
2.打开keil,从“Project”选择“New μVision Project...”,如下图:
3.将项目定位到“超声波测距”的“USER”目录下,然后按照自己的需求进行命名;
4.然后会弹出选择框,我们根据自己手中的STM32选择对应的“STMicroelectronics”;
5.点击“Cancel”;
6.新建 3 个文件夹“CORE”,“OBJ”以及“STM32F10x_FWLib”。“CORE”用来存放核心文件和启动文件,“OBJ” 是用来存放编译过程文件以及 hex 文件,“STM32F10x_FWLib“文件夹顾名思义用来存放 ST 官方提供的库函数源码文件。
7.在”...\STM32参考资料\1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver“下面,将目录下面的”src“,”inc“文件夹复制到我们刚才建立的”STM32F10x_FWLib“文件夹下面。”src“存放的是固件库的.c 文件,”inc“存放的是对应的.h 文件。
8.将”...\STM32参考资料\1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport“下的文件”core_cm3.c“和文 件”core_cm3.h“复 制 到”CORE“下 面 去 。 然 后 定 位 到 目 录”...\STM32参考资料\1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm”下面,将里面”startup_stm32f10x_md.s“文件复制到 CORE 下面。
9.将“...\STM32参考资料\1,STM32F1xx固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x”下面将里面的三个文件“stm32f10x.h”,“ system_stm32f10x.c”,“system_stm32f10x.h”复制到我们的“USER”目录之下。然后将“STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template”下面的 4 个文件“main.c”,“stm32f10x_conf.h”,“stm32f10x_it.c”,“stm32f10x_it.h”复制到“USER”目录下面。
10.然后将需要的固件库相关文件复制到了我们的工程目录下面,右键选择”Manage Project Items“;
11.新建三个”Group“,分别为”USER“、”CORE“、”FWLib“;
;
12.右键选择”Manage Project Items“,给”CORE“添加文件;
13.右键选择”Manage Project Items“,给”USER“添加文件;
14.右键选择”Manage Project Items“,给”FWLib“添加文件;
15.在文件夹下新建”SYSTEM“文件夹,然后将”delay“、”sys“、usart”复制到”SYSTEM“文件夹下,右键选择”Manage Project Items“,给”SYSTEM“添加文件;
16.配置输出文件路径;
17.配置头文件的路径,添加全局宏定义标识符,所谓全局宏定义标识符,就是在工程中任何地方都可见。
18.复制书上的代码后正常编译。
void Delay(u32 count){
u32 i=0;
for(;i<count;i++);
}
int main(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0-->PA.8 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO 口速度为 50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化 GPIOA.8
GPIO_SetBits(GPIOA,GPIO_Pin_8); //PA.8 输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //LED1-->PD.2 端口配置, 推挽输出
GPIO_Init(GPIOD, &GPIO_InitStructure); //推挽输出 , IO 口速度为 50MHz
GPIO_SetBits(GPIOD,GPIO_Pin_2); //PD.2 输出高
while(1)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
Delay(3000000);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
Delay(3000000);
}
}