学习STM32_Day2: 新建工程模板
写在前面
本章搬运自部门电子部所写的接地气新建工程版,做了修正与适当修改,原本选取了C8T6,因为笔者此次选用RCT6学习,所以新建区别处在括号内已备注。
如何建立工程模板
通常,我们为单片机编写代码时使用的工程是一个较复杂的多文件工程,包含启动文件、库文件、用户代码等等,
这个工程是不用每次都去建立的,只要根据现成的模板稍加修改即可,但为了能够灵活地使用工程模板,有必要了解一下这个模板是如何建立的。
一、新建工程
1.建立一个文件夹,命名为HelloSTM32,并在文件夹内新建四个文件夹,命名如下:
CORE 用来存放核心文件和启动文件,OBJ 是用来存放编译过程文件以及 hex 文件,
STM32F10x_FWLib 文件夹顾名思义用来存放 ST 官方提供的库函数源码文件。已有的 USER 目录除了用来放工程文件外,还用来存放主函数文件 main.c,以及其他包括 system_stm32f10x.c 等等
-
打开Keil,选择左上方的“Project”,然后“New uVision Project”,在USER文件下建立一个名为“HelloSTM32”的工程文件。
-
在弹出的窗口中选择STM32F103C8并“OK”。(mini板选择STM32F103RC)
-
然后会跳出这个界面,ta是一个选择性配置所需文件的界面,直接选择OK
然后工程就新建完成了
二、添加文件
刚刚我们新建的工程只是一个框架,启动文件等必要的东西还没有添加进去,下面我们就来添加相应的文件。
在压缩包里面可以找到一个名为“STM32F10x_StdPeriph_Lib_V3.5.0”的文件,这是ST官方推出的F1系列产品的标准库,里面有我们所需的全部文件,我们将选择其中一部分添加到我们的工程里面。首先我们复制文件到对应的路径下
-
打开目录STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver, 将目录下面的 src、inc 文件夹复制到我们刚才建立的 STM32F10x_FWLib 文件夹里面。 src 存放的是固件库的.c 文件,inc 存放的是对应的.h 文件,每个外设对应一个.c 文件和一个.h 头文件。
-
打开目录 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下面,将文件 core_cm3.c 和 文 件 core_cm3.h 复 制 到 CORE文件夹里。
-
打开目录
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\s tartup\arm 下面,将里面的 startup_stm32f10x_md.s 文件复制到 CORE 下面。(mini板选择startup_stm32f10x_hd.s)
- 打开目录:
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 目录下。经过这5个步骤,需要的文件复制完毕。下面我们将 这些文件加入我们的工程中去。
-
右键点击 Target1,选择 Manage Project Items。
-
在Project Targets一栏,我们将Target名字修改为HelloSTM32,然后在Groups一栏删掉一个 Source
-
Group1,建立三个 Groups:USER,CORE,FWLIB。(别急着退出)
-
在选中FWLIB这一分组的情况下,点击右侧的“Add Files”,定位到我们刚才建立的目录
STM32F10x_FWLib/src**下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close.可以看到 Files 列表下面包含我们添加的文件。
-
用和步骤8相同的方法,添加core_cm3.c,startup_stm32f10x_md.s (注意,默认添加的 时候文件类型为.c,也就是添加 startup_stm32f10x_md.s 启动文件的时候,你需要选择文件类型 为 All files 才能看得到这个文件)到CORE分组下(记得选中该分组)。
-
用和步骤8相同的方法,添加 main.c,stm32f10x_it.c, system_stm32f10x.c到USER分组下
(记得选中该分组)。
到这里,所需文件已全部添加完毕,点击OK回到主界面。
三、稍加修改
接下来我们要编译工程,在编译之前我们首先要选择编译中间文件编译后存放目录。 方法如下图:
- 打开“Options for Target…” 然后选择“Output”选项下面的“Select folder for objects…”,然后选择目录为我们之前新建的 OBJ 目录。这里请大家注意,如果我们不设置 Output 路径,那么默认的编译中间文件存放目录就是 MDK 自动生成的 Objects 目录和 Listings 目录。 (其实设置这个就是为了下载的时候方便找HEX文件)
修改完以后我们可以试着编译一下工程,注意点这个按钮,会看到一堆报错,这是因为MDK找不到头文件。
- 用和步骤1一样的方法召唤一个菜单,然后点击 C/C++ 选项.然后点击Include Paths 右边的按钮(···)。弹出一个添加 path 的对话框,然后我们将图上面的 3 个目录添 加进去。记住,keil 只会在一级目录查找,所以如果你的目录下面还有子目录,记得 path 一定要定位到 后一级子目录。然后OK(一次)
- 还是在“C/C++”选项下,添加宏定义STM32F10X_MD,USE_STDPERIPH_DRIVER,(mini板选择STM32F10X_HD,USE_STDPERIPH_DRIVER) 如下图:
- 在工程中打开main.c(左侧展开名称前的加号,找到文件后双击),用以下的代码替换原来全部内容:
void Delay(u32 count) {
u32 i=0;
for(;i<count;i++); } //简单、不精确的延时
int main(void) {
GPIO_InitTypeDef GPIO_InitStructure; //创建一个GPIO结构体 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOB对应的时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED_GREEN-->PB.8 指定一个端口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置为推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO 口速度为 50MHz (最大响应频率,与响应速度和噪声有关)
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化 GPIOB.8 GPIO_SetBits(GPIOB,GPIO_Pin_8); //PB.8 输出高 ,LED阳极接到3.3V,推挽模式下GPIO拉高时输出3.3V,LED不被点亮
while(1) {
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
Delay(3000000);
GPIO_SetBits(GPIOB,GPIO_Pin_8);
Delay(3000000); } }
5.然后,点之前那个编译按键(Build)或者按快捷键F7进行编译,输出栏显示如下:
OK,NO ERROR,NO WARNING ,完美。
(下载用的HEX文件在OBJ目录下,下载流程参考开发板使用说明)
写在后面
本帖所用新建工程的资源下载:
链接:https://pan.baidu.com/s/1CJVeQ6JJGC5csy8ez6ZmBg
提取码:q37c
本帖仅供分享,如有错误,感谢指正!