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

架构图

创建工程

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

  • Doc
  • Libraries
  • Listing
  • Output
  • Project
  • User

然後开启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的以下档案:

  1. main.c/main.h
  2. stm32f4xx_conf.h
  3. stm32f4xx_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 LIB
    • ARM 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,里面可以配置:

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

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

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


<<:  为了转生而点技能-JavaScript,day26(Event初探

>>:  django新手村4 -----templates

Day 13 「难兄难弟」 单元测试、Code Smell 与重构 - Data Clump 与 Primitive Obsession 篇

图片截自三立新闻 与笔者年纪相当的朋友,肯定还记得小时候有个非常红的电示节目叫「龙兄虎弟」吧。当时...

Golang-排序演算法

这篇文章算是做个纪录 把工作上遇到的问题,想到其他的解法记录下来 状况 资料因为从map取得,处理过...

进击的软件工程师之路-软件战斗营 第十二周

学习进度 资料结构 Stack Queue Android Studio Activity(Life...

Day 19 不得不变的学习方式

事情在好起来之前,总会先变很坏,然後才会慢慢的变好。在经历这些过程後,记得要把失去的补回来,把得到的...

纪录location herf在IIS发行後无法使用问题

原本的写法在VS里是可以执行的,但发布到IIS上时会因为找不到路径从而跳出404 not foun...