本章将介绍如何在keil5中建立一个STM32F103C8T6板子的完整的工程。
首先在桌面创建一个文件夹,名字叫TEXT,里面再包含一个小文件夹USER(当然名字你可以随便起,只不过我们尽量规范点)。至于为什么要建立这些东西,带着疑惑往下看,慢慢你就理解了。
先点击 Project -> New uVision Project
然后在刚建立的那个文件的USER文件下建立一个text文件
然后点击保存会弹出一个窗口用来选择板子型号,点击左边的小加号可以查看各种板子型号,这里我们使用的是STM32F103C8T6板子,所以我们选择STM32F103C8这个选项(如果你使用的别的板子,例如STM32F103R8T6,往下滑选对应的板子)
点击OK后还会弹出一个窗口,这是 MDK5 新增的一个功能,在这个界面,我们可以添加自己需要的组件,从而方便构建 开发环境,不过这里我们不做介绍。
建立完后就是这个界面
keil的一些老版本会自动导入启动文件,但keil5不能,不过我们可以通过设置它来自动添加。
先点击这个小东西
然后勾选CORE与Startup的选项
然后点OK就好了,界面就是这样的
照着官方给的做(我的电脑找不到启动文件,所以只能用第一种方法)
这时,我们编译一下我们的程序,①是编译,②是全部编译(工程大的时候,编译耗时较久,建议少用)会发现有一个错误,因为我们没有main函数,错误很正常
这个时候打开我们桌面的那个文件夹,点进USER,会惊奇的发现多了好多文件。此时我们不要慌,前三个都是keil自己生成的,我们在TEXT中新建一个OBJ的文件夹,把他们都放进去,这个文件夹就专门用来放系统生成的文件,而我们USER中只放那些重要的文件,例如startup_stm32f10x_hd.s(启动文件)和 test.uvprojx(keil5工程文件)
像这样弄好(先要关闭keil):
然后我们把系统工程SYSTEM复制过来(每一个例程中都有这段代码,直接复制就行)
在 Target 目录树上点击右键 →Manage Project Items
在里面点击那个红框新建USER和SYSTEM组,然后点击Add Files将SYSTEM下的那三个文件全部导进来
注意添加到SYSTEM组中
然后点击OK,界面就是这样
然后我们右键点击USER,Add New Item to Group
新建一个新的text的.c文件用来写main函数
在text中写入如下代码:
#include "sys.h"
#include "usart.h"
#include "delay.h"
int main(void)
{
u8 t=0;
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72, 9600); //串口初始化为 9600
while(1)
{
printf("t:%d\r\n",t);
delay_ms(500);
t++;
}
}
还记得之前我们把系统生成的文件存放在了OBJ文件中吗?但系统并不会因为我们移动了生成文件的存放位置就乖乖将下次生成的文件也放到我们希望的地方,我们要自己设置的!
点击 (Options for Target 按钮),弹出 Options for Target’Target 1’对话框,选择 Output 选项卡→选中 Create Hex File(用于生成 Hex 文件,后 面会用到)→点击 Select Folder for Objects→找到 OBJ 文件夹→点击 OK
接着,再设置 Listings 文件路径,在图 3.2.16 的基础上,打开 Listing 选项卡→点击 Select Folder for Listings→找到 OBJ 文件夹→点击 OK
这时我们看一下text.c的代码,在第一行,会出现一个红色的“X”,把光标 放上面,会看到提示信息:fatal error:‘sys.h’ file not found,意思是找不到 sys.h 这个源文件。因为我们之前只导进了.c文件,并没有导入.h文件。
现在我们再次点击(Options for Target 按钮),弹 出 Options for Target’Target 1’对话框,选择 C/C++选项卡
在Define中根据我们自己板子信息,输入宏定义:
16KB≤FLASH≤32KB 选择:STM32F10X_LD
64KB≤FLASH≤128KB 选择:STM32F10X_MD
256KB≤FLASH≤512KB 选择:STM32F10X_HD
这里我们使用的是STM32F103C8T6选择MD(如果是STM32F103R8T6,选择HD)
在Include Paths中,点击右边的三个点,在弹出的对话框中加入 SYSTEM 文件夹下的 3 个文件夹名字,把这几个路径都加进去(点击右边的三个点找到对应文件夹下面的文件即可)
再次点击OK后就没有错误了,点击编译也不会报错了
这里有的朋友编译后,可能会出现一个警告:warning:#1-D last line of file ends without a newline。这个警告是在告诉我们,在某个 C 文件的最后,没有输入新行,我们只需要双击这个 警告,跳转到警告处,然后在后面输入多一个空行就好了。(这个要多注意注意,今后可能你找了半天的Warning就是出现在这里的!!!!)
至此,一个完整的工程就建好了。
整个建立过程对于初学者来说确实有点繁琐,不过我们在后来学习过程中就不必这样一步一步操作了。我们这样一步一步主要是为了了解项目的主要文件组成和.c .h文件的导入。