STMCU小助手
发布时间:2021-12-25 10:57
|
6.1 初学者重要提示 IAR的工程创建过程还是比较重要的,务必实际上手操作一遍。( W1 |$ z1 [# }( }+ w }0 w! P , ~# `* @( D0 N2 @, j 6.2 第1步,创建工程文件夹 创建一个文件夹,里面包含如下文件(直接将跑马灯例子的Project文件里面内容全部删除,然后整个工程复制进来即可)。, Z$ ^. G+ ~4 q 9 x7 F! F% p6 b; e0 j7 x: G& j
% D) l. }7 r* i) A+ J Doc文件夹0 A! ]; u+ N8 ? J2 A) c 用于记录例程的修改记录和例子简介。 Libraries文件夹 . h& U: C- H3 n0 M6 ~7 Z 在第一章详细介绍从官网的下载方法。0 E/ ^3 M+ M1 {7 T3 b+ F) H) s Project文件夹 ; E9 ]- a& d0 ^0 R 这个是本章的重点,在这个文件夹里面再建立两个文件夹,EWARMv8文件夹用于存放IAR工程,MDK-ARM(uV5)文件夹里面用于存放MDK工程,方便以后创建MDK的工程。 / C9 L- k! l' k, d. z* ~4 K User文件夹 % F0 `9 U) n! v: u 这个是要用户提供的,开发板已经都提供好,bsp文件夹里面是开发板各个外设的驱动,segger文件夹是硬件异常分析代码。, m3 J1 Y1 y5 D- j 删除目标文件.bat# `% |/ T, _+ U+ X4 H9 F+ n+ S 5 a5 g% ~) J( R# b0 E p$ C 这个是批处理文件,用于删除MDK和IAR工程编译后生成的obj和list临时文件。9 b3 u- w8 v1 V1 D 6.3 第2步,创建新工程6 `1 W5 U- v/ q: H0 `- d 打开IAR,选择Project ->Create New Project # [: F' B# ]/ f9 |- g/ e- G$ @9 H! W
工程名设置为project:1 o; t) o: B. O9 ? 6 D1 Z. T4 ^2 z! w4 {+ n. {3 E
- {7 n2 w; v$ k# F: q 创建后的效果如下: , r% P4 q O% w9 r8 d
默认的情况下这里是创建了两个工程,一个用于Debug,一个用于Release。这两个其实是用的同一个工程,最大的区别是优化等级有所不同。 - G4 `( ^3 }2 E; y! h
0 e+ V( R+ m) I5 J2 E. \ 我们这里设置一下,将这两个都删掉,新创建一个Debug方式的,只是仅换了一个名字(主要目的是让大家看下操作方法)。打开菜单Project->EDIT Configration:
先新建后再删除其它两个,因为当前IAR使用的一个是无法删除的。 % j z' N- }* e; n0 q; t7 G
点击确定后,再次点击确定:8 r0 n7 G t" D" Y1 P ' ?% z3 _0 g* [- C
可以看到左上角已经有三个了,这我们选择Flash,将其激活,也就是使用这个:
$ Y) \3 C; @; u7 x: s9 O; P 再次打开菜单Project->EDIT Configration就可以将Debug和Release删除掉了:+ e9 |! [ j9 G( J4 r- u5 N
: `2 R5 d) b& @% S 现在左上角就只有一个Flash了:: a$ D+ w7 C$ Y7 k
6.4 第3步,设置工程分组名 默认新建的工程是下面这样的:5 y) `& e) G+ R3 W + P3 Q4 G5 D: D# r% @2 d, Y4 S
在Workspace栏的空白地方鼠标右击选择Add->Add Group(如果有多个project同时在里面的话,要鼠标左击选中project - Flash,然后右击添加): 9 |. k- g/ c. A4 R0 Q% K
( [( o& S4 D; @; O 通过这种方式,我们依次创建如下7个分组:$ T" N& F* y$ a( o+ k
4 H- Z1 X/ z0 ^! O. s- n# H6 G9 i+ A 6.5 第4步,添加工程文件 下面我们为各个分组添加上具体的文件。鼠标左击选中BSP,然后右击选择Add->Add Files$ h: p, v/ F/ H, B
+ h: u1 u/ g3 b7 Y) H3 K* v# [$ A 然后在新建的工程文件夹里面查找需要添加的文件即可。 ( C1 D6 d$ w# J* @" R" ~
添加BSP分组需要的文件) e- w4 o4 R* `; T" Y. L
2 M, ]+ @! b; [" N+ S) f bsp.c 位于路径\User\bsp,主要用于MPU、Cache、时钟和外设初始化。 bsp.h位于路径\User\bsp,此文件是各种头文件的集中汇总贴,方便管理。: F9 ^- P2 E- p. j& D5 i bsp_led.c位于路径\User\bsp\src,用于LED驱动。9 B5 x% \' c* D- \% X9 r 9 d' A1 Y K- S. U( }) v0 P. z bsp_key.c位于路径\User\bsp\src,用于按键驱动。 * I9 V1 c2 m- ? `% Y bsp_timer.c位于路径\User\bsp\src,用于软件定时器组和微妙级单次延迟。4 B3 d% {* D! j# _7 l: m . p4 v. x8 `6 ] bsp_fmc_io.c位于路径\User\bsp\src,用于IO扩展,这里LED要用到。7 J6 o. e7 o- N3 m9 [' {6 j$ S . b( j, m8 s5 q, V& ^& y' ^ bsp_uart_fifo.c位于路径\User\bsp\src,用于8串口FIFO驱动。4 N( Z7 n' K& }* k, I 9 t! x( C( e. w6 v! I' d7 C/ t. H stm32h7xx_it.c位于路径User\bsp,用于部分系统中断服务程序。$ P2 f4 }! s- f5 J / o5 H; l6 W p8 |& j' t$ |/ k 添加CMSIS分组需要的内容 ( a, c h3 I4 _
system_stm32h7xx.c位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates,主要用于复位RCC相关寄存器和中断向量表位置设置。 添加Doc分组需要的内容
5 B6 x4 @) F+ |, Y 这两个文件位于Doc文件夹,主要用于说明例程的功能和更新记录。/ |( y, s/ y! T# x6 c! [ % e1 f: t2 E- y7 u. a 添加EWARMv8分组需要的内容 P& X- W# ^& P$ [5 ?
0 r5 b2 p1 I8 {% b startup_stm32h743xx.s 位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates\iar,主要用于堆和栈空间设置,中断向量表也在这个文件。 D; l6 n) w2 l7 i3 } 添加HAL_Driver分组需要的内容 8 W( J, M' P* ~6 l( @
stm32h7xx_hal_conf.h位于路径\User\bsp,主要用于HAL库的配置。 其它文件路径:\Libraries\STM32H7xx_HAL_Driver\Src,用到什么外设添加什么驱动文件即可,有些外设驱动跟DMA也有关联,直接添加进来即可。 添加SEGGER/HardFault分组需要的内容% K" W; ~3 Y2 {# J
& V) e- Y. L0 E! D- N 这两个文件位于路径:\User\segger\HardFaultHandlerMDK,主要用于硬件异常分析。 添加User分组需要的内容 % ^' \) d2 P& ]1 y2 B. h% g
D' I* {6 m0 G! V6 G main.c文件位于文件夹User,实现了一个简单的跑马灯效果。 6.6 第5步,保存创建的Workspace( s9 U3 [) L, O9 ~1 E0 N) _ 文件添加完毕后要保存Workspace,点击菜单File->Save Workspace As8 o) m) L4 y: h. P) O; J' d! n
3 u, x. n: o+ p5 k 弹出的对话框里面选择路径,设置文件名后,保存即可:. c( ^$ ~" \* ^1 Q' P% C9 U 8 t# H0 _5 \* z& ^ [: O
剩下就是工程的配置工作了。/ ?' q# [% r q" `- I. i/ Q 6.7 第6步,Options配置 IAR的配置基本都集中在Options对话框里面:
E: a& O' v8 U 6.7.1 General Options选项# I- ^& n( X( e" x$ R9 C 这部分主要用于通用设置。选择ST的STM32H743XI:
Library Configration选择全功能库:0 O$ q: a. Y C/ \% V2 Z: _ 9 ]; J# h8 x' R# ^2 ?
0 H/ V! v S0 B* i# C Library Options1里面的printf和scanf都选择支持全功能格式:! U) x) B5 O& b/ w6 W9 J( G
6.7.2 C/C++ Compiler选项5 E7 `9 q2 o% ~" z' a1 B 这部分主要用于编译器设置,优化等级选择默认的低优先级:7 |8 J7 [) L. ~8 Y! U
Language 1选择C语言和C11规范(在第9章有介绍): , c$ _4 I3 s1 U/ P% [
然后就是最重要的头文件路径添加,IAR提供的添加方式都是相对路径:/ U; u6 J+ p0 P" R3 D
注意,添加的时候要添加相对路径,使用绝对路径的话,工程换个位置就无法使用了: & T7 e' Q9 R- l2 x L/ o+ ^
# D+ h, c0 g5 v& r 将下面路径都添加进去:3 m8 x, I3 l/ q1 A: L
同时在预定义宏选项里面添加如下宏定义:% X/ W/ o% y7 y1 P2 `+ v USE_HAL_DRIVER 表示使用HAL库。 STM32H743xx 表示使用H743系列。 ' b: Y7 e3 w2 `& z J! Y# I2 Z
, y3 o' y+ U8 k8 q5 p 6.7.3 Build Actions选项 $ P) q4 n7 t% n
这个选项基本用不上,可以不用管,主要是用来指定编译之前和编译之后执行的用户程序。对于本教程配套的例子来说在这里添加了一个批处理功能,用来实现Objects文件夹里面的hex文件复制到路径Project\EWARMv8里面,方便查找。6 b, ~6 c0 [2 y" h - D( z9 ?: R5 w9 H' q
+ ^( m) v0 ?' u' J% ^4 ^ 6.7.4 Linker选项 Linker选项主要是链接器的配置,其中最主要的是icf文件配置Flash和RAM区。在HAL库的软件包的路径:\Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\iar\linker里面提供了很多配置方式:1 w0 L4 `6 G2 P, q T6 T
9 ~0 ~$ P B. r9 Y 教程配套例子使用的是stm32h743xx_flash.icf,将这个文件复制到所创建工程的路径\Project\EWARMv8里面。然后在Linker选项里面将其添加进来:0 G8 v: P2 f* N; H v; E& f/ S9 D
添加进来后是个绝对路径: + g; t _/ S7 w, h
4 P" B S' e6 G f! p% q 要修改为相对路径:
添加进来后要设置下中断向量表首地址,堆和栈大小,点击上面截图左下角的Edit按键进行配置。7 g T) ]! l( Y 中断向量表首地址设置为0x0800 0000: ; j7 s; P4 e4 D, f$ Q& Q
) r. S4 k5 X9 I STM32H743XIH的Flash首地址是0x0800 0000,大小0x200000,即2MB。 ) j* ]! _* Z- F9 A 默认的RAM空间选择DTCM,首地址0x2000 0000,大小0x20000,即128KB。+ k4 D. ~3 G4 q* _6 ?
堆和栈大小分别设置为0x1000和0x800: 4 g5 g' h& j8 d9 H) h; W
设置完毕后记得点击保存。 ! k' M! U8 H% U9 n 6.7.5 Debugger选项 Debugger选项主要用于调试下载,当前IAR支持如下调试工具:
具体的调试设置在下一章有详细说明,本章主要是保证创建的工程能够正常编译。* V8 l" q4 p) o8 g$ m / w! z Y2 n; P: i$ H" C& ?+ Y 6.8 第7步,最后一步验证是否创建成功 点击全编译:
# N- Z& Q' s# u9 z# k5 j 编译结果:0错误,0警告,编译成功。) l- n! c3 c/ N/ j+ r 9 v! T$ M! j2 S, N, F
- l; m; N h9 L4 T; i6 { i 6.9 IAR的字体,多核并行编译,语法提示等设置" t4 {9 F3 b3 o/ ^$ R: I- i2 @ 这里将IAR经常用到的设置做个说明。) Z$ ], {; h, _+ K1 A; y6 C 9 S: {* F" w `1 |2 J6 p 6.9.1 Tab Size设置 教程配套例子的Tab size要设置为4,否则代码显示不整齐。菜单Tools -> Options:
9 |% N- d& I. X; U% ^3 S 6.9.2 字体设置" T9 |; x7 l! w6 X5 a 菜单Tools -> Options,支持比例字体和等宽字体选择:' u) J' f4 |& ~* c& l' L: D# g; z
7 K7 B7 D% N5 k2 l* N 6.9.3 多核并行编译/ N4 ]' a3 j; O2 E! a' } 电脑有几个核都选上,加快编译速度,我这里是四核:# a7 t# e# V8 P6 P
6.10 总结+ _8 U* o" L3 N. N5 k# [# \ 对于初学者来说,务必要实际动手操作一遍,以后移植其它程序代码大有裨益。0 _; L9 H* V/ y. A $ N, C; O, C$ X- ]1 n |
【 逢7发帖赢大礼】1、利用CubeMX生成正点原子H7R7开发板的STM32CubeIDE工程
【STM32H735G-DK测评】ADC3+TIMER1+DMA 采样模拟信号
【STM32H735DK测评】Ethernet+lwip DHCP获取IP地址
STM32H743基于CubeMx5.0配置手册
【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实现温度、湿度、气压数据读取
微信公众号
手机版