STMCU小助手
发布时间:2021-10-28 23:34
|
4.1 初学者重要提示 KEIL官方有一个专门的MDK上手文档mdk5-getting-started,在MDK的安装目录里面 MDK5的工程创建过程还是比较重要的,务必实际上手操作一遍。 w* U" L7 _$ h- G 4.2 第1步,创建工程文件夹( F' e4 g% i2 {1 o* ?0 i 创建一个文件夹,里面包含如下文件(直接将跑马灯例子的Project文件里面内容全部删除,然后整个工程复制进来即可)。9 Q/ A$ f+ ]+ v# S2 {! Q
Doc文件夹 用于记录例程的修改记录和例子简介。4 A2 P, T9 w9 T% q- T 6 y C" e$ v# Z7 F. F Libraries文件夹 在第一章详细介绍从官网的下载方法。 Project文件夹 这个是本章的重点,在这个文件夹里面再建立两个文件夹,MDK-ARM(uV5)文件夹里面用于存放MDK工程,EWARMv8文件夹用于存放IAR工程,方便以后创建IAR的工程。$ H* ?7 l2 w: c: B ! ~$ ?. d/ X7 Y) ?3 V; F User文件夹: `, `" L+ ]% y9 T' E1 A8 ^ 这个是要用户提供的,开发板已经都提供好,bsp文件夹里面是开发板各个外设的驱动,segger文件夹是硬件异常分析代码。 & h- N8 k% E; u' |# H5 \3 P( i 删除目标文件.bat" {. \0 B$ }: c4 ^* U3 f 这个是批处理文件,用于删除MDK和IAR工程编译后生成的obj和list临时文件。& I/ W9 v" j; N, D: H( o0 R, M: `$ z 4.3 第2步,创建新工程& H' x/ q1 C% ~" M8 p- y K" M8 @8 } 打开MDK,选择Project ->New uVision Project:+ O! Y* Z" C2 k5 m: Z1 b( @
工程名设置为project:
选择器件:STM32H743XIHx 6 _1 H1 Q/ G/ b1 z+ s" `/ I3 H7 G; P: r
点击OK后弹出如下界面,点击Cancel取消,当前我们还不使用RTE环境创建, / ]1 u1 F) ]+ g
4.4 第3步,设置工程名和工程分组名, b5 ~6 ?: q* I6 U9 X+ C 默认新建的工程是下面这样的: 1 N; g5 ^ p6 h1 W9 Q4 ]
打开Manage Project Items,双击Targer1修改名字为Flash,或者任何其它方便自己管理的名称,设置完毕后点击OK。
; x8 L+ E% {- X; b 可以看到已经修改为Flash:. a! \8 W+ A6 F( r7 a1 T
再次打开Manage Project Items,添加如下分组内容:& U+ P2 R0 h" U- V7 u; e; v : h6 j+ W: [4 t$ o# v4 t! ^" r8 u
可以看到左侧工程列表已经更新:7 s- V; v+ ^- v# K7 E! n
4.5 第4步,添加工程文件" T5 b8 [; L/ o. O/ i$ g 添加方法跟第2步,第3步一样,可以通过Manage Project Items添加:
也可以直接双击工程列表里面的分组添加(注意文件类型里面推荐设置为ALL files所有文件):
( {1 M' p4 _# o0 d# A0 k 添加User分组需要的文件2 w* I7 F" z0 ^. u5 F+ G
main.c文件位于文件夹User,实现了一个简单的跑马灯效果。 + h7 F% N8 e+ c$ y& m4 o 添加BSP分组需要的内容 # S- {# j0 P* ^/ d
& ]% d) G+ @. l- c bsp.c 位于路径\User\bsp,主要用于MPU、Cache、时钟和外设初始化。# F2 T7 g9 l. ^" i1 G! w2 p bsp.h位于路径\User\bsp,此文件是各种头文件的集中汇总贴,方便管理。! A6 |- K6 X" v& f( Q $ T6 a1 Q! Z% I: `, R3 P* } bsp_led.c位于路径\User\bsp\src,用于LED驱动。 9 c0 n* e$ u4 J- U9 B! ]3 R3 f) [# e bsp_key.c位于路径\User\bsp\src,用于按键驱动。& E1 Z7 r; b9 B, j% e/ V6 T4 C 6 v4 i; j3 |) i0 x1 R bsp_timer.c位于路径\User\bsp\src,用于软件定时器组和微妙级单次延迟。0 z1 P5 X" {# @! i# ^8 J$ @) O: c- j bsp_fmc_io.c位于路径\User\bsp\src,用于IO扩展,这里LED要用到。 % e& A- j1 N9 \9 { }. ^: i; g. | bsp_uart_fifo.c位于路径\User\bsp\src,用于8串口FIFO驱动。 ( H8 b1 j% Q2 D, b( j2 J& H stm32h7xx_it.c位于路径User\bsp,用于部分系统中断服务程序。7 ?/ p" R, q$ s1 x, e0 U. W 添加MDK-ARM分组需要的内容 4 u2 J! I0 V3 @4 `( {! K
1 Z* h- _+ ?9 x& ^0 }) _1 u startup_stm32h743xx.s 位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates\arm,主要用于堆和栈空间设置,中断向量表也在这个文件。 添加HAL_Driver分组需要的内容/ W* T) s' L) \- t+ \) H. o) ~4 r& l- \
stm32h7xx_hal_conf.h位于路径\User\bsp,主要用于HAL库的配置。; S, Z8 p/ p+ t 其它文件路径:\Libraries\STM32H7xx_HAL_Driver\Src,用到什么外设添加什么驱动文件即可,有些外设驱动跟DMA也有关联,直接添加进来即可。4 d U* h& `* ]6 d* m) j, S2 b H 添加CMSIS分组需要的内容
( v! N+ [" T3 d& n, l1 v9 K2 { system_stm32h7xx.c位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates,主要用于复位RCC相关寄存器和中断向量表位置设置。1 t7 B( U& y) k) o0 ]( A 添加SEGGER/HardFault分组需要的内容* N2 @$ S7 N. D, Z
+ F1 h, d6 j1 n6 @ 这两个文件位于路径:\User\segger\HardFaultHandlerMDK,主要用于硬件异常分析。7 M6 z5 |3 \# l5 T0 p+ X" {( ^ 2 [- j: M5 [; W& w& E5 ^9 j! g 添加Doc分组需要的内容9 W$ v; R/ d1 V* H8 W # \9 b/ }/ @3 h" N9 E$ F
% r1 V/ Z9 B5 N. h7 \ 这两个文件位于Doc文件夹,主要用于说明例程的功能和更新记录。 4.6 第5步,Target Options配置( _, c! o+ j- C0 R' r: j MDK的配置基本都集中在Target Options对话框里面:/ y1 h8 x$ y$ U @
4.6.1 Device选项2 \ K( D/ v- T* d 这个选项不用管,因为我们在创建的时候已经选择了STM32H743XIHx
0 i X8 n, {$ L- f( w& d 4.6.2 Target选项& l w8 I6 P& d A; ~: u A
因为我们一般不用软件仿真,这个选项不用管,也不推荐大家用MDK提供的软件仿真,问题比较多。 选择编译器,使用默认的AC5即可。当前AC6支持的还不够好,仅MDK自家的软件都支持了,第三方的问题稍多。 我们这里使用微库MicroLib,这个库针对嵌入式应用,MicroLIB做了深度优化,比使用C标准库所需的RAM和FLASH空间都大大减小。比如调用:<math.h>,<stdlib.h>,<stdio.h>,<string.h>。
3 }) |9 D9 U% R2 Y0 C9 v+ R, } STM32H7支持双精度浮点,所以这里选择Double Precision双精度浮点。 STM32H743XIH的Flash首地址是0x0800 0000,大小0x200000,即2MB。* D& A( `) H3 @9 C9 J2 a) e; s 默认的RAM空间选择DTCM,首地址0x2000 0000,大小0x20000,即128KB。/ A7 q5 n8 U/ Z1 @ x# V 地址0x2400 0000,大小0x80000,即512KB是AXI SRAM的空间。/ R8 h* o. h! ]$ S9 o9 Q8 m 4.6.3 Output选项
用于存放MDK编译过程中生成的obj临时文件路径,MDK在创建的时候已经帮我们创建好文件夹Objects,这里无需修改,使用默认即可。 Debug Information表示调试信息,选上。' T! M$ |' Y$ ]' y* I Create HEX File表示是否生成hex文件,选上。 Browse Information表示是需要go to def的支持,使用HAL库话,推荐先不要选上,因为MDK5使用AC5编译HAL库时间比较长.* @& V6 V' t) F R. q& {6 M( X3 S; k
0 T. k" s- V9 p3 o( s$ I i7 R 4.6.4 Listing选项7 ~1 v. |6 }: A9 Z# h/ G I ; y5 U% V0 L6 ?
+ V7 R5 M; G1 }& g2 W 用于存放MDK编译过程中生成的list临时文件路径,MDK在创建的时候已经帮我们创建好文件夹Listings,这里无需修改,使用默认即可。( g9 D+ i! s ?! q& |! r 是否生成*.lst文件,选上。 查看MAP文件要用上,全部选上。 4.6.5 User选项
这个选项基本用不上,可以不用管,主要是用来指定编译之前和编译之后执行的用户程序。对于本教程配套的例子来说在这里添加了一个批处理功能,用来实现Objects文件夹里面的hex文件复制到路径Project\MDK-ARM(uV5)里面,方便查找。 ) L! g# e6 n# m" Y5 b+ Z
4.6.6 C/C++选项% Z( V) P) W, Y/ ^/ l L: i: U" b
预定义宏) A0 Q4 I2 P! m7 J3 a$ d9 B- B, x USE_HAL_DRIVER 表示使用HAL库。 {8 }7 X8 T1 `; [% F8 _ 2 b- v$ `" @% W5 v X. c2 N; | STM32H743xx 表示使用H743系列。 $ T2 h8 l6 h( ` 选择0级优化,优化等级低,方便调试。 如何做MDK编译器的代码最小优化和性能最佳优化 p9 m p. b) h3 c2 D + x- o) u5 ]: {9 ]; t1 W/ G% n: H 选项One ELF Section per Function用于删除工程中没有用到的冗余函数。+ v) ~' V& e/ w$ X5 ^) v% `( } , l6 ]. O' E& ^" L/ Z: [ 使用C99规范,在第9章有介绍。# f f8 w2 j" u: q+ N 添加路径,把用到的头文件路径包含进来,点击最右侧的小按钮,弹出如下界面进行添加即可:
4.6.7 Asm选项/ I: ?3 L+ T- T6 l1 N 3 U' L8 p0 |+ c( [
6 N/ m' g# l3 {2 a; s7 J 这个选项用不到,不用管。. I% @. j9 ^# \+ Y8 |( [, k ( |) Q" e/ U8 |* e/ [ 4.6.8 Linker选项
4 V# P0 I) e$ ?- j( e8 Q: c9 R& q% k 这个选项用不到,不用管。0 y p1 X$ s4 M9 Y8 @* T 4.6.9 Debug选项6 F( \4 \( c/ d. k) f0 v7 W9 X" E 6 y4 I3 A, X: D% t! y2 i6 \$ j
软件仿真不推荐大家用,问题比较多。3 A$ Q3 W/ [5 u* Y& m1 G4 r* n 硬件仿真,这里选择的STLINK,大家根据自己用的那种调试器选择相应型号即可。 $ X. Y. n+ ~3 j+ B7 t
具体的调试设置在下一章有详细说明,本章主要是保证创建的工程能够正常编译。* F: V! g- {3 @6 J) F& l 4.6.10 Utilities选项 ) R9 j' j5 P% y* c3 M/ x! w$ Z 5 s9 }. V6 J, r, x/ D1 g; S 这个选项主要用于编程工具选择,大家根据自己用的那种下载器选择相应型号即可。9 d4 c- l T" m: {6 W* V5 k Update Target before Debugging表示调试前更新芯片的程序。$ y# M$ j5 K( ?9 S 4.7 第6步,最后一步验证是否创建成功8 N( R$ Y$ M. D; w0 R+ u 点击全编译:% N4 j* v" ^0 @8 X6 T. O- C3 q u. s4 X1 g) |! o4 l8 s
编译结果:0错误,0警告,编译成功。
* q5 |5 L( g3 G2 i9 X" c5 B 4.8 MDK的字体,多核并行编译,语法提示等设置 这里将MDK经常用到的设置做个说明。7 Z* Y& J9 k3 Z) `9 z t( e9 u8 V9 K# H 4.8.1 Tab Size设置" N( r% Q4 y) v/ Q/ z 教程配套例子的Tab size要设置为4,否则代码显示不整齐: 6 i6 k3 }3 `, P 选择此图标:' Q" l8 w, ^9 k B M1 n
弹出的窗口里面设置Tab size为4:
0 _: D& f/ M# N2 ~& s& b0 Q- f3 W5 b 4.8.2 使能多核并行编译, c& _% f, K. R 电脑有几个核,都选上,加快编译速度。& m8 j5 [/ Y8 K2 B ~. v* V- F& i / ]; O1 T) H7 ]1 L8 W 选择此图标:1 G; a9 Y" V+ d# h2 Q8 i
) M9 ?4 u+ g8 D) S1 f! [ 我这里是四核:# Q" d* l$ N% P9 h+ E0 G/ c' @ ( K8 _3 C( [2 @! k6 e' r3 `
% H6 A5 j3 _, X: _) N 4.8.3 字体设置1 b: k. q" c; ^8 S' P6 P$ | 推荐大家用下微软雅黑,而且可以防止复制粘贴的时候出现乱码问题$ |$ a& k/ G r 安装微软雅黑的时候要注意,电脑端默认自带了一个微软雅黑,安装的时候会出现字体是躺着的。 7 _+ Y* ~" I) o# {) p 择此图标:$ [0 F: l& H \/ n 4 {/ R1 v! E- S6 v* u, ^2 f$ w3 R# R8 v 6 J0 H9 J6 W% {/ S/ t 选择中文简体:# ?; W8 d3 h, h' ^+ [" F" Z # _) N8 o9 o2 @+ T/ K
选择安装微软雅黑字体:& j5 Z# R1 D( M" s) y
效果如下:
A1 C d4 ?+ A! U9 w( @* s 4.8.4 语法提示和语法检测功能, B1 t+ v9 v1 i6 A 选择此图标: 1 T' P+ A# L% d% Q, ~* J2 i: T 2 a; u& h, v% l1 q! ~0 P MDK的语法提示和语法检测功能还行,大家可以根据需要开启:" k) H2 R t8 {
+ L1 x# U& U) c6 C0 x; e2 l 4.9 总结 对于初学者来说,务必要实际动手操作一遍,以后移植其它程序代码大有裨益。 $ f+ L" E. F3 J' B; Z |
微信公众号
手机版