STMCU小助手
发布时间:2021-12-21 23:00
|
4.1 初学者重要提示 KEIL官方有一个专门的MDK上手文档mdk5-getting-started,在MDK的安装目录里面。) v. M3 u+ n* `5 e MDK5的工程创建过程还是比较重要的,务必实际上手操作一遍。 L' c* k; U* U% T5 F+ g+ M 4.2 第1步,创建工程文件夹 创建一个文件夹,里面包含如下文件(直接将跑马灯例子的Project文件里面内容全部删除,然后整个工程复制进来即可)。; n- C% \; ?- b1 r( z
5 Z$ s3 Z" O" B8 `) Q Doc文件夹4 h* ^$ {! k! }" L 用于记录例程的修改记录和例子简介。# N2 A; i; [9 |4 P$ ?, h 0 I! |( Y, |! M1 x0 X/ l% x3 P Libraries文件夹 在第一章详细介绍从官网的下载方法。 Project文件夹+ f7 o2 h4 c( ]5 [% n( R 这个是本章的重点,在这个文件夹里面再建立两个文件夹,MDK-ARM(uV5)文件夹里面用于存放MDK工程,EWARMv8文件夹用于存放IAR工程,方便以后创建IAR的工程。2 x, y0 `* C& M1 M 7 j8 e* C( Q! x6 f& Q User文件夹, G& u! J1 ]+ I7 `" ?! A8 Q 这个是要用户提供的,开发板已经都提供好,bsp文件夹里面是开发板各个外设的驱动,segger文件夹是硬件异常分析代码。( b& Y2 k: d1 ?1 T% p 删除目标文件.bat 这个是批处理文件,用于删除MDK和IAR工程编译后生成的obj和list临时文件。 4.3 第2步,创建新工程7 J$ O' f; u% K0 E 打开MDK,选择Project ->New uVision Project:# q5 X9 o# N3 ]. a& R" r/ G , q: i+ ]- S+ s4 Z: }
& W3 V" D" l- k _6 ] 工程名设置为project:6 F" S, p# L# o0 C3 m* q. A/ K4 h
* n& a0 o. c: G5 P: L& I4 P 选择器件:STM32H743XIHx
点击OK后弹出如下界面,点击Cancel取消,当前我们还不使用RTE环境创建, $ m0 E' g' k+ F4 v
4.4 第3步,设置工程名和工程分组名8 v. @6 w" k. `1 v9 c) T( V' U; [% m 默认新建的工程是下面这样的:/ j& q$ X1 p+ J) H8 B1 h5 c/ p% H ' ]0 T& h# e& \: R& U3 B5 O4 H) L
( `) Z' m$ [9 j4 @ 打开Manage Project Items,双击Targer1修改名字为Flash,或者任何其它方便自己管理的名称,设置完毕后点击OK。: m4 j4 k7 f/ E; x; v2 v) t# r; O
可以看到已经修改为Flash: 6 M) Y3 O9 u; X, X
再次打开Manage Project Items,添加如下分组内容: % ?- Y% f8 N2 L; D5 m+ [
5 K% D3 F9 O9 c& V) Q 可以看到左侧工程列表已经更新:
1 ?+ h8 ~7 S1 j8 R, c4 }3 ^; x/ v 4.5 第4步,添加工程文件 添加方法跟第2步,第3步一样,可以通过Manage Project Items添加:
, S% b- u1 w5 l7 S, C 也可以直接双击工程列表里面的分组添加(注意文件类型里面推荐设置为ALL files所有文件): . U& W2 r4 B8 m5 Q5 ~/ s/ Q
添加User分组需要的文件
% V, V1 j8 _* p+ R$ G main.c文件位于文件夹User,实现了一个简单的跑马灯效果。 5 A# q- d/ I/ h 添加BSP分组需要的内容3 q9 n' x, n2 |9 X, i7 p B
& U [. A0 r% S: c bsp.c 位于路径\User\bsp,主要用于MPU、Cache、时钟和外设初始化。 bsp.h位于路径\User\bsp,此文件是各种头文件的集中汇总贴,方便管理。 - w( z0 \& ?' i bsp_led.c位于路径\User\bsp\src,用于LED驱动。 5 H, J: D5 v, w6 D1 s$ B& V0 T& V bsp_key.c位于路径\User\bsp\src,用于按键驱动。 - F% [% W f' d0 e9 t bsp_timer.c位于路径\User\bsp\src,用于软件定时器组和微妙级单次延迟。* x! C7 K+ j. H- v1 h$ x bsp_fmc_io.c位于路径\User\bsp\src,用于IO扩展,这里LED要用到。 bsp_uart_fifo.c位于路径\User\bsp\src,用于8串口FIFO驱动。 * k- P0 U( {* R% u } stm32h7xx_it.c位于路径User\bsp,用于部分系统中断服务程序。 添加MDK-ARM分组需要的内容8 ^! b: c6 N" C- ?# B: w : _( [/ m5 q# z& x
- G2 ]1 K% g% }6 b E startup_stm32h743xx.s 位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates\arm,主要用于堆和栈空间设置,中断向量表也在这个文件。3 S5 k3 Y$ ]4 b# o/ W5 d( O 添加HAL_Driver分组需要的内容# J# K6 X& o' W) q: G6 {6 f+ Z ! T4 y4 R, T, l0 |: Y0 Q; i @
; A B0 I7 N5 h X8 T& i stm32h7xx_hal_conf.h位于路径\User\bsp,主要用于HAL库的配置。 6 k! k% b8 U* S+ Z. j- s" M- Q3 R 其它文件路径:\Libraries\STM32H7xx_HAL_Driver\Src,用到什么外设添加什么驱动文件即可,有些外设驱动跟DMA也有关联,直接添加进来即可。 5 V4 k6 t& q0 O/ H# N 添加CMSIS分组需要的内容 6 Y4 D' e" O+ U2 J$ J9 @6 Z, b7 O
: B5 }; T1 u! m. d) T system_stm32h7xx.c位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates,主要用于复位RCC相关寄存器和中断向量表位置设置。: c5 a% k# V& [) N 添加SEGGER/HardFault分组需要的内容
& ~. R v p) ?. A. U- k4 l5 S" X; S: Z) { 这两个文件位于路径:\User\segger\HardFaultHandlerMDK,主要用于硬件异常分析。 5 [) D& }& l2 a9 @, y 添加Doc分组需要的内容, K7 \# X1 N9 y4 ^. i, y! K 9 c9 J% v8 u6 B& c1 W
这两个文件位于Doc文件夹,主要用于说明例程的功能和更新记录。 4.6 第5步,Target Options配置 MDK的配置基本都集中在Target Options对话框里面:* N+ _# p% l- h/ s4 g) V* l ! w z& X: Y! Q- M6 y
! z4 Y8 o. C8 }1 E$ ? 4.6.1 Device选项 这个选项不用管,因为我们在创建的时候已经选择了STM32H743XIHx - H2 t$ @' ^; l" C* V$ `
1 P% p7 ]6 W# T# b* F 4.6.2 Target选项
因为我们一般不用软件仿真,这个选项不用管,也不推荐大家用MDK提供的软件仿真,问题比较多。 选择编译器,使用默认的AC5即可。当前AC6支持的还不够好,仅MDK自家的软件都支持了,第三方的问题稍多。 我们这里使用微库MicroLib,这个库针对嵌入式应用,MicroLIB做了深度优化,比使用C标准库所需的RAM和FLASH空间都大大减小。比如调用:<math.h>,<stdlib.h>,<stdio.h>,<string.h>。 . O, n( y; n3 _( R% y# u" U) a
# O* I2 E) V* } a STM32H7支持双精度浮点,所以这里选择Double Precision双精度浮点。 STM32H743XIH的Flash首地址是0x0800 0000,大小0x200000,即2MB。/ U5 W r/ A- ]9 ^ 默认的RAM空间选择DTCM,首地址0x2000 0000,大小0x20000,即128KB。 地址0x2400 0000,大小0x80000,即512KB是AXI SRAM的空间。 4.6.3 Output选项 9 n; ?5 S3 [; R' f
用于存放MDK编译过程中生成的obj临时文件路径,MDK在创建的时候已经帮我们创建好文件夹Objects,这里无需修改,使用默认即可。 Debug Information表示调试信息,选上。 Create HEX File表示是否生成hex文件,选上。: q f: b2 {8 x& d/ F; u Browse Information表示是需要go to def的支持,使用HAL库话,推荐先不要选上,因为MDK5使用AC5编译HAL库时间比较长.0 \% Y' \0 }) \" }' n6 c6 w2 M
4.6.4 Listing选项- q/ q' d3 n1 F! i6 ~3 p , N' n: d+ L3 m5 H. C& [
用于存放MDK编译过程中生成的list临时文件路径,MDK在创建的时候已经帮我们创建好文件夹Listings,这里无需修改,使用默认即可。 是否生成*.lst文件,选上。 查看MAP文件要用上,全部选上。 4.6.5 User选项7 L" Q9 ]7 ]& W , J/ V! z" h' V# i
这个选项基本用不上,可以不用管,主要是用来指定编译之前和编译之后执行的用户程序。对于本教程配套的例子来说在这里添加了一个批处理功能,用来实现Objects文件夹里面的hex文件复制到路径Project\MDK-ARM(uV5)里面,方便查找。5 S5 N4 x* V( _6 t( j ) }6 ], H+ B, x; I+ y. [
4.6.6 C/C++选项
9 Q& ^3 d2 j* K7 i 预定义宏% i% R2 b# {, S% c5 ^ USE_HAL_DRIVER 表示使用HAL库。 STM32H743xx 表示使用H743系列。( |! F+ W8 k, t 选择0级优化,优化等级低,方便调试。' T# i) Z- G8 F- X& ~ 如何做MDK编译器的代码最小优化和性能最佳优化% y7 ~% _$ L, F# Z 选项One ELF Section per Function用于删除工程中没有用到的冗余函数。 h s0 g& q+ T. r, W 使用C99规范,在第9章有介绍。. e6 `5 Q- L6 @ 添加路径,把用到的头文件路径包含进来,点击最右侧的小按钮,弹出如下界面进行添加即可: & _# w0 s) W/ j
4.6.7 Asm选项
这个选项用不到,不用管。 4.6.8 Linker选项7 ]7 g- L: @. b- w+ g: d ) k0 g# `! S! E3 m8 O- x5 Q. y' Y
$ c% e! `5 c4 B1 R4 @/ b) P- s 这个选项用不到,不用管。 4.6.9 Debug选项
8 U2 D* ?- m2 e) `4 G7 v 软件仿真不推荐大家用,问题比较多。1 g' @- `; d2 k- B 硬件仿真,这里选择的STLINK,大家根据自己用的那种调试器选择相应型号即可。% g0 |. g" W3 Z# N; e1 r+ L
7 b$ L/ S5 k! x& T0 c 具体的调试设置在下一章有详细说明,本章主要是保证创建的工程能够正常编译。2 u. N3 V( Y; \& x% ?# {8 d" t/ k% @ 4.6.10 Utilities选项 4 j1 h/ W) Q1 T$ O
' Q! [- J4 ?$ p y3 x 这个选项主要用于编程工具选择,大家根据自己用的那种下载器选择相应型号即可。 ( N/ I7 e$ P' A2 W Update Target before Debugging表示调试前更新芯片的程序。 z3 p/ E: X. s0 M+ I+ x9 J 4.7 第6步,最后一步验证是否创建成功 点击全编译:0 z8 e# r1 H. ^6 L3 q
编译结果:0错误,0警告,编译成功。
4.8 MDK的字体,多核并行编译,语法提示等设置4 J- e4 K& b. u) N8 e, K 这里将MDK经常用到的设置做个说明。 U; y3 O' K$ w+ a" p 4.8.1 Tab Size设置 教程配套例子的Tab size要设置为4,否则代码显示不整齐: 9 B; ?+ N4 r9 {. p- l 选择此图标:1 o/ P$ }( ]3 m0 e
弹出的窗口里面设置Tab size为4:8 R% }& ^0 @$ j" |+ ? # I% _0 d0 J( h( }
' M% g% |" g7 D# O6 U 4.8.2 使能多核并行编译2 E1 \8 a1 }/ z 电脑有几个核,都选上,加快编译速度。 ) t0 q0 W6 t d6 t 选择此图标:# [* l% N* e. h5 W3 T
8 j1 i! X& f/ Z$ w7 } 我这里是四核:3 @" X8 @# a: ?. o( f
G0 _& B- C m# B- I; k 4.8.3 字体设置: ~( [* I! c2 X7 i! [2 Y 推荐大家用下微软雅黑,而且可以防止复制粘贴的时候出现乱码问题。 安装微软雅黑的时候要注意,电脑端默认自带了一个微软雅黑,安装的时候会出现字体是躺着的。& H) |, D8 k% G - y, O' Y4 L. b1 {, g6 F$ j' ? 选择此图标:' N o7 c+ y4 t9 R7 v5 b ( }; {3 U& p$ U
选择中文简体:
选择安装微软雅黑字体: 5 G; c5 a) ]3 W# a' h w
7 ^4 L, H4 M5 p* r+ `! ~- h/ D* ]( ? 效果如下: 2 U: K/ ^! c% ^8 E# z; R
- Y, [: r7 n E2 s) [2 e 4.8.4 语法提示和语法检测功能 选择此图标:
MDK的语法提示和语法检测功能还行,大家可以根据需要开启:9 S% M& x/ F+ x* v& c
3 Q. E- T. `2 L; @( O1 }# ~ 4.9 总结 对于初学者来说,务必要实际动手操作一遍,以后移植其它程序代码大有裨益。 |
【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中实现云彩流动效果
微信公众号
手机版