0
点赞
收藏
分享

微信扫一扫

新建STM32工程并配置——基于固件库

新建项目

在keil中新建STM32的工程文件,该工程基于STM32F103。根据正点原子的文档进行操作。

1.新建一个文件夹,自己根据所要进行的项目进行命名,如超声波测距、获取陀螺仪的示数等,然后在文件夹里面新建一个文件夹命名为“USER”

新建STM32工程并配置——基于固件库_stm32开发

2.打开keil,从“Project”选择“New μVision Project...”,如下图:

新建STM32工程并配置——基于固件库_超声波测距_02

3.将项目定位到“超声波测距”的“USER”目录下,然后按照自己的需求进行命名;

4.然后会弹出选择框,我们根据自己手中的STM32选择对应的“STMicroelectronics”;

新建STM32工程并配置——基于固件库_stm32开发_03

5.点击“Cancel”

新建STM32工程并配置——基于固件库_新建项目_04

6.然后在“超声波测距”目录下新建三个文件夹,分别是“CORE”、“OBJ”、“STM32F10x_FWLib”,CORE用来存放核心文件和启动文件,OBJ是用来存放编译过程文件以及hex文件, STM32F10x_ FWLib文件夹顾名思义用来存放ST官方提供的库函数源码文件。已有的USER目录除了用来放工程文件外,还用来存放主函数文件main.c,以及其他包括system_ stm32f10x.c 等等。

新建STM32工程并配置——基于固件库_stm32开发_05

7.从官方 stm32cubeF4 包里面复制一些我们新建工程需要的关键文件到“STM32F10x_FWLib”,路径在“..\【正点原子】MiniSTM32开发板资料-A盘\8,STM32参考资料\STM32Cube_FW_F1_V1.8.0\Drivers\STM32F1xx_HAL_Driver”;

新建STM32工程并配置——基于固件库_新建项目_06

8.把相关的启动文件以及一些关键头文件复制到“CORE” 之下,路径在“...\【正点原子】MiniSTM32开发板资料-A盘\8,STM32参考资料\STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\Include”,“startup_stm32f103xe.s”目录为“...\【正点原子】MiniSTM32开发板资料-A盘\8,STM32参考资料\STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm”;

新建STM32工程并配置——基于固件库_参考资料_07

新建STM32工程并配置——基于固件库_超声波测距_08

实际在“CORE”文件夹中复制的文件:

新建STM32工程并配置——基于固件库_stm32开发_09

9.然后我们要复制工程模板需要的一些其他头文件和源文件到我们工程。首先在“...\【正点原子】MiniSTM32开发板资料-A盘\8,STM32参考资料\STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\Device\ST\STM32F1xx\Include”中将”stm32f1xx.h“、”stm32f103xe.h“、”system_stm32f1xx.h“这三个.h头文件复制到”USER“文件夹下;

10.进入到”...\【正点原子】MiniSTM32开发板资料-A盘\8,STM32参考资料\STM32Cube_FW_F1_V1.8.0\Projects\STM3210E_EVAL\Templates“需要从”Inc“、”Src“两个文件夹中分别取对应的文件:

新建STM32工程并配置——基于固件库_超声波测距_10

将”Inc“、”Src“文件夹中的文件全部复制到”USER“文件夹中;

11.复制“ALIENTEK”编写的”SYSTEM“文件夹内容到工程目录中,直接在下载的其他文件中寻找并粘贴进去;

12.将项目中复制过来的文件加入我们的工程中。右键点击”Target1“,选择”Manage Project  Items“:

新建STM32工程并配置——基于固件库_超声波测距_11

13.将”Project Targets“修改为”超声波测距“,把我们所新建的文件夹都”Groups“中添加,确认之后如有下图所示;

新建STM32工程并配置——基于固件库_stm32开发_12新建STM32工程并配置——基于固件库_新建项目_13

14.右键点击”超声波测距“,选择”Manage Project  Items“,给”CORE“添加文件;

新建STM32工程并配置——基于固件库_新建项目_14

15.右键点击”超声波测距“,选择”Manage Project  Items“,给”USER“添加文件;

新建STM32工程并配置——基于固件库_stm32开发_15

16.右键点击”超声波测距“,选择”Manage Project  Items“,给”STM32F10x_FWLib“添加文件;

新建STM32工程并配置——基于固件库_超声波测距_16

17.右键点击”超声波测距“,选择”Manage Project  Items“,给”SYSTEM“添加文件;

新建STM32工程并配置——基于固件库_stm32开发_17

18.然后在 MDK 里面设置头文件存放路径。也就是让 MDK 到那些目录下面去寻找包含了的头文件。这一步骤非常重要。如果没有设置头文件路径,那么工程会出现报错头文件路径找不到。

新建STM32工程并配置——基于固件库_参考资料_18

新建STM32工程并配置——基于固件库_新建项目_19

19.接下来对于 STM32F103 系列的工程,还需要添加全局宏定义标识符,所谓全局宏定义标识符,就是在工程中任何地方都可见。添加方法是点击魔术棒之后,进入 C/C++选项卡,然后在 Define 输入框连输入:USE_HAL_DRIVER,STM32F103xE。

新建STM32工程并配置——基于固件库_超声波测距_20

20.要编译工程,在编译之前我们首先要选择编译中间文件编译后存放目录。前面我们讲过,MDK 默认编译后的中间文件存放目录为 USER 目录下面的 Listings 和 Objects子目录,一般选择存放到目录 OBJ 目录之下;

新建STM32工程并配置——基于固件库_超声波测距_21

新建STM32工程并配置——基于固件库_超声波测距_22

新建STM32工程并配置——基于固件库_参考资料_23

21.然后在”main.c“文件中复制一些简单代码运行;

#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++;
}
}

22.结果如下图所示:

新建STM32工程并配置——基于固件库_参考资料_24

错误修改

1.首先运行之后是会报52个错误,然后发现是少了”cmsis_version.h“头文件,因此在”...\【正点原子】MiniSTM32开发板资料-A盘\8,STM32参考资料\STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\Core\Include“找到后复制到”CORE“里面,然后再加入到”Groups“中就可以了;

2.然后发现还有3个错误,点击再”main.h“中说没有这个”stm3210e_eval.h“,在资料包中搜寻未果,而且参考水平我们也用不到,就把它注释了;

3.发现还有一个问题:”error:  #268: declaration may not appear after executable statement in block“,搜索之后发现是——变量的声明写在了使用语句的后面,导致程序在编译链接时,使用到该变量的时候找不到这个变量,因此就报错了。这就触及到知识盲区需要找资料看看怎么解决。

解决方案:

1.参考下图:

新建STM32工程并配置——基于固件库_超声波测距_25

2.发现还是会报错”Error: L6200E: Symbol HAL_SuspendTick multiply defined (by stm32f1xx_hal_timebase_tim_template.o and stm32f1xx_hal_timebase_rtc_alarm_template.o).“,这是由于在不同的文件中重复定义了,因此把在”STM32F10x_FWLib“对应的文件删掉就可以编译了。

附录

可以参考下面的链接也可以参考书,因为板子不一样其实还是有挺大出入的。

STM32F1xx的安装过程:​​https://www.bilibili.com/video/BV1Lx411Z7Qa?p=9&spm_id_from=pageDriver​​

举报

相关推荐

0 条评论