STMCU小助手
发布时间:2021-12-21 23:00
|
4.1 初学者重要提示6 T( \ `- P7 j3 F6 B, ~) z6 a0 k KEIL官方有一个专门的MDK上手文档mdk5-getting-started,在MDK的安装目录里面。 MDK5的工程创建过程还是比较重要的,务必实际上手操作一遍。 " L3 D8 r' O' L8 C( E- h7 Z* p 4.2 第1步,创建工程文件夹, k9 o# A+ J" v2 _4 @ \ 创建一个文件夹,里面包含如下文件(直接将跑马灯例子的Project文件里面内容全部删除,然后整个工程复制进来即可)。
Doc文件夹' o! w0 l4 K+ E, } 用于记录例程的修改记录和例子简介。 Libraries文件夹 在第一章详细介绍从官网的下载方法。 Project文件夹 这个是本章的重点,在这个文件夹里面再建立两个文件夹,MDK-ARM(uV5)文件夹里面用于存放MDK工程,EWARMv8文件夹用于存放IAR工程,方便以后创建IAR的工程。9 w4 N: Q' x- M User文件夹2 g+ G0 ^3 q; `8 D' p0 E% a9 W2 y 这个是要用户提供的,开发板已经都提供好,bsp文件夹里面是开发板各个外设的驱动,segger文件夹是硬件异常分析代码。 0 }7 x' ] O f 删除目标文件.bat 这个是批处理文件,用于删除MDK和IAR工程编译后生成的obj和list临时文件。 R# v& ^3 w" B0 G9 u 4.3 第2步,创建新工程$ |4 g/ [& A( p1 j+ p' I 打开MDK,选择Project ->New uVision Project:4 c" Q7 q! h1 `2 t' ?' M 6 g I3 V0 {( D6 y3 z0 s0 |3 @" A
工程名设置为project:! S7 I# g7 a3 J 1 s3 Z+ j, b. y4 X( g# x3 R
选择器件:STM32H743XIHx( J3 H; g* ~$ q( `: @) ]
点击OK后弹出如下界面,点击Cancel取消,当前我们还不使用RTE环境创建, 7 h4 ~/ g* m2 r. J" D0 K+ Y$ n
6 Q+ V$ d) O" x8 y! [+ K6 i& y7 A 4.4 第3步,设置工程名和工程分组名 默认新建的工程是下面这样的: 6 u' E! v6 I0 i3 w6 I9 D5 p
& L% C) { C% {" R! T 打开Manage Project Items,双击Targer1修改名字为Flash,或者任何其它方便自己管理的名称,设置完毕后点击OK。4 [$ x# g" [8 i 4 h' |8 @6 `0 ~- E0 U2 {3 R2 T* Y
可以看到已经修改为Flash:$ F' Q+ r ?/ c+ Z' t
$ J+ F2 c& a- b 再次打开Manage Project Items,添加如下分组内容:8 W5 l7 ~/ K' h4 P' L; _2 { ' L& ^1 m9 a; L3 {+ m* N8 e' U* o9 o
% F$ [+ W' {+ q* O5 ? 可以看到左侧工程列表已经更新:
" k2 F. R4 A* F1 z2 {8 \$ p% I 4.5 第4步,添加工程文件6 `7 `$ m" ^+ P5 T& p 添加方法跟第2步,第3步一样,可以通过Manage Project Items添加:$ X" E6 L+ O3 m0 g
也可以直接双击工程列表里面的分组添加(注意文件类型里面推荐设置为ALL files所有文件):
o! m0 M# g5 [+ C 添加User分组需要的文件) j% L4 I7 R# [ ~& X8 U + z3 o3 j. Y$ O0 @8 t+ y [
" q3 n% l. F" n1 R1 M main.c文件位于文件夹User,实现了一个简单的跑马灯效果。 - S0 v7 G: }' ?' `! T W8 h( D2 z 添加BSP分组需要的内容8 v4 s0 ~/ w5 |% a K3 x3 X* u$ I" \
: R6 h) z5 N1 c! @ bsp.c 位于路径\User\bsp,主要用于MPU、Cache、时钟和外设初始化。 bsp.h位于路径\User\bsp,此文件是各种头文件的集中汇总贴,方便管理。 1 |- b- ?% M6 }' }" D bsp_led.c位于路径\User\bsp\src,用于LED驱动。8 e {1 `. c4 h6 e# | bsp_key.c位于路径\User\bsp\src,用于按键驱动。6 c/ o4 s6 i2 m- J$ ` , S; ~- F' m0 ?2 t2 G% c/ Z bsp_timer.c位于路径\User\bsp\src,用于软件定时器组和微妙级单次延迟。 4 d. M7 o- O# u0 O" u3 j# n( P bsp_fmc_io.c位于路径\User\bsp\src,用于IO扩展,这里LED要用到。- V& g& _+ _' O9 `/ R9 g4 V/ X bsp_uart_fifo.c位于路径\User\bsp\src,用于8串口FIFO驱动。; a1 x [( G4 c8 d; I stm32h7xx_it.c位于路径User\bsp,用于部分系统中断服务程序。' m$ j' a8 i& S* ^% O2 w; L. W 添加MDK-ARM分组需要的内容
startup_stm32h743xx.s 位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates\arm,主要用于堆和栈空间设置,中断向量表也在这个文件。/ r9 r1 K6 w9 W 添加HAL_Driver分组需要的内容- E, s- `/ ^! w
stm32h7xx_hal_conf.h位于路径\User\bsp,主要用于HAL库的配置。- D& g. X3 i& c( J: m& ~ 3 ~5 ^* y# ?7 z! t# g9 w w" P6 P8 _ 其它文件路径:\Libraries\STM32H7xx_HAL_Driver\Src,用到什么外设添加什么驱动文件即可,有些外设驱动跟DMA也有关联,直接添加进来即可。 4 U2 X" x2 {* }. s( L4 E4 i& C 添加CMSIS分组需要的内容 ( q, d) o3 q% Q9 c/ x% a3 j
system_stm32h7xx.c位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates,主要用于复位RCC相关寄存器和中断向量表位置设置。" a7 n3 k* T5 M( L& E$ Z$ E5 ~+ n 添加SEGGER/HardFault分组需要的内容& F! z8 ?& x3 Q3 \. A" v
这两个文件位于路径:\User\segger\HardFaultHandlerMDK,主要用于硬件异常分析。 添加Doc分组需要的内容
) a( v" ^- G. G: K& Y8 O! d 这两个文件位于Doc文件夹,主要用于说明例程的功能和更新记录。 4.6 第5步,Target Options配置 MDK的配置基本都集中在Target Options对话框里面:. \' P1 E y7 U; s5 ?% G # t8 |% B; J7 o* x1 U; Q
! V# w+ ?) G; @ D0 v 4.6.1 Device选项 这个选项不用管,因为我们在创建的时候已经选择了STM32H743XIHx: \6 D. C, m7 L I$ U: _+ O' y {* M$ }6 m
( s8 K/ L+ K" |& J: S* w5 }* {3 X 4.6.2 Target选项2 N+ m) D. S3 K/ F4 D( v
因为我们一般不用软件仿真,这个选项不用管,也不推荐大家用MDK提供的软件仿真,问题比较多。 选择编译器,使用默认的AC5即可。当前AC6支持的还不够好,仅MDK自家的软件都支持了,第三方的问题稍多。 我们这里使用微库MicroLib,这个库针对嵌入式应用,MicroLIB做了深度优化,比使用C标准库所需的RAM和FLASH空间都大大减小。比如调用:<math.h>,<stdlib.h>,<stdio.h>,<string.h>。 3 i0 k2 G2 ^9 o3 W+ X) F; d$ \* v
- ^' c A4 D/ C. B$ | STM32H7支持双精度浮点,所以这里选择Double Precision双精度浮点。$ M# g9 b( |& w' m% ? STM32H743XIH的Flash首地址是0x0800 0000,大小0x200000,即2MB。: E. S! x& j& u+ \3 T 默认的RAM空间选择DTCM,首地址0x2000 0000,大小0x20000,即128KB。 地址0x2400 0000,大小0x80000,即512KB是AXI SRAM的空间。, y; N& q; C' D4 S - `, c* ]3 P: l8 p h% G# k5 s# H 4.6.3 Output选项 # i; Q4 N; r1 Z! X( G
( p# o; H/ h S( Z, M) F 用于存放MDK编译过程中生成的obj临时文件路径,MDK在创建的时候已经帮我们创建好文件夹Objects,这里无需修改,使用默认即可。! |5 M' B- e- u3 z: r$ \/ Q Debug Information表示调试信息,选上。( Y# ]# \5 Y! L* u( M2 R Create HEX File表示是否生成hex文件,选上。 Browse Information表示是需要go to def的支持,使用HAL库话,推荐先不要选上,因为MDK5使用AC5编译HAL库时间比较长. 1 {" L) k" ]3 b8 Z/ z8 J0 d4 o$ Z8 B
4.6.4 Listing选项; C- V( m6 h/ C8 \5 B9 y7 {; I / c7 J" F1 }( o
用于存放MDK编译过程中生成的list临时文件路径,MDK在创建的时候已经帮我们创建好文件夹Listings,这里无需修改,使用默认即可。* M; ?, Z" [7 {' ]/ ^ 是否生成*.lst文件,选上。7 ]+ @* m* o. c& } 查看MAP文件要用上,全部选上。 4.6.5 User选项9 a; ~/ @9 l+ {* O
这个选项基本用不上,可以不用管,主要是用来指定编译之前和编译之后执行的用户程序。对于本教程配套的例子来说在这里添加了一个批处理功能,用来实现Objects文件夹里面的hex文件复制到路径Project\MDK-ARM(uV5)里面,方便查找。# m/ p( O/ u5 P4 {6 B & i7 r! K4 \5 c7 h
8 z- w# @; o. `$ D 4.6.6 C/C++选项 3 R& F: E8 ]2 Y/ c- w
_' X' D* E+ ]7 f7 N* f6 t 预定义宏 USE_HAL_DRIVER 表示使用HAL库。 STM32H743xx 表示使用H743系列。 选择0级优化,优化等级低,方便调试。8 }+ j9 S+ [. a E 如何做MDK编译器的代码最小优化和性能最佳优化+ O8 Q1 X* }% p, K* C6 l 选项One ELF Section per Function用于删除工程中没有用到的冗余函数。 使用C99规范,在第9章有介绍。+ Y& H; l0 T" K. b# c 添加路径,把用到的头文件路径包含进来,点击最右侧的小按钮,弹出如下界面进行添加即可: . I2 B. L; b% r0 Q4 E1 b
2 @: | w+ C# t% s; z 4.6.7 Asm选项) o' o8 o& G. s! r5 F$ S& \% Z0 { ' q1 F4 z/ ^3 U* Q2 {- Q! n+ Z
; Y4 Z, l, |: L( Y3 q2 t% b, o' w 这个选项用不到,不用管。2 Z: y9 R, F# @- v# g. {5 x ; v% K8 Z# [& Z k. I* z" U0 _0 e/ Q" g 4.6.8 Linker选项
0 W* c( M0 W9 [4 t0 d 这个选项用不到,不用管。; a: x6 S- E% d# k2 S Z. x : W; g4 G4 H* A: S! X/ ` 4.6.9 Debug选项 m$ y* P- l, k. v9 y
# |, H, e8 c/ [7 { 软件仿真不推荐大家用,问题比较多。 硬件仿真,这里选择的STLINK,大家根据自己用的那种调试器选择相应型号即可。 + g4 [. L6 W% r
2 S) N/ I D" M5 k9 W 具体的调试设置在下一章有详细说明,本章主要是保证创建的工程能够正常编译。 % B0 K6 a3 x! e; r 4.6.10 Utilities选项) l) u2 b1 U6 O5 p$ ]+ A0 M
这个选项主要用于编程工具选择,大家根据自己用的那种下载器选择相应型号即可。& Q+ ~# N4 l S( u* a! `& F' T Update Target before Debugging表示调试前更新芯片的程序。 1 ^ q% i ` z 4.7 第6步,最后一步验证是否创建成功 点击全编译:4 Y ^. [" U0 j2 s( X : B4 _8 I9 E0 ^8 q+ |8 N
编译结果:0错误,0警告,编译成功。 % R6 ^9 t! v4 d( ] m) f
4.8 MDK的字体,多核并行编译,语法提示等设置 这里将MDK经常用到的设置做个说明。 # G4 ?. p5 `* i4 E5 L; w 4.8.1 Tab Size设置5 {& r/ ?% @ y9 h* z 教程配套例子的Tab size要设置为4,否则代码显示不整齐: 选择此图标:
5 F. Z" c E6 [" ]: ?; b- _ i% x 弹出的窗口里面设置Tab size为4: ~, y6 ^9 P/ X" T ' B* c* P, _! a4 P) \
4.8.2 使能多核并行编译 电脑有几个核,都选上,加快编译速度。! u$ e9 o; E9 h/ ^# K8 i 选择此图标:/ n4 f. Y& K) `' A. T9 k % p" e" G5 v1 ~! j9 P z9 \( b1 P
我这里是四核:
4.8.3 字体设置& Z' B1 c$ O$ T% w0 D# {( ? 推荐大家用下微软雅黑,而且可以防止复制粘贴的时候出现乱码问题。, a& ]' _' C0 C+ ]- u6 ] 安装微软雅黑的时候要注意,电脑端默认自带了一个微软雅黑,安装的时候会出现字体是躺着的。, [5 d" N, ? z I1 W 选择此图标:
5 P8 x+ J3 J) ~ 选择中文简体: % i1 l+ x U7 g. r5 V7 j- w
选择安装微软雅黑字体: + p( S( K$ G6 Y+ S4 J- W( t
效果如下:& R r. L r9 q5 C% X 2 U+ I- Z6 G ^3 D% b3 W" G9 N1 g
$ g% M+ M3 o& p; G1 w 4.8.4 语法提示和语法检测功能- e" p7 p1 `. M7 d* | 选择此图标:3 \. T [3 F) g3 n1 A a0 Z
, S2 u7 b1 m s Z# ]3 `5 N; H8 u MDK的语法提示和语法检测功能还行,大家可以根据需要开启:
2 ~8 _5 V! U' B: z; G3 \ 4.9 总结& H. ]7 X8 H; {8 I( D# P8 O0 z 对于初学者来说,务必要实际动手操作一遍,以后移植其它程序代码大有裨益。 |
【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中实现云彩流动效果
微信公众号
手机版