STMCU小助手
发布时间:2021-12-25 10:57
|
6.1 初学者重要提示' F- P) H, [8 m2 Y4 f% t; r IAR的工程创建过程还是比较重要的,务必实际上手操作一遍。 6.2 第1步,创建工程文件夹 创建一个文件夹,里面包含如下文件(直接将跑马灯例子的Project文件里面内容全部删除,然后整个工程复制进来即可)。* Q( r& B, W4 M4 Q, Y
% ]( p/ a- E- k, r( L G2 V Doc文件夹/ K" n; d5 Z+ s 2 }+ L' g7 Z$ B" t+ T; l3 }, Y 用于记录例程的修改记录和例子简介。( [7 a# I9 V3 E7 I* z: U Libraries文件夹 在第一章详细介绍从官网的下载方法。 Project文件夹 这个是本章的重点,在这个文件夹里面再建立两个文件夹,EWARMv8文件夹用于存放IAR工程,MDK-ARM(uV5)文件夹里面用于存放MDK工程,方便以后创建MDK的工程。 : f0 h0 {+ B$ A User文件夹! i' w& C+ `* ?) z0 a/ w$ Q& A 这个是要用户提供的,开发板已经都提供好,bsp文件夹里面是开发板各个外设的驱动,segger文件夹是硬件异常分析代码。 - t; x d% w* v! f! o 删除目标文件.bat : |5 p! W: O o' O 这个是批处理文件,用于删除MDK和IAR工程编译后生成的obj和list临时文件。& k) u1 j. ^. C , K) Z: B( n) o! ]! B/ O( i, l# z7 J 6.3 第2步,创建新工程6 ^- V9 y0 o$ }1 l; a 打开IAR,选择Project ->Create New Project # q! X: u6 L$ R
& `3 G5 S* l+ Y2 M1 I6 w1 X5 s! x5 S 工程名设置为project:8 i) |6 C3 I) O B( a/ ^ 9 _$ r( O' h% S
1 l+ q% e( i, T G2 | 创建后的效果如下:1 i2 T1 z: b% C2 l; H + [& G* q+ Z, P) j
默认的情况下这里是创建了两个工程,一个用于Debug,一个用于Release。这两个其实是用的同一个工程,最大的区别是优化等级有所不同。3 h8 c" h3 r2 t
9 {6 s: x$ r+ ~ j 我们这里设置一下,将这两个都删掉,新创建一个Debug方式的,只是仅换了一个名字(主要目的是让大家看下操作方法)。打开菜单Project->EDIT Configration:7 o K6 `8 I8 t& j1 b; K3 m8 B' J . b5 h/ T. L( ^- o
先新建后再删除其它两个,因为当前IAR使用的一个是无法删除的。
" z2 J+ N7 o: m 点击确定后,再次点击确定:
, ? `5 }8 Q/ j+ l; A! V: O 可以看到左上角已经有三个了,这我们选择Flash,将其激活,也就是使用这个:
6 D( F, e% v9 P0 u- u. t 再次打开菜单Project->EDIT Configration就可以将Debug和Release删除掉了:
现在左上角就只有一个Flash了:) \ _4 x Z- W s) g
6.4 第3步,设置工程分组名 默认新建的工程是下面这样的:$ X( g) l* T$ [ B * v+ }8 T- k- T( O+ p( P, B" ]
在Workspace栏的空白地方鼠标右击选择Add->Add Group(如果有多个project同时在里面的话,要鼠标左击选中project - Flash,然后右击添加):" j7 h }/ \- ` K" `- c, t
! Y8 D. A* A. Z* [/ H; G 通过这种方式,我们依次创建如下7个分组: - W1 Q% A" |9 Q s- X/ x
6.5 第4步,添加工程文件 下面我们为各个分组添加上具体的文件。鼠标左击选中BSP,然后右击选择Add->Add Files
然后在新建的工程文件夹里面查找需要添加的文件即可。+ t) c0 Y& I" Y: L% c " E2 Z5 K2 A5 [. P# @
, J: x+ T' O6 J" j, f 添加BSP分组需要的文件1 L7 _2 l+ V, {7 B, g3 d
2 L, ~: C# S: N( F! S7 D4 l: F bsp.c 位于路径\User\bsp,主要用于MPU、Cache、时钟和外设初始化。3 l8 `% |) w! G8 R7 Q0 n7 Y. H m 0 p9 u$ y8 r3 v, @8 X2 k. i O bsp.h位于路径\User\bsp,此文件是各种头文件的集中汇总贴,方便管理。3 T, N+ b' ?& |% G( t $ \1 k. q% f/ S/ Y: M bsp_led.c位于路径\User\bsp\src,用于LED驱动。* U* A( I# I1 y& D4 u ^: ?& ~ 7 N' x5 j4 Y# p. B bsp_key.c位于路径\User\bsp\src,用于按键驱动。 4 z6 |: }" n: W4 E4 G7 u/ U1 h bsp_timer.c位于路径\User\bsp\src,用于软件定时器组和微妙级单次延迟。9 U/ z s. |1 M# Y% t ' ~& ^$ i& {" W- m: T bsp_fmc_io.c位于路径\User\bsp\src,用于IO扩展,这里LED要用到。 9 M* D* \4 r% d/ X( r bsp_uart_fifo.c位于路径\User\bsp\src,用于8串口FIFO驱动。 0 z4 j. v" K9 `& L& ~ stm32h7xx_it.c位于路径User\bsp,用于部分系统中断服务程序。 添加CMSIS分组需要的内容 ~0 n8 Y' q1 y0 i
0 \8 `8 y7 u3 Y+ v7 o7 E2 o system_stm32h7xx.c位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates,主要用于复位RCC相关寄存器和中断向量表位置设置。0 t, [/ g% a& k 添加Doc分组需要的内容; n/ S8 r+ @" C* b% ]) ?3 J! \$ g% A ' |/ @! T$ u' X: @! d/ F6 T
这两个文件位于Doc文件夹,主要用于说明例程的功能和更新记录。) E. T& }" i8 S 8 R# q' L1 e* V, r 添加EWARMv8分组需要的内容4 X7 O4 q% q7 H. J % a! N3 Z3 K O' `6 T+ W
startup_stm32h743xx.s 位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates\iar,主要用于堆和栈空间设置,中断向量表也在这个文件。 添加HAL_Driver分组需要的内容1 z3 L) i9 T8 Z" q8 B0 Z* s& @ 9 }0 n4 U4 j& k7 z' X: ~' N g
stm32h7xx_hal_conf.h位于路径\User\bsp,主要用于HAL库的配置。 其它文件路径:\Libraries\STM32H7xx_HAL_Driver\Src,用到什么外设添加什么驱动文件即可,有些外设驱动跟DMA也有关联,直接添加进来即可。 0 A/ y. b g# K- J 添加SEGGER/HardFault分组需要的内容5 S- @/ M! J) U6 t
. V+ w; g) d( S. D 这两个文件位于路径:\User\segger\HardFaultHandlerMDK,主要用于硬件异常分析。2 S# E' \3 k+ F9 n- u/ u5 v 1 H7 ?: C3 I" K$ `9 B: t$ @ 添加User分组需要的内容9 q6 q n0 _$ B# D9 p A 5 _8 K1 l5 C+ R1 s' r
) e2 q X' L- n2 [ main.c文件位于文件夹User,实现了一个简单的跑马灯效果。& b9 `+ y% f& ~/ o3 i3 ]' b! f* P+ e 6.6 第5步,保存创建的Workspace" ^3 p0 g5 \2 c: U 文件添加完毕后要保存Workspace,点击菜单File->Save Workspace As
5 F+ n6 n; ^* B0 U# g 弹出的对话框里面选择路径,设置文件名后,保存即可:
9 Q1 B) a$ c# k1 { 剩下就是工程的配置工作了。- }7 V: i: b5 h* d0 k" `$ ? ( t* L' n( J' p/ F% m9 b: k' W% N ? 6.7 第6步,Options配置# |% p. W/ z1 b: G6 f9 w9 M IAR的配置基本都集中在Options对话框里面:3 w+ o7 d# W! ~2 x* w! H
8 l8 o) I& X: u% E: g+ V) K g: Z 6.7.1 General Options选项 这部分主要用于通用设置。选择ST的STM32H743XI: 0 n% S8 U1 s7 {8 p6 A
# d% Q& W, R0 g+ e Library Configration选择全功能库:) y( }3 g. s ^ `1 U: r+ h
! P- ?6 }! N2 ~# b) A Library Options1里面的printf和scanf都选择支持全功能格式:) C2 {8 k& w' k
6 Z: M8 D9 J3 q5 z4 H 6.7.2 C/C++ Compiler选项- |8 O( K1 }6 t 这部分主要用于编译器设置,优化等级选择默认的低优先级:
, A; C) |+ O% l9 I# M2 { Language 1选择C语言和C11规范(在第9章有介绍):. e1 o- S' E! Q1 J) P) q9 L% l$ e6 w 0 S5 O$ }1 k1 ]4 V4 G
: I6 b- ]2 X. D0 ?! C6 X 然后就是最重要的头文件路径添加,IAR提供的添加方式都是相对路径:/ l1 T% U6 Y! H& e9 r/ H! K1 Z & m* j0 B0 ~4 i8 `+ |# u/ B
注意,添加的时候要添加相对路径,使用绝对路径的话,工程换个位置就无法使用了: 4 L1 G( T5 q2 a0 x: H
将下面路径都添加进去: 9 i- W1 D6 ^ t4 T
5 _8 _- p; f" b 同时在预定义宏选项里面添加如下宏定义:( t$ k% y- k6 z8 u1 M [ USE_HAL_DRIVER 表示使用HAL库。 ) z9 z' T: ?4 P" M: ] STM32H743xx 表示使用H743系列。$ s3 X' h e* Q1 h
6.7.3 Build Actions选项! }# @* b* r% y5 A/ j7 a9 \
1 }: E4 Y1 k2 O. F9 @/ X2 w 这个选项基本用不上,可以不用管,主要是用来指定编译之前和编译之后执行的用户程序。对于本教程配套的例子来说在这里添加了一个批处理功能,用来实现Objects文件夹里面的hex文件复制到路径Project\EWARMv8里面,方便查找。
! ]2 R# H2 b1 R/ `1 {% B5 `8 N, | 6.7.4 Linker选项 Linker选项主要是链接器的配置,其中最主要的是icf文件配置Flash和RAM区。在HAL库的软件包的路径:\Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\iar\linker里面提供了很多配置方式:$ I6 b) p: R$ e. j. D" x
教程配套例子使用的是stm32h743xx_flash.icf,将这个文件复制到所创建工程的路径\Project\EWARMv8里面。然后在Linker选项里面将其添加进来:- f4 c0 o9 M' H6 g+ b
( B$ C$ _' P* w& s3 U ` 添加进来后是个绝对路径:/ s( }% q+ V0 o: `4 v, i. m9 n
/ V9 z7 c1 d& m5 y1 v! j7 O 要修改为相对路径: 2 F3 U. U/ y4 ~6 p4 B: ]- Q; B
; ?$ v- u1 |6 c 添加进来后要设置下中断向量表首地址,堆和栈大小,点击上面截图左下角的Edit按键进行配置。 , j! t* `+ ^+ q; G# w: p: Z 中断向量表首地址设置为0x0800 0000:. W2 G* w' M/ z! m8 u( ` - h+ k7 a& p0 J+ w1 e
STM32H743XIH的Flash首地址是0x0800 0000,大小0x200000,即2MB。 L9 J& z f$ I" o/ _) f a 默认的RAM空间选择DTCM,首地址0x2000 0000,大小0x20000,即128KB。* Q; p* g% i4 J( f0 X" ~( f3 k 6 b- L7 m# e. Z- u$ f
0 \8 M& t( B" x( ]0 N2 K0 Q" A2 I 堆和栈大小分别设置为0x1000和0x800: 3 A: |: T6 V/ N9 f9 O
设置完毕后记得点击保存。# s4 y- K) H6 A H6 Q* } 6.7.5 Debugger选项 Debugger选项主要用于调试下载,当前IAR支持如下调试工具:
( X3 P/ d, j+ M2 E5 r 具体的调试设置在下一章有详细说明,本章主要是保证创建的工程能够正常编译。 4 E5 i- c- i: B 6.8 第7步,最后一步验证是否创建成功 点击全编译:6 h1 j# x" |1 |, G
" N( y3 ?4 y* X: K 编译结果:0错误,0警告,编译成功。* v, [. H& X5 C / ~* S8 g( n- F% L. @6 |
$ ^+ z6 F0 z( ~9 [ 6.9 IAR的字体,多核并行编译,语法提示等设置! D n" r" E( {8 Z 这里将IAR经常用到的设置做个说明。 6.9.1 Tab Size设置3 W$ {! x a! I4 u' ?5 r 教程配套例子的Tab size要设置为4,否则代码显示不整齐。菜单Tools -> Options:
" j U5 M4 D. \8 i 6.9.2 字体设置 菜单Tools -> Options,支持比例字体和等宽字体选择:
6.9.3 多核并行编译 Y0 Y" ^! i) S3 ]( L* ^ 电脑有几个核都选上,加快编译速度,我这里是四核:$ E. q) _& `9 s1 @8 O4 X- |; x
6.10 总结" t& v$ c9 u: X# }0 D 对于初学者来说,务必要实际动手操作一遍,以后移植其它程序代码大有裨益。# O) f9 N5 v X' u ) _& r. W0 N, [0 V. Z" {6 T4 \7 \* `+ X |
【 逢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实现温度、湿度、气压数据读取
微信公众号
手机版