STMCU小助手
发布时间:2022-6-10 19:41
|
02. 创建工程步骤( j$ {) q+ f1 T- d% b; ` 2.1 创建对应的文件夹 新建下面 5 个子文件夹:CORE ,FWLIB,OBJ,SYSTEM,USER。至于这些文件夹名字,实际上是可以任取的,我们这样取名只是为了方便识别。对于这些文件夹用来存放什么文件,我们后面的步骤会一一提到。, v' h7 K/ a% S, I: i: E4 ?
% A" L4 L( H! y1 r% t 2.2 创建工程项目4 E* K" s* P0 z. j " [! f. C5 S5 w3 q- Z 打开 Keil,点击 Keil 的菜单:Project –>New Uvision Project ,然后将目录定位到刚才建立的文件夹 Template 之下的 USER 子目录,同时,工程取名为 01Test之后点击保存,我们的工程文件就都保存到 USER 文件夹下面。
& M. g$ Z9 v2 ]* x 2.3 保存工程文件名 工程取名为 01Test之后点击保存,我们的工程文件就都保存到 USER 文件夹下面。 . S+ C4 O# i/ E9 Y$ }$ D
2.4 选择芯片型号 定位到STMicroelectronics 下面的 STM32F407ZG( 针对我们的 ExplorerSTM32 板子是这个型号)。这里我们选择 STMicroelectronics→STM32F4 Series→STM32F407→STM32F407ZG
$ R) e: f# l9 m 2.5 管理运行时环境 0 u3 y! l% f7 p" n MDK 会弹出 Manage Run-Time Environment 对话框,这是 MDK5 新增的一个功能,在这个界面,我们可以添加自己需要的组件,从而方便构建开发环境,我们直接点击 Cancel即可,取消之后得到的界面如下:+ @1 S' j1 s4 F# |4 o( l) \. o
2.6 复制固件库源码文件8 S% t6 a N) t" N 打开官方固件库包,定位到我们之前准备好的固件库包的目录:\STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\STM32F4xx_StdPeriph_Driver 下面,将目录下面的 src,inc 文件夹 copy 到我们刚才建立的 FWLib 文件夹下面。 src 存放的是固件库的.c 文件,inc 存放的是对应的.h 文件,每个外设对应一个.c 文件和一个.h 头文件。, o) m% f& k# ? - r$ u" X3 a' e8 B4 Z0 O& M
2.7 复制启动文件 将固件库包里面相关的启动文件复制到我们的工程目录 CORE 之下。 ; E- n3 | \. ~ ~ \STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm 下面,将文件 startup_stm32f40_41xxx.s 复制到 CORE 目录下面。然后定位到目录\STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Includ , 将 里 面 的 四 个 头 文 件 :core_cm4.h 、core_cm4_simd.h 、core_cmFunc.h 以及 core_cmInstr.h 同样复制到 CORE 目录下面。现在看看我们的 CORE 文件夹下面的文件,
; e9 K3 C8 L. W# r9 M+ r 2.8 复制其它头文件和源文件 2 }& {: u3 G$ H' m" J 首先定位到目录:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include 将里面的 2 个头文件 stm32f4xx.h 和 system_stm32f4xx.h 复制到 USER 目录之下。这两个头文件是STM32F4 工程非常关键的两个头文件。后面我们讲解相关知识的时候会给大家详细讲解。然后进入目录\STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templates ,将 目 录 下 面 的 5 个 文 件 main.c , stm32f4xx_conf.h , stm32f4xx_it.c , stm32f4xx_it.h ,system_stm32f4xx.c 复制到 USER 目录下面。( E- f# N W N
! F! D N' Z5 {; |& L 2.9 添加文件到工程中/ B& z X4 ~5 e4 Q 前面几个步骤,我们将需要的固件库相关文件复制到了我们的工程目录下面,下面我们将这些文件加入我们的工程中去。右键点击Target1,选择 Manage Project Items,. L# y0 z+ ^- J- R9 F( _ 2 m* n6 [) p3 W3 e0 e
2.10 设置项目结构 Project Targets一栏,我们将Target名字修改为01Test,然后在Groups一栏删掉一个SourceGroup1,建立三个 Groups:USER,CORE,FWLIB。然后点击 OK,可以看到我们的 Target名字以及 Groups 情况如下图: % C' U7 C* }! ~% K0 R, v
选择OK,出现如下界面: " A* {& e' p; ~" ` h ^
2.11 添加FWLIB目录下的文件 右键点击点击01Test,选择 Manage Project Items.然后选择需要添加文件的 Group,这里第一步我们选择 FWLIB,然后点击右边的 Add Files,定位到我们刚才建立的目录\FWLIB\src 下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close.可以看到 Files 列表下面包含我们添加的文件8 c; C2 D7 O8 V+ s7 J( U3 h $ S( {5 c) {4 j4 h& |0 F
对于我们写代码,如果我们只用到了其中的某个外设,我们就可以不用添加没有用到的外设的库文件。例如我只用 GPIO,我可以只用添加 stm32f4xx_gpio.c 而其他的可以不用添加。这里我们全部添加进来是为了后面方便,不用每次添加,当然这样的坏处是工程太大,编译起来速度慢,用户可以自行选择。 6 `) Q3 m+ O) U+ x 这里有个文件 stm32f4xx_fmc.c 比较特殊。这个文件是 STM32F42 和 STM32F43 系列才用到,所以我们这里要把它删掉(是 注意是 stm32f4xx_fmc.c 要删掉,不要删掉 stm32f4xx_fsmc.c)。 3 [' ?5 Y3 {8 [+ ~2 o9 N. d' T
& k) ]" I6 l7 d- F' Y7 o2 z+ g 2.12 添加CORE目录下的文件0 x5 d `, S+ V 用同样的方法,将 Groups 定位到 CORE,添加需要的文件。这里我们的 CORE 下面需要添加的文件为 startup_stm32f40_41xxx.s( 注意,默认添加的时候文件类型为.c, 也就是添加 startup_stm32f40_41xxx.s 启动文件的时候,你需要选择文件类型为 All files件才能看得到这个文件),
! U( v# B6 J M 2.13 添加USER目录下文件/ r' `! Z( R! g4 e" v 4 m+ o4 n: O: ]4 H1 G, p6 t USER 目录下面需要添加的文件为 main.c,stm32f4xx_it.c,system_stm32f4xx.c。 这样我们需要添加的文件已经添加到我们的工程去了,最后点击 OK,回到工程主界面。: i: Q! R) g& [3 v9 o% N+ h) r* A/ D + a% F. z, p# e2 S
主界面如下:' d' M) Q, ^2 K& d% Y9 D) G/ a; D8 q - [9 |. F( W8 l0 s* R* k
% [, A! |; p z& S- R" z 2.14 设置头文件路径 , O5 {' }# ?5 {4 Y 我们要在 MDK 里面设置头文件存放路径。也就是告诉 MDK 到那些目录下面去寻找包含了的头文件。这一步骤非常重要。 如果没有设置头文件路径,那么工程会出现报错头文件路径找不到。5 t9 U7 s( @' N7 z6 D
( G. i* ?3 Q X8 z* s! q 这里我们需要添加的头文件路径包括:\CORE, \USER\以及\FWLIB\inc。这里大家务必要仔细,固件库存放的头文件子目录是\FWLIB\inc,不是 FWLIB\src。! d2 K# S( C4 n . f1 G2 l) H' [- j- g9 K9 k% S2 n
- b. o9 W, s% l5 O1 E; l8 M5 u 2.15 添加宏定义 + a; E/ V" P5 t, w* G 接下来对于 STM32F40 系列的工程,还需要添加一个全局宏定义标识符。添加方法是点击魔术棒之后,进入 C/C++选项卡,然后在 Define 输入框连输入:STM32F40_41xxx,USE_STDPERIPH_DRIVER。注意这里是两个标识符 STM32F40_41xxx和USE_STDPERIPH_DRIVER, 他们之间是用逗号隔开的,请大家注意。; l3 i' A6 l1 V- ^) K$ a% Z
$ k: ~+ f, N8 u" E, b; Y; e/ Z1 U 2.16 设置中间文件存放路径+ K8 `5 h K% e3 @ 然后选择“Output”选项下面的“Select folder for objects…”,然后选择目录为我们上面的 新建的 OBJ 目录。同时将下方的三个选项框都勾上。
4 `( g- {* n6 V9 w6 c6 p Create HEX File 选项选上是要求编译之后生成 HEX 文件。Browse Information 选项选上是方便我们查看工程中的一些函数变量定义。 2.17 修改主函数代码$ i( N, x( n S# R& b9 H( K7 X
与此将 同时,我们要将 USER 分组下面的 stm32f4xx_it.c 。 文件内容清空。的 或者删掉其中的 32 行对main.h 头文件的引入以及 144 行 行 SysTick_Handler 函数内容,, ^+ h& B6 w8 ~3 [! m2 C# N3 X ! e) V4 I, o3 G9 z A( _& |7 e 2.18 编译工程+ _; v! v3 w' x# K4 |" m% t4 Y/ ^% H4 q k * l; L( g j1 ? 可以看到工程编译通过没有任何错误和警告。, j8 [0 s5 I/ f ) L @* g/ ^$ i1 E2 S
6 e* R8 P- v0 U0 [7 @ 到这里,一个基于固件库 V1.8 的工程模板就建立完成,同时在工程的 OBJ 目录下面生成了对应的 hex 文件。3 u! `8 t9 e! U ) [. e2 n) r. E9 o+ l# X 03. 系统时钟配置 我们要修改 System_stm32f4xx.c 文件,把 PLL 第一级分频系数 M 修改为 8,这样达到主时钟频率为 168MHz。 u+ v y+ o! O6 u' J# G9 U
同时,我们要在 stm32f4xx.h 里面修改外部时钟 HSE_VALUE 值为 8MHz,因为我们的外部高速时钟用的晶振为 8M,具体修改方法如下: 2 O: s& _! u& D. ]# c
一定要在对应的配置文件中,找到相应的代码行,修改为符合我们硬件的值即可。! H9 b. X* y. n: z/ F7 Q 04. 添加其他功能函数 可以看到有一个 SYSTEM 文件夹,进入 SYSTEM 文件夹,里面有三个子文件夹分别为delay,sys,usart,每个子文件夹下面都有相应的.c 文件和.h 文件。 我们将 SYSTEM 文件夹 和 里面的三个子文件夹复制到我们工程根目录中。 如下图。我们接下来要将这三个目录下面的源文件加入到我们工程,同时将头文件路径加入到 PATH 中 + }# ]) J: S* r1 j: t2 H( O
( z& ^6 `' _% G4 z6 S0 ~ 然后点击“OK”之后可以看到工程中多了一个 SYSTEM 组,下面有 3 个.c 文件。 接下来我们将对应的三个目录(sys,usart,delay)加入到 PATH 中去,因为每个目录下面都有相应的.h 头文件。, ]; {& u; i/ R T n
修改主函数如下
编译结果' p1 n# S) u9 e, f% T
# ~3 O4 g O/ I8 h& Z + D; k( E0 A8 Y: W6 \/ M4 S $ c. g, c) O6 a$ N4 ~* z1 |" f |
【福利三:雨露均沾·逢7狂欢】之四:用一个定时器同步另外两个定时器输出PWM
【逢7发帖赢大礼】STM32开发之WIFI实时时钟
【逢7发帖赢大礼】STM32开发之指纹识别!
【逢7发帖赢大礼】STM32开发之环境空气质量监测
【逢7发帖赢大礼】STM32开发之人体实时运动信息监测!
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
【逢7发帖赢大礼】全网最简单的Arduino_STM32开发环境搭建教程!
STM32F4中文用户手册
STM32F400、STM32F402 Cortex-M4超值单片机
SPI 高温读错最后一位?STM32F42xx 官方根治方案
微信公众号
手机版
你好,请问第四步SYSTEM 文件夹,里面有三个子文件夹分别为delay,sys,usart,这个SYSTEM文件夹是哪里的文件夹呀,具体路径是什么呢?