STM32开发笔记02---新建库函数工程

架构图

创建工程

首先我们先创建一个资料夹example,路径最好配置为全英文,然后分别在example资料夹内再创建6个资料夹,分别是:

DocLibrariesListingOutputProjectUser

然后开启keil,选择Project → New uVision Project新建一个工程

位置选择我们刚刚创建的example资料夹下的Project资料夹,命名后按下确定新增专案

接着选单会要求你选择开发版的型号,查看开发版资讯然后依序找到对应版本,如图我的开发板使用的是STM32F429IGT,按下ok进入下一步

设定完成后keil会要求你用keil新建工程包导入CMSIS, Driver等库(Manage Run-Time Environment),这一步先按cancel,我们使用手动配置较为快速

到这一步我们已经创立一个空的工程文件,不过为了补全刚刚跳过的库文件配置我们需要到官方网站下载对应版本的firmware

手动添加文件

将刚刚下载下来的firmware压缩档解压缩,注意途中的红色方框,等等我们需要将firmware中的档案从这些资料夹中複製出来

回到keil,在左侧的Project栏位右键新增STARTUP, STM32F4XX_StdPeriph_Driver(按照你下载的firmware版本取名), User, Doc这4个Group

接着我们把刚刚解压缩后的firmware路径STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries下的CMSIS, STM32F4xx_StdPeriph_Driver两个folder複製到我们自己创建的Libraries目录下

?注意: CMSIS资料夹只留Device跟Include资料夹就可以了,其他档案皆可以删除。同理STM32F4xx_StdPeriph_Driver只留inc与src资料夹

再来我们还需要複製来自firmwareProject\STM32F4xx_StdPeriph_Templates的以下档案:

main.c/main.hstm32f4xx_conf.hstm32f4xx_it.c/stm32f4xx_it.h

把这些档案複製到我们创建的User资料夹下吧!

不过到这一步,keil右侧专案栏位还是没有显示这些档案,必须要透过手动方式添加。执行方式非常简单,只要在Group处右键选择添加已存在档案就可以了(也可以透过双击Group),这个步骤的目的是将刚刚複製过来的档案加入到专案中

档案的分配如下

STARTUP档案名: startup_stm32f429_439xx.s(依照你的开发板型号选择)位置: Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm功用: 启动文件STM32F4xx_StdPeriph_Driver档案名: Libraries\STM32F4xx_StdPeriph_Driver\src下所有.c文件位置: Libraries\STM32F4xx_StdPeriph_Driver\src功用: 外设相关文件Users档案名: main.c, stm32f4xx_it.c位置: Users\功用: 开发者自行编写的文件Doc看需求自行编写开发者日誌(ex. README)

配置完成后应该会如下图所示:

?注意:档案路径是你创立的专案,前提是你已经把这些文件从firmware资料夹複製过来了,不要搞错了!

配置魔术棒

点选编辑面板上方的"魔术棒"图示进入环境配置选单,我们依序更改Target, Output, Listing, C/C++的预设值,需要的操作行为如下表所示:

Target选单勾选Use Micro LIBARM Compiler选择compiler version 5

Output选单选择我们创建的资料夹勾选create HEX File

Listing选单选择我们创建的资料夹

C/C++选单Define: STM32F429_439xx,USE_STDPERIPH_DRIVER(指定driver, 包含stm32f4xx_conf.h)incldue path(家目录 + User目录 + 具有header文件的路径)

一些编译问题

完成魔术棒的配置以后理论上就可以编译(F7)成功了,但如果编译结果显示错误不妨参考下列常见问题(以STM32F429为例)

main.c文件清空

从firmware複製过来的main.c程式有太多多余的程式,有时候没有确实包含标头档,或者专案压根就没有这些文件,这时候就容易发生错误。所以在编译之前,建议还是先把main.c清空成以下预设状态

// #include "stm32f4xx.h"int main(void){         /* Infinite loop */  while (1)  {  }} void SystemInit(void) { } 

Error: L6218E: Undefined symbol TimingDelay_Decrement (referred from stm32f4xx_it.o).

需要到stm32f4xx_it.c中把TimingDelay_Decrement();注解掉:

void SysTick_Handler(void){//  TimingDelay_Decrement(); // not defined!}

STM32F429的FSMC

STM32F429中的开发板中,FMC周边外设已取代FSMC,所以我们需要手动将stm32f4xx_fsmc.c屏蔽掉。解决方法是在Project栏位右键stm32f4xx_fsmc.c文件 → Options for File stm32f4xx_fsmc.c

将Include in Target Build取消勾选,让编译器不去编译这个文件

唯读档案处理方法

如果我们把Project栏位点开会发现很多档案会附加上"钥匙"的图示,开启后虽然可以读取但不能修改里面的程式码,这是因为文件被配置成"唯读"属性。解决方法是到专案资料夹中将资料夹属性的唯读取消勾选

程式最后一行要留空行

keil要求开发者在所有文件的最后一行留一个空行,如果不这么做的话编译会提示warning: #1-D: last line of file ends without a newline

?注意:最后一行必须是完全空的,如果包含space还是会报warrning

设成Template模板

到此为止专案应该可以成功的编译并且0w0e才对,这时候把刚刚创建的专案当成预设模板,以后要新增专案时直接複製这个工程模板就可以,不用每次都大费周章设定

Debugger配置

如果你想将编译完成的程式烧录进板,就需要配置烧录器设定。一样点开魔术棒然后选择Debug选单,依照你的烧录器型号选择配置

如果烧录器成功连接,keil应该会侦测到。我们点开右侧的Settings,里面可以配置:

你的烧录器型号支援的烧录模式SW/JTAG, 烧录速度连接与复位操作: Normal, SYSRESETREQ

点击Flash Download选单,勾选Erase Sectors, Program, Verify, Reset and Run并确认下方板子的型号与flash大小是否正确

上述操作都完成以后就可以保存退出,在编辑页面按下F8就可以开始烧绿了,成功的话会显示以下资讯:


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章