库函数工程模板的建立

【前记】害怕将来自己无法脱离开发板带来的便捷与缺点,于是参考了不少资料,新建了一个不局限于某牌子开发板的工程模板。记录于此。

本文以STM32F10x_V3.5.0固件库为例。

库函数工程模板的建立

 

1. 前期准备

(1) 下载固件库

(2) 安装Keil-MDK


固件库可到 ST 社区下载,官网下载入口不好找,下载流程还很繁琐。后台索取方式详见文章:STM32固件库下载-v1
ST 社区网址:stmcu.org.cn(旧)shequ.stmicroelectronics.cn(新)

 

2. 详细步骤

(1) 新建文件夹

新建一个文件夹Template,三个子文件夹。文件夹名称自己决定,结构如下图

库函数工程模板的建立

 

 

(2) 复制固件库相关文件

① 将 src、inc 文件夹复制到 STM32F10x_FWLIB 文件夹。
② 将 core_cm3.c 和 core_cm3.h 复制到 CORE 文件夹。(在CoreSupport 文件夹)
③ 将相应的启动文件复制到 CORE 文件夹下。(在arm 文件夹)
④ 将tm32f10x.h,system _stm32f10x.c,system _stm32f10x.h,复制到 USER 文件夹下。(STM32F10x文件夹)
⑤ 将 stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h  复制到 USER 文件夹下。(在Project文件夹的Template 文件夹)

库函数工程模板的建立

 

 

(3) 新建工程框架

在 Keil-MDK 新建一个空工程并保存在 USER 文件夹下。如下图

库函数工程模板的建立

 

 库函数工程模板的建立

 

 库函数工程模板的建立

 

 库函数工程模板的建立

 

 

(4) 添加文件到工程

① 右键点击Target1,选择 Manage Project Items 。如下图

 库函数工程模板的建立

 

 

② 建分组。在“Project Targets”双击 Target 重命名为Template ,在“Groups”新建三个组:USER,CORE,FWLIB 。如下图

 库函数工程模板的建立

 

③ 依次点击USER和该界面右下角的Add Files,然后选择stm32f10x_it.c,system_stm32f10x.c ,添加到USER。如下图

库函数工程模板的建立

 

 

 ④ 同理将core _cm3.c,startup_stm32f10x_hd.s 添加到CORE。如下图

库函数工程模板的建立

 

 

⑤ 同理将 src 文件夹下的所有文件按Ctrl+A选中所有文件添加到FWLib。其实可以自主选择,只要自己轻车熟路,知道所使用的外设需要哪几个文件就行。如下图

库函数工程模板的建立

 

 

(5) 配置工程

① 设置编译后中间文件存放的目录。选择自己建的 OBJ 文件。勾选生成hex文件的选项。如下图
如果不设置Output路径,则默认的编译中间文件存放在MDK自动生成的Objects文件夹和 Listings文件夹。其实不考虑规范性的话这一步可以不要。

库函数工程模板的建立

 

 

② 配置全局宏定义变量。3.5版本的库函数在配置和选择外设的时候要通过宏定义来选择。可根据你选择的芯片或启动文件修改,STM32F10X_MD(大容量),STM32F10X_MD(中容量),STM32F10X_LD(小容量)。


STM32F10X_HD,USE_STDPERIPH_DRIVER中的逗号是英文逗号。


③ 点击右边小按钮添加工程引用到的所有头文件的路径。每个头文件所在的文件夹为一条路径,我这里添加了三条路径。添加完毕点击 OK。如下图

库函数工程模板的建立

 

 

3. 模板检验
新建并保存 main.c 文件到 USER 文件夹下,将其添加到USER组中,输入下面代码到 main.c ,然后进行编译。显示零错误零警告并在 OBJ 文件夹里生成 hex 文件则说明工程模板无误。
记得在代码的最后一行再加上一个回车,否则会编译不成功。

库函数工程模板的建立

 

 

 1 #include "stm32f10x.h"
 2 void Delay(u32 count)
 3 {
 4   u32 i=0;
 5   for(;i<count;i++);
 6 }
 7 int main(void)
 8 {
 9   GPIO_InitTypeDef GPIO_InitStructure;
10   //使能PB,PE端口时钟
11   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,ENABLE);
12   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//LEDO --> PB.5端口配置
13   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
14   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHz
15   GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化GPIOB.5
16   GPIO_SetBits(GPIOB,GPIO_Pin_5);//PB.5输出高
17   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//LED1 --> PE.5推挽输出
18   GPIO_Init(GPIOE,&GPIO_InitStructure);//初始化GPIO
19   GPIO_SetBits(GPIOE,GPIO_Pin_5);//PE.5输出高
20   while(1)
21   {
22      GPIO_ResetBits(GPIOB,GPIO_Pin_5);
23      GPIO_SetBits(GPIOE,GPIO_Pin_5);
24      Delay(3000000);
25      GPIO_SetBits(GPIOB,GPIO_Pin_5);
26      GPIO_ResetBits(GPIOE,GPIO_Pin_5);
27      Delay(3000000);
28   }
29 }

 大本营在这:库函数工程模板的建立

库函数工程模板的建立

上一篇:Convex Regularization in Monte-Carlo Tree Search


下一篇:文件系统权限的管理(包括特殊权限)