STMCU小助手
发布时间:2021-12-25 10:57
|
6.1 初学者重要提示 IAR的工程创建过程还是比较重要的,务必实际上手操作一遍。* t% k, K, [8 D& G* A% }9 N7 D 6.2 第1步,创建工程文件夹* P7 U! n2 k4 D+ ^ 创建一个文件夹,里面包含如下文件(直接将跑马灯例子的Project文件里面内容全部删除,然后整个工程复制进来即可)。
Doc文件夹 5 ]: u% y5 A2 Y" Z% K4 p7 r 用于记录例程的修改记录和例子简介。 3 e& i* k/ j9 s) q) B Libraries文件夹 ; \: M6 \) U$ t: J Z 在第一章详细介绍从官网的下载方法。 3 u. z0 B6 z/ R8 e2 _0 p Project文件夹. a# q+ Q; J8 ^9 H 0 T0 o! ] j1 k 这个是本章的重点,在这个文件夹里面再建立两个文件夹,EWARMv8文件夹用于存放IAR工程,MDK-ARM(uV5)文件夹里面用于存放MDK工程,方便以后创建MDK的工程。 # P! F- q2 w- d User文件夹* \( \( D9 O& ]6 e: I 这个是要用户提供的,开发板已经都提供好,bsp文件夹里面是开发板各个外设的驱动,segger文件夹是硬件异常分析代码。8 g" D" T2 M% L* B1 p 删除目标文件.bat . U& b7 E [* C7 Z) ?1 ^ 这个是批处理文件,用于删除MDK和IAR工程编译后生成的obj和list临时文件。 0 S* @$ B5 M: y4 J8 c2 e2 P 6.3 第2步,创建新工程 打开IAR,选择Project ->Create New Project ; I6 P* ?- L" X8 D# J# c, u
3 ?8 U2 ]; y/ u* E0 p
工程名设置为project:
创建后的效果如下:. |% r: |* |$ |7 f ! d* {( B$ P: a) r
默认的情况下这里是创建了两个工程,一个用于Debug,一个用于Release。这两个其实是用的同一个工程,最大的区别是优化等级有所不同。 9 I* Q3 V$ J9 E
我们这里设置一下,将这两个都删掉,新创建一个Debug方式的,只是仅换了一个名字(主要目的是让大家看下操作方法)。打开菜单Project->EDIT Configration:$ n# K7 c- z( S- z 0 e: |8 p+ P- B/ F2 [
先新建后再删除其它两个,因为当前IAR使用的一个是无法删除的。' m/ L" T: y) P% \) S2 [/ f7 c$ {8 A . X5 E, l9 l; t4 N/ g7 ]$ Y6 e
点击确定后,再次点击确定:( K- q9 N/ u* E9 c. g5 e( b . Y. O4 w5 i F0 Z$ b" R0 q4 ]( l
可以看到左上角已经有三个了,这我们选择Flash,将其激活,也就是使用这个: ! a( N7 `* N2 G1 b
' H" G; g/ f+ Z. Q, `6 \4 m/ ?' p$ } 再次打开菜单Project->EDIT Configration就可以将Debug和Release删除掉了:; X0 ?. B1 l* X% m7 ?& E/ o. Y4 \$ d 1 U' `( I3 o9 f. }9 _+ e, P) U
' V ^4 m1 t, \) V$ u( @9 C& E 现在左上角就只有一个Flash了:' [2 q+ |' ~3 h 2 b0 ]- f; A, g0 X! h- f S. T
6.4 第3步,设置工程分组名 默认新建的工程是下面这样的:
在Workspace栏的空白地方鼠标右击选择Add->Add Group(如果有多个project同时在里面的话,要鼠标左击选中project - Flash,然后右击添加):
通过这种方式,我们依次创建如下7个分组:
6.5 第4步,添加工程文件, ^4 b" a l7 C( S, x7 l 下面我们为各个分组添加上具体的文件。鼠标左击选中BSP,然后右击选择Add->Add Files! X7 z" c, x1 [) z& O2 A
" [! y! k$ V, E; p- ~; T 然后在新建的工程文件夹里面查找需要添加的文件即可。' h3 O! s. U. s% U! O& B
3 \% _( ] {9 v& z9 E 添加BSP分组需要的文件% p/ A1 I& v) o5 U! e# b! Q ; ^5 _5 C9 j1 J4 H
bsp.c 位于路径\User\bsp,主要用于MPU、Cache、时钟和外设初始化。" _* O ~% _9 L% D 8 L: ?" c: l! [! M2 d bsp.h位于路径\User\bsp,此文件是各种头文件的集中汇总贴,方便管理。 bsp_led.c位于路径\User\bsp\src,用于LED驱动。" g% `* z# Q) Y bsp_key.c位于路径\User\bsp\src,用于按键驱动。 : b: t, q; g$ ~: G bsp_timer.c位于路径\User\bsp\src,用于软件定时器组和微妙级单次延迟。 ' ^9 U) L5 P3 ~+ J# c2 p7 r2 }' u b% J bsp_fmc_io.c位于路径\User\bsp\src,用于IO扩展,这里LED要用到。4 q) v# S$ e9 K . P% C+ ~. p: c" I! R* X bsp_uart_fifo.c位于路径\User\bsp\src,用于8串口FIFO驱动。 $ b( w: F) G5 B0 H" V$ a7 Z stm32h7xx_it.c位于路径User\bsp,用于部分系统中断服务程序。" U8 q0 S2 d; U4 t; `, L# _ c 添加CMSIS分组需要的内容: d( I& ^! v' d7 z( g 7 I; S6 }) i, C$ N: }% y# l9 A
system_stm32h7xx.c位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates,主要用于复位RCC相关寄存器和中断向量表位置设置。* Y6 t9 d; {; Z; ?/ \ / L! D: p4 x& U2 ^# }& R! L8 ] 添加Doc分组需要的内容 [, A* P9 | E
: B, j, Q, U9 P8 g 这两个文件位于Doc文件夹,主要用于说明例程的功能和更新记录。6 A. A( R2 K$ _/ Z! @: w+ y% y 添加EWARMv8分组需要的内容! B" K8 S9 z6 E 6 c' n1 F. J$ ?5 }( ?
startup_stm32h743xx.s 位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates\iar,主要用于堆和栈空间设置,中断向量表也在这个文件。 添加HAL_Driver分组需要的内容
stm32h7xx_hal_conf.h位于路径\User\bsp,主要用于HAL库的配置。+ b$ s5 s3 H! ^2 @ 2 M4 S' e2 B0 w3 N1 Y 其它文件路径:\Libraries\STM32H7xx_HAL_Driver\Src,用到什么外设添加什么驱动文件即可,有些外设驱动跟DMA也有关联,直接添加进来即可。# W( R9 Z* y% g$ T3 ]5 g : L) _9 n+ [: N$ K 添加SEGGER/HardFault分组需要的内容! @0 `4 T1 x: P: ?1 \4 J; R 6 L- v5 g0 Q- w6 H
这两个文件位于路径:\User\segger\HardFaultHandlerMDK,主要用于硬件异常分析。8 x' j) S! Z& o" B 6 P5 X! l J* U 添加User分组需要的内容
$ u7 }% `3 f$ G2 i' E7 b& `& [3 T3 T8 _" V main.c文件位于文件夹User,实现了一个简单的跑马灯效果。 6.6 第5步,保存创建的Workspace 文件添加完毕后要保存Workspace,点击菜单File->Save Workspace As
弹出的对话框里面选择路径,设置文件名后,保存即可:
+ v& d! [$ n; d$ i 剩下就是工程的配置工作了。( c S- u; [; d8 N3 f% H4 ~ 6 a- o$ B+ {0 c& d 6.7 第6步,Options配置. B; u0 I! d1 ~9 l# o IAR的配置基本都集中在Options对话框里面: " o- Y2 p; b6 m
6.7.1 General Options选项6 N9 e7 I; R4 [* b$ P 这部分主要用于通用设置。选择ST的STM32H743XI:5 ?: ]1 L8 ?9 v" b
8 r+ `- x6 T9 R. I Library Configration选择全功能库:
8 \) x" T! n0 u* r+ b) t$ @ Library Options1里面的printf和scanf都选择支持全功能格式:
6.7.2 C/C++ Compiler选项 这部分主要用于编译器设置,优化等级选择默认的低优先级: 8 Q4 D% q+ b) _( G! e B4 `* I
Language 1选择C语言和C11规范(在第9章有介绍): - n0 I R# s" ^' ]
5 y4 S1 N6 C5 Y! r8 x 然后就是最重要的头文件路径添加,IAR提供的添加方式都是相对路径:- n6 D( v: ?) U1 z: _$ ^& [
% f* b7 e, d s; Z1 h$ ] 注意,添加的时候要添加相对路径,使用绝对路径的话,工程换个位置就无法使用了: - E* J3 E3 O- o1 ]3 p0 Z& C$ T% j' N
' f. I: Q% B7 h0 k, P 将下面路径都添加进去: 1 }: t9 H% s( {* o
同时在预定义宏选项里面添加如下宏定义:; P7 _8 M7 i( w9 ` U$ N USE_HAL_DRIVER 表示使用HAL库。 / K4 m( k$ |% G/ D; k5 [, l! Q/ W STM32H743xx 表示使用H743系列。& K+ Q6 \" H @ |) i8 b+ } Q 8 r8 G$ [% @+ S8 {* E& {
6.7.3 Build Actions选项
这个选项基本用不上,可以不用管,主要是用来指定编译之前和编译之后执行的用户程序。对于本教程配套的例子来说在这里添加了一个批处理功能,用来实现Objects文件夹里面的hex文件复制到路径Project\EWARMv8里面,方便查找。
6.7.4 Linker选项 Linker选项主要是链接器的配置,其中最主要的是icf文件配置Flash和RAM区。在HAL库的软件包的路径:\Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\iar\linker里面提供了很多配置方式: & y1 {1 w$ J6 E( G+ q P% H& ?
( F, [: P& D# c Q, e/ k 教程配套例子使用的是stm32h743xx_flash.icf,将这个文件复制到所创建工程的路径\Project\EWARMv8里面。然后在Linker选项里面将其添加进来: 8 A- N0 y8 o9 x/ e8 e7 ~6 `
5 {; V1 k. N& U- s) C 添加进来后是个绝对路径:
9 D1 p- z$ i% T: c( P5 e- w 要修改为相对路径:9 k3 ]. K. S6 t7 ^" e) S t A5 o
添加进来后要设置下中断向量表首地址,堆和栈大小,点击上面截图左下角的Edit按键进行配置。5 I+ B& {: N2 ] + ]9 E5 b1 J7 s2 X 中断向量表首地址设置为0x0800 0000:
0 S: Y! C( w9 H( F" i a STM32H743XIH的Flash首地址是0x0800 0000,大小0x200000,即2MB。 默认的RAM空间选择DTCM,首地址0x2000 0000,大小0x20000,即128KB。 7 l- p1 Q/ C+ w+ u W( }2 z
3 L# p* ]# u7 r, ]* n; l) s& r 堆和栈大小分别设置为0x1000和0x800:5 q2 M! p* p7 u! N5 e) A 2 D* q: v4 T3 f8 X; o8 W( v, g
设置完毕后记得点击保存。' u8 E- e# j0 N& K 6.7.5 Debugger选项" M1 j% Z" `1 q2 `4 P( f Debugger选项主要用于调试下载,当前IAR支持如下调试工具:" W% d& @* F% H- l
$ y- l- q6 r; u8 O' n 具体的调试设置在下一章有详细说明,本章主要是保证创建的工程能够正常编译。 1 w, q# a% A8 E9 j- d: V 6.8 第7步,最后一步验证是否创建成功 点击全编译:6 E7 ^( Y9 L# }, w) f: V( n ' z4 t. o6 e! S8 r1 @
编译结果:0错误,0警告,编译成功。 / c1 f* j+ @' _; Z" H
6.9 IAR的字体,多核并行编译,语法提示等设置 这里将IAR经常用到的设置做个说明。! B8 i; B/ F2 { & N2 R! ?2 M% }6 d" s* n6 L; L 6.9.1 Tab Size设置 教程配套例子的Tab size要设置为4,否则代码显示不整齐。菜单Tools -> Options: : F5 m; a* }/ V3 Q: y( N! O4 t/ K
6.9.2 字体设置: p! e+ w+ Z' k4 B 菜单Tools -> Options,支持比例字体和等宽字体选择:
6.9.3 多核并行编译 电脑有几个核都选上,加快编译速度,我这里是四核:2 N2 L* \' k5 \- b + O: q+ S$ \7 E0 S& k7 ]6 k* Z
4 ^* i, n+ a9 J8 l+ T) Y% c 6.10 总结7 s. x+ \# N+ I. D- h 对于初学者来说,务必要实际动手操作一遍,以后移植其它程序代码大有裨益。 k8 w) _- c9 O' J9 C4 N- r: ] 8 B1 s* Q9 A; z7 m( c |
【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中实现云彩流动效果
微信公众号
手机版