STMCU小助手
发布时间:2021-12-25 10:57
|
6.1 初学者重要提示- t7 x1 E3 O) @" A2 @ IAR的工程创建过程还是比较重要的,务必实际上手操作一遍。- o, e' {, I8 J3 y0 k 6.2 第1步,创建工程文件夹 创建一个文件夹,里面包含如下文件(直接将跑马灯例子的Project文件里面内容全部删除,然后整个工程复制进来即可)。9 ^: b) o. R+ |/ B1 E. n
- [0 i" M& A' b( B1 e6 J Doc文件夹 用于记录例程的修改记录和例子简介。 Libraries文件夹 在第一章详细介绍从官网的下载方法。% ] g/ m" I6 x7 T) @+ X % S' K+ ~/ c# x( x5 k Project文件夹 [' T2 ^5 x" p7 m. Q3 o) N8 ^- N& e' i# N 这个是本章的重点,在这个文件夹里面再建立两个文件夹,EWARMv8文件夹用于存放IAR工程,MDK-ARM(uV5)文件夹里面用于存放MDK工程,方便以后创建MDK的工程。* t# m8 B; K8 K) H- z User文件夹9 w0 n9 k! t/ g) m! x- j+ u. c$ @ & }1 I7 ]8 n9 q! g3 C, X 这个是要用户提供的,开发板已经都提供好,bsp文件夹里面是开发板各个外设的驱动,segger文件夹是硬件异常分析代码。 8 a0 [# v! O2 f9 y* H 删除目标文件.bat+ x* h4 I" _2 m8 Z* `* K 这个是批处理文件,用于删除MDK和IAR工程编译后生成的obj和list临时文件。' I" @ g) ?2 H/ ~ 6.3 第2步,创建新工程$ ~ [# x& F" L0 T( U% F' N/ h 打开IAR,选择Project ->Create New Project . H K( ^3 g0 \3 y4 k, r
% P) i7 g& ?$ v+ g
工程名设置为project: 7 J6 x! U! ]- a
创建后的效果如下:% e, H% o! r$ {
默认的情况下这里是创建了两个工程,一个用于Debug,一个用于Release。这两个其实是用的同一个工程,最大的区别是优化等级有所不同。 ' y7 C' A& C7 K# M" M3 q
3 T; E5 A3 U/ c+ M) R 我们这里设置一下,将这两个都删掉,新创建一个Debug方式的,只是仅换了一个名字(主要目的是让大家看下操作方法)。打开菜单Project->EDIT Configration: 8 c) c' O' `/ v5 t3 q
0 s) s) B; q- W$ B( ~6 B* I0 T" U6 u 先新建后再删除其它两个,因为当前IAR使用的一个是无法删除的。) `; D8 t% | h( V# R " q4 M9 ?7 E' l0 a9 N8 I' R
/ S1 q4 X: z- M 点击确定后,再次点击确定: , v# `$ `; P9 h k5 z
6 g2 V% t; {% U( J$ ?0 O 可以看到左上角已经有三个了,这我们选择Flash,将其激活,也就是使用这个: 2 V) ]) ?+ V0 Q4 a, g
再次打开菜单Project->EDIT Configration就可以将Debug和Release删除掉了:7 B0 O2 |( [, t5 z" o: }2 h1 Y
现在左上角就只有一个Flash了:7 ]# h/ ~/ }, D 6 m+ |( h1 ?) H& q" J9 b8 J8 m
4 Y x: M A( |* G8 J+ Z3 V. j 6.4 第3步,设置工程分组名6 r9 v/ H9 G: o" E3 V, ]3 }" ` 默认新建的工程是下面这样的:5 R1 `( H+ m" u& |9 j T. A
在Workspace栏的空白地方鼠标右击选择Add->Add Group(如果有多个project同时在里面的话,要鼠标左击选中project - Flash,然后右击添加): * C7 N8 Y0 X3 a5 v
通过这种方式,我们依次创建如下7个分组: ' `/ y0 F6 ?* z
+ X: `/ p& U5 T4 G5 r 6.5 第4步,添加工程文件 下面我们为各个分组添加上具体的文件。鼠标左击选中BSP,然后右击选择Add->Add Files
然后在新建的工程文件夹里面查找需要添加的文件即可。
添加BSP分组需要的文件2 d8 Y0 p( m7 b: Y % Z j0 t4 j4 B: E! J! k l {
0 g# r6 l; R1 X! ]9 n bsp.c 位于路径\User\bsp,主要用于MPU、Cache、时钟和外设初始化。 , N$ ?& [* m6 ?5 v' Q' ^! w& W) v# j bsp.h位于路径\User\bsp,此文件是各种头文件的集中汇总贴,方便管理。; s. O" f) O. p* U- J6 }9 ]; V" t bsp_led.c位于路径\User\bsp\src,用于LED驱动。2 s* ?$ V# P8 d8 A4 _3 v1 J4 ^ bsp_key.c位于路径\User\bsp\src,用于按键驱动。5 C; s: l2 V. d) G bsp_timer.c位于路径\User\bsp\src,用于软件定时器组和微妙级单次延迟。; q, r; G! R( R' m9 U ; r$ K, u9 w7 p" y9 Y; _ bsp_fmc_io.c位于路径\User\bsp\src,用于IO扩展,这里LED要用到。 / r9 X& F% v% T9 X1 q" U! X/ m# D bsp_uart_fifo.c位于路径\User\bsp\src,用于8串口FIFO驱动。 stm32h7xx_it.c位于路径User\bsp,用于部分系统中断服务程序。 - `2 h6 t& V) B5 B: J. T 添加CMSIS分组需要的内容* V( r7 r; Y/ A' v1 L4 a, i ( f( E4 H! C7 Y8 U- }* R
3 ~, c6 }' `; x, }( \; A system_stm32h7xx.c位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates,主要用于复位RCC相关寄存器和中断向量表位置设置。 添加Doc分组需要的内容( i: z; k$ l! K# q
. w( Z: G8 U& U# f 这两个文件位于Doc文件夹,主要用于说明例程的功能和更新记录。5 u& g) N, K1 ]* P4 ^ 添加EWARMv8分组需要的内容 ; l: Q1 j+ r% n7 a; F
startup_stm32h743xx.s 位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates\iar,主要用于堆和栈空间设置,中断向量表也在这个文件。3 s4 M9 t- n# @& \8 U 添加HAL_Driver分组需要的内容 . j8 y# r1 g. S
stm32h7xx_hal_conf.h位于路径\User\bsp,主要用于HAL库的配置。 0 ?; s; a2 Y5 r2 L* r 其它文件路径:\Libraries\STM32H7xx_HAL_Driver\Src,用到什么外设添加什么驱动文件即可,有些外设驱动跟DMA也有关联,直接添加进来即可。 添加SEGGER/HardFault分组需要的内容
这两个文件位于路径:\User\segger\HardFaultHandlerMDK,主要用于硬件异常分析。+ g0 Y3 b: a4 T2 B, t8 p1 K 添加User分组需要的内容7 C& s; ?# _" h0 v. K d
main.c文件位于文件夹User,实现了一个简单的跑马灯效果。 ! h4 f5 \$ [3 ~% o: { 6.6 第5步,保存创建的Workspace# N" {1 K: P. B; h0 @: } 文件添加完毕后要保存Workspace,点击菜单File->Save Workspace As E$ z3 c5 p# `, z0 Z( X
6 ^: X& y5 l& L! n7 m* Z) e 弹出的对话框里面选择路径,设置文件名后,保存即可:0 \8 u7 E3 E. r6 {: h: G! B9 @ 6 _ c; b9 T5 ]( }
剩下就是工程的配置工作了。0 r" Z+ |- ]/ R/ h# Z 6.7 第6步,Options配置5 {* V% d* h) c; e) p IAR的配置基本都集中在Options对话框里面: 0 ?4 @$ }% a$ ]( ?/ x/ r) x: U
6.7.1 General Options选项 这部分主要用于通用设置。选择ST的STM32H743XI: 0 L; u" W. T9 W- n- P
Library Configration选择全功能库:
Library Options1里面的printf和scanf都选择支持全功能格式:8 W" p& y" ^( u$ ?9 o$ m( a 4 Q/ X2 S/ D( N3 S% a' g$ \2 T- f, a9 L
2 ^! ]6 _1 l1 g% l 6.7.2 C/C++ Compiler选项 这部分主要用于编译器设置,优化等级选择默认的低优先级:
Language 1选择C语言和C11规范(在第9章有介绍):9 e8 ]# k% z% _
) j& `3 T8 Q( Z, @% d* a8 Z1 Z& b6 z 然后就是最重要的头文件路径添加,IAR提供的添加方式都是相对路径:1 M( P# ?5 b6 K% T7 i2 [' d$ O1 o
8 O) }8 t/ J" y 注意,添加的时候要添加相对路径,使用绝对路径的话,工程换个位置就无法使用了:% T0 j2 T; Q4 h4 f/ ~2 S 3 _; s: k5 e2 O+ A
将下面路径都添加进去:' Y/ ~/ s l4 T1 B: o, t! ~
1 v( s' N: ?0 f# F/ `# o0 W+ r 同时在预定义宏选项里面添加如下宏定义:+ o" X2 L! y6 B 0 j+ `; F- ^; L' |7 ^( S0 E& ^) J USE_HAL_DRIVER 表示使用HAL库。 4 r: v9 k( N# h6 x* j4 Y. r) R STM32H743xx 表示使用H743系列。3 M$ _* ^/ }4 V4 b2 `
6.7.3 Build Actions选项
1 }# f$ R; e6 ^ 这个选项基本用不上,可以不用管,主要是用来指定编译之前和编译之后执行的用户程序。对于本教程配套的例子来说在这里添加了一个批处理功能,用来实现Objects文件夹里面的hex文件复制到路径Project\EWARMv8里面,方便查找。6 k8 k& e9 W8 x& u* t$ z' I1 V/ r
6.7.4 Linker选项 Linker选项主要是链接器的配置,其中最主要的是icf文件配置Flash和RAM区。在HAL库的软件包的路径:\Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\iar\linker里面提供了很多配置方式:
教程配套例子使用的是stm32h743xx_flash.icf,将这个文件复制到所创建工程的路径\Project\EWARMv8里面。然后在Linker选项里面将其添加进来:6 m) ~- U6 B8 D5 f3 r F0 \
# r2 `0 j3 G3 F3 y3 F 添加进来后是个绝对路径:
要修改为相对路径:0 V! C0 _8 j' J0 W3 S# P- ^$ K( O7 A
& l: J& \7 N9 s% P- d8 p8 ~ 添加进来后要设置下中断向量表首地址,堆和栈大小,点击上面截图左下角的Edit按键进行配置。 6 K& n7 X0 g/ h& m- T' p& K; ~/ p 中断向量表首地址设置为0x0800 0000:7 t3 |! m# j7 F3 ^: Y8 N
STM32H743XIH的Flash首地址是0x0800 0000,大小0x200000,即2MB。 % Z1 d2 M( W3 ~& o% a 默认的RAM空间选择DTCM,首地址0x2000 0000,大小0x20000,即128KB。
% q8 L6 M& ~$ x, o 堆和栈大小分别设置为0x1000和0x800:* U+ N! e5 E6 `2 ], o# v ) n g/ A3 |/ u9 n4 _
设置完毕后记得点击保存。2 I6 I# i# N$ b { ( B8 I7 M$ l" D: Z4 v 6.7.5 Debugger选项' Y- `3 f$ j$ E1 C Debugger选项主要用于调试下载,当前IAR支持如下调试工具: 7 G6 D5 @- {# E, ~7 @
& q3 u/ I4 X) B- J Q1 \2 I7 h 具体的调试设置在下一章有详细说明,本章主要是保证创建的工程能够正常编译。 6.8 第7步,最后一步验证是否创建成功7 r* e7 ~9 l8 ~/ @ 点击全编译:+ B' h4 T! U( Y% G' M; v4 a3 c x
编译结果:0错误,0警告,编译成功。 8 L5 ]" b( |# d5 t) e) @
1 R. D) p* R7 E! v; i* v 6.9 IAR的字体,多核并行编译,语法提示等设置! H/ V5 a9 y, x! ` 这里将IAR经常用到的设置做个说明。 ' w9 |" g0 Q/ Y7 W 6.9.1 Tab Size设置. u5 P+ F6 m$ S+ @7 Z$ }5 j 教程配套例子的Tab size要设置为4,否则代码显示不整齐。菜单Tools -> Options:
6 _. j5 U( i' b: M" G. K6 L* X; e 6.9.2 字体设置 菜单Tools -> Options,支持比例字体和等宽字体选择:
6.9.3 多核并行编译 电脑有几个核都选上,加快编译速度,我这里是四核:
6 n9 m& X0 O' e( _" X# B$ ? 6.10 总结9 |4 ]+ _" W X# A+ ~: \0 c 对于初学者来说,务必要实际动手操作一遍,以后移植其它程序代码大有裨益。 % l: U/ n& J& v O- ?& B" s6 N) \ |
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
【福利三:逢7发帖赢大礼】使用MPU6050模块、img_dsc、img_btn机制实现一些简单有趣的动画效果
【福利三:逢7发帖赢大礼】使用arc弧形拉条控件控制PWM舵机及使用SPI3接口操作NRF24L01模块进行无线通信
【福利三:逢7发帖赢大礼】调试nucleo-WBA65RI工程测试样板的一些心得
【福利三:逢7发帖赢大礼】lv_timer和BME680实现温度、湿度、气压数据读取
【福利三:逢7发帖赢大礼】成功利用STM32H743VI片内SRAM12和DTCM空间(完全胜利)
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
【福利三:逢7发帖赢大礼】使用惠勤致远STM32H743VI开发板+ST7796并口彩屏移植LVGL9.5并分享一些额外内容
【 逢7发帖赢大礼】7、TouchGFX中实现云彩流动效果
微信公众号
手机版