
6.1 初学者重要提示5 a& u9 {: P3 g: f. Q IAR的工程创建过程还是比较重要的,务必实际上手操作一遍。 6.2 第1步,创建工程文件夹 创建一个文件夹,里面包含如下文件(直接将跑马灯例子的Project文件里面内容全部删除,然后整个工程复制进来即可)。 $ e c: Z' V4 c" @2 m2 g8 e, x+ R ![]() Doc文件夹 用于记录例程的修改记录和例子简介。; ?+ l+ E% [& Z4 i B , x$ Z" q' k; [1 J5 X6 Y* r6 M Libraries文件夹 在第一章详细介绍从官网的下载方法。. n0 g* A+ r& A0 g9 F- s ' X1 m+ o2 q0 n7 x* |! d2 w7 { Project文件夹 这个是本章的重点,在这个文件夹里面再建立两个文件夹,EWARMv8文件夹用于存放IAR工程,MDK-ARM(uV5)文件夹里面用于存放MDK工程,方便以后创建MDK的工程。" W- J3 f* ~2 g- L 8 Q ]6 D5 u$ g# X ? User文件夹 这个是要用户提供的,开发板已经都提供好,bsp文件夹里面是开发板各个外设的驱动,segger文件夹是硬件异常分析代码。 6 C5 _5 B& X& P, d$ `6 G 删除目标文件.bat 这个是批处理文件,用于删除MDK和IAR工程编译后生成的obj和list临时文件。 6.3 第2步,创建新工程+ t/ G2 L! a, R- _; L% v 打开IAR,选择Project ->Create New Project+ i: Y, G$ L5 b: l: U1 M% E* E ![]() ![]() % R: L% V: G# {7 ^- ?! l 工程名设置为project: ![]() 创建后的效果如下: ![]() 5 f' a0 v. n% O 默认的情况下这里是创建了两个工程,一个用于Debug,一个用于Release。这两个其实是用的同一个工程,最大的区别是优化等级有所不同。! `) X0 W, k9 l" y ![]() 我们这里设置一下,将这两个都删掉,新创建一个Debug方式的,只是仅换了一个名字(主要目的是让大家看下操作方法)。打开菜单Project->EDIT Configration: ^# g4 e7 M+ I& c1 t 8 o" P+ w4 ?! {4 _* v ![]() / F W1 u2 s- M5 f5 V$ T 先新建后再删除其它两个,因为当前IAR使用的一个是无法删除的。 . v; P* r2 ^5 ^) D0 [; Z ![]() % g q$ A. ^! n# O* \ 点击确定后,再次点击确定: " A& o4 [* H& e8 x ![]() 7 E; | P' {( P9 }3 J3 E 可以看到左上角已经有三个了,这我们选择Flash,将其激活,也就是使用这个: ![]() 3 s7 i; u* N g( } 再次打开菜单Project->EDIT Configration就可以将Debug和Release删除掉了:; U( Q9 q# S( C/ O* _3 `* Q6 C 9 o/ m4 W( b) [0 B) J+ J0 @ ![]() 现在左上角就只有一个Flash了: ![]() 9 X5 ?4 k* S. Y e* ?" S. B 6.4 第3步,设置工程分组名+ k2 b" t0 R; C 默认新建的工程是下面这样的:1 V- q* ^( P, ] ; B9 A, _+ @ @/ q' P ![]() 在Workspace栏的空白地方鼠标右击选择Add->Add Group(如果有多个project同时在里面的话,要鼠标左击选中project - Flash,然后右击添加):0 e8 O( n' d) }, L ![]() 8 o8 \1 k. T+ t4 B2 F6 y/ t 通过这种方式,我们依次创建如下7个分组: 4 I7 n ]" H% G% t ![]() 6.5 第4步,添加工程文件+ V( @5 ?8 l, W 下面我们为各个分组添加上具体的文件。鼠标左击选中BSP,然后右击选择Add->Add Files ![]() 然后在新建的工程文件夹里面查找需要添加的文件即可。 ' `8 }% f5 l/ w7 P, b/ _" v A ![]() ; M) K9 j& v* y4 {* i. F, {1 | 添加BSP分组需要的文件0 u- \/ F" o7 q7 i b/ ~$ |0 r ![]() bsp.c 位于路径\User\bsp,主要用于MPU、Cache、时钟和外设初始化。3 W' L7 B6 l( i! q) | " w: ^ q ?9 z/ v( c bsp.h位于路径\User\bsp,此文件是各种头文件的集中汇总贴,方便管理。& f* ~1 p& Q+ D* N9 `9 k9 A bsp_led.c位于路径\User\bsp\src,用于LED驱动。 % M' z% J3 v* `3 L" j bsp_key.c位于路径\User\bsp\src,用于按键驱动。 bsp_timer.c位于路径\User\bsp\src,用于软件定时器组和微妙级单次延迟。 bsp_fmc_io.c位于路径\User\bsp\src,用于IO扩展,这里LED要用到。 bsp_uart_fifo.c位于路径\User\bsp\src,用于8串口FIFO驱动。( ~! p- H0 ?0 c) O& B/ o " o9 F; _1 D; G/ W I stm32h7xx_it.c位于路径User\bsp,用于部分系统中断服务程序。 添加CMSIS分组需要的内容6 x @6 e0 @: |1 q 9 V) A- p4 X3 E9 S ![]() # i4 B8 J- s! y) j! f: E( ?$ W# }+ i system_stm32h7xx.c位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates,主要用于复位RCC相关寄存器和中断向量表位置设置。 添加Doc分组需要的内容3 o$ m. e* Z* v; h8 e* @ ![]() & L, R5 O: _/ x6 s 这两个文件位于Doc文件夹,主要用于说明例程的功能和更新记录。 添加EWARMv8分组需要的内容 2 t$ l8 i, j5 s. O3 ] ![]() startup_stm32h743xx.s 位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates\iar,主要用于堆和栈空间设置,中断向量表也在这个文件。 # ?6 N. U% p Y4 S8 r7 O 添加HAL_Driver分组需要的内容1 n/ G S5 \. E ; y, e; b$ i+ P3 p) d ![]() ) C: ~8 @3 h! z2 ?. p" E6 R stm32h7xx_hal_conf.h位于路径\User\bsp,主要用于HAL库的配置。# O+ s9 C- g# b1 z* d* K# E. w 其它文件路径:\Libraries\STM32H7xx_HAL_Driver\Src,用到什么外设添加什么驱动文件即可,有些外设驱动跟DMA也有关联,直接添加进来即可。( O) Y8 l+ B2 P 5 L5 ~ g7 s& b/ K z, E 添加SEGGER/HardFault分组需要的内容; d5 r% I: n6 E4 M J3 S/ L$ z ![]() . d, k+ ^: g- P5 V" C) ]1 C 这两个文件位于路径:\User\segger\HardFaultHandlerMDK,主要用于硬件异常分析。( \5 F( ~% l' P6 u! x+ u 添加User分组需要的内容 ; V8 g v0 s: U, q, K1 ~- B ![]() " x' _- \0 V9 R, S; a" h2 W main.c文件位于文件夹User,实现了一个简单的跑马灯效果。9 ]) U: e/ }9 c. y ( E# s5 F5 G4 J- V* a 6.6 第5步,保存创建的Workspace 文件添加完毕后要保存Workspace,点击菜单File->Save Workspace As ![]() 弹出的对话框里面选择路径,设置文件名后,保存即可: ![]() 7 b3 B7 `8 _/ m% K) ?2 O$ ~4 w1 h' r 剩下就是工程的配置工作了。0 d0 y2 q6 l- ~4 | % Z% w7 v6 f! ]# G 6.7 第6步,Options配置 IAR的配置基本都集中在Options对话框里面:7 d1 u2 ~1 Q' u% E& [1 x7 o( ] ![]() ) l: C+ X# e; `+ t ![]() 5 h& T0 z$ U, @. y/ S 6.7.1 General Options选项1 s# Z. k4 J) p 这部分主要用于通用设置。选择ST的STM32H743XI: ![]() Library Configration选择全功能库: ![]() . i6 w0 y$ @) Z. {) n+ O; @! D1 K Library Options1里面的printf和scanf都选择支持全功能格式: / m9 I- T2 y1 O' ~2 Y7 W: G ![]() & @8 p5 O- l3 c8 P 6.7.2 C/C++ Compiler选项 这部分主要用于编译器设置,优化等级选择默认的低优先级:$ A c/ E8 q0 T0 y" b9 L 0 e4 e2 U: P; Z6 n8 H. p$ c ![]() Language 1选择C语言和C11规范(在第9章有介绍): ![]() 7 n* \) |4 ^' m% J! d 然后就是最重要的头文件路径添加,IAR提供的添加方式都是相对路径:! ]! b$ H0 ^/ X9 F7 H) }6 P/ A 1 r r/ q* a1 P) v* S+ o ![]() + u; N+ b6 k# t8 q0 ^( y' O+ k1 K) U 注意,添加的时候要添加相对路径,使用绝对路径的话,工程换个位置就无法使用了:% |* O. b) E# {) q1 R! V+ G! p ![]() 5 E, C' Q: @1 _) u ?7 T. o 将下面路径都添加进去: & U9 x6 M, Y F9 M) v& ?! \ q9 K# ?) W ![]() : V; M: ~6 D8 R: {; ^/ t2 b) x: B 同时在预定义宏选项里面添加如下宏定义:4 F9 p) `- \% O! a2 ]& _ USE_HAL_DRIVER 表示使用HAL库。, y0 O- G; N5 X* t( w$ _" _ Q0 B & b! k( A3 }3 g, \2 f& _ STM32H743xx 表示使用H743系列。 ![]() - P) M: R \6 E7 U# _ 6.7.3 Build Actions选项5 S8 M' y" `2 u& Q ![]() + S8 O5 ~0 }$ Q8 J3 Y8 E 这个选项基本用不上,可以不用管,主要是用来指定编译之前和编译之后执行的用户程序。对于本教程配套的例子来说在这里添加了一个批处理功能,用来实现Objects文件夹里面的hex文件复制到路径Project\EWARMv8里面,方便查找。 , S" l3 o! C, K/ C$ `$ v ![]() 6.7.4 Linker选项# x3 d7 I9 J! v0 S: P Linker选项主要是链接器的配置,其中最主要的是icf文件配置Flash和RAM区。在HAL库的软件包的路径:\Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\iar\linker里面提供了很多配置方式: ![]() 教程配套例子使用的是stm32h743xx_flash.icf,将这个文件复制到所创建工程的路径\Project\EWARMv8里面。然后在Linker选项里面将其添加进来:0 b0 s3 T. V' y7 }* G* W / j6 \% e3 x' y" y ![]() 添加进来后是个绝对路径: ![]() ! I! J' ]' _4 q# F0 M. D 要修改为相对路径:% g+ C7 }$ W9 v6 {3 Y7 b1 L6 o ![]() ) E) P( O3 e+ x; b 添加进来后要设置下中断向量表首地址,堆和栈大小,点击上面截图左下角的Edit按键进行配置。# N& f' _- u: k 中断向量表首地址设置为0x0800 0000: 8 p' Z, t' A, V3 |! J ![]() STM32H743XIH的Flash首地址是0x0800 0000,大小0x200000,即2MB。. }. D( ]+ R- [6 y 默认的RAM空间选择DTCM,首地址0x2000 0000,大小0x20000,即128KB。; D$ Z1 o+ A# V7 ]$ E! q ! ]$ |* ]$ C8 p* S' P- q8 F! M ![]() - L( x7 s8 {3 J, w/ e( H6 E# P( L 堆和栈大小分别设置为0x1000和0x800:" ]) h& P1 X( `2 p - G. @% {+ x- G0 i: X2 R# ]! ~" u ![]() # i1 q3 y2 J/ i- f1 l- b 设置完毕后记得点击保存。 6.7.5 Debugger选项5 t' r4 j" @2 ], A& |. A3 T Debugger选项主要用于调试下载,当前IAR支持如下调试工具:5 V8 i; \( E5 k8 H/ T9 ~ ![]() 具体的调试设置在下一章有详细说明,本章主要是保证创建的工程能够正常编译。 6.8 第7步,最后一步验证是否创建成功1 k& Q5 }$ q- M" @ 点击全编译: 0 i; {. X' _' \+ ^5 e: p ![]() 编译结果:0错误,0警告,编译成功。 ![]() 6.9 IAR的字体,多核并行编译,语法提示等设置/ J6 a0 M, R9 ? 这里将IAR经常用到的设置做个说明。 6.9.1 Tab Size设置1 w2 X0 i+ \5 Y- Z$ e- i 教程配套例子的Tab size要设置为4,否则代码显示不整齐。菜单Tools -> Options:" r }" {1 O, U9 g8 v% d/ A ![]() . F4 R C" m8 Y2 @- _ 6.9.2 字体设置 菜单Tools -> Options,支持比例字体和等宽字体选择: ![]() % W9 a8 ?+ `! U: l, v2 f$ j: M" ] 6.9.3 多核并行编译 电脑有几个核都选上,加快编译速度,我这里是四核: ![]() 9 H6 _4 E ^' E2 _ 6.10 总结 对于初学者来说,务必要实际动手操作一遍,以后移植其它程序代码大有裨益。 9 o% y$ S: ]0 ]5 |# f |
STM32H7的TCM,SRAM等五块内存基础知识
STM32H7的TCM,SRAM等五块内存基础知识
简单了解一下STM32H7的BDMA
有奖预约 | STM32H7R7基于RT-Thread RTOS的智能终端GUI解决方案
【STM32H745I-DISCO】基于TouchGFX的工业控制器界面设计
STM32H745I-DISCO串口打印
【STM32H745I-DISCO】TouchGFX探索——3、触屏滑屏操作与中文显示
TouchGFX软件下载及使用
【STM32H745I-DISCO】TouchGFX探索——2、照葫芦画瓢
STM32H745I-DISCO硬件信号为空,M4、M7对于硬件信号的优先性判断