STMCU小助手
发布时间:2021-12-21 23:00
|
4.1 初学者重要提示 KEIL官方有一个专门的MDK上手文档mdk5-getting-started,在MDK的安装目录里面。: x4 Y! L+ |/ f2 O MDK5的工程创建过程还是比较重要的,务必实际上手操作一遍。 4.2 第1步,创建工程文件夹( G- l* Y/ x8 ?- y 创建一个文件夹,里面包含如下文件(直接将跑马灯例子的Project文件里面内容全部删除,然后整个工程复制进来即可)。 + z6 [4 X" d3 j- L, w0 ?+ t
. w6 U& k, F z2 l$ g' R Doc文件夹) L# I2 F" e2 U, Z9 b9 o 用于记录例程的修改记录和例子简介。 Libraries文件夹' Y( G9 ~* c+ H5 w6 s3 v3 g0 X 在第一章详细介绍从官网的下载方法。 Project文件夹 这个是本章的重点,在这个文件夹里面再建立两个文件夹,MDK-ARM(uV5)文件夹里面用于存放MDK工程,EWARMv8文件夹用于存放IAR工程,方便以后创建IAR的工程。8 s2 M5 \& m/ \ # r# t: J: H( p; ] User文件夹 这个是要用户提供的,开发板已经都提供好,bsp文件夹里面是开发板各个外设的驱动,segger文件夹是硬件异常分析代码。5 B# y3 h, w# A% B4 J& K6 T 5 X5 e& E$ Z6 T 删除目标文件.bat0 f: X. G# t9 [ A2 | 这个是批处理文件,用于删除MDK和IAR工程编译后生成的obj和list临时文件。/ t Q' g+ f) k( [+ u' Q, _ & C& l" Z$ X/ R0 W2 u 4.3 第2步,创建新工程( Q1 W5 T' |7 _6 c6 d5 F 打开MDK,选择Project ->New uVision Project:5 R/ H. w) ]$ |
工程名设置为project:! X( E+ _8 ^0 ]2 h9 @$ Q
8 y" E Z0 Z& p 选择器件:STM32H743XIHx! V# d6 s# d+ t' n! _ ( o6 Q- X0 ^% b1 D! Z) A
点击OK后弹出如下界面,点击Cancel取消,当前我们还不使用RTE环境创建," F- W- C) F( f6 \$ ~+ F% A
7 c: k/ r" r0 x1 x' l7 F2 a 4.4 第3步,设置工程名和工程分组名: i. \8 p/ U4 X( u 默认新建的工程是下面这样的:
( k( G) p6 m5 K. z4 x 打开Manage Project Items,双击Targer1修改名字为Flash,或者任何其它方便自己管理的名称,设置完毕后点击OK。$ L. Y/ S6 a1 K# l2 Q! o 2 d4 O' x9 x1 [1 `6 ?
可以看到已经修改为Flash:4 B- g/ M+ q( } $ e( h" _: X+ K
再次打开Manage Project Items,添加如下分组内容: $ ?: Q- Q' s4 U7 i X R4 J
可以看到左侧工程列表已经更新:) [3 P4 K7 i/ V. e9 a
: U9 E2 q+ ~( l$ `: X 4.5 第4步,添加工程文件3 U( }3 s6 r5 |7 n# E2 p 添加方法跟第2步,第3步一样,可以通过Manage Project Items添加:
" d, O4 W1 Y& G# L 也可以直接双击工程列表里面的分组添加(注意文件类型里面推荐设置为ALL files所有文件):
添加User分组需要的文件
8 z s$ E" f. p4 t7 y8 H& L main.c文件位于文件夹User,实现了一个简单的跑马灯效果。9 [* w! h& Q% S1 q 添加BSP分组需要的内容
bsp.c 位于路径\User\bsp,主要用于MPU、Cache、时钟和外设初始化。 0 A* w( {+ F$ e6 v" s bsp.h位于路径\User\bsp,此文件是各种头文件的集中汇总贴,方便管理。2 o. L- K+ D& M6 c' R; S ! [. E# L& l" u bsp_led.c位于路径\User\bsp\src,用于LED驱动。 }2 |& _# Z) r % x. b- ]$ c1 L bsp_key.c位于路径\User\bsp\src,用于按键驱动。7 r) W$ w4 d1 Q bsp_timer.c位于路径\User\bsp\src,用于软件定时器组和微妙级单次延迟。 ! o. B9 f: i6 E% k bsp_fmc_io.c位于路径\User\bsp\src,用于IO扩展,这里LED要用到。 bsp_uart_fifo.c位于路径\User\bsp\src,用于8串口FIFO驱动。: i# w8 }( ^/ Q, x+ U0 a ( q' o/ q% b& M* Q5 Q. h. l/ h stm32h7xx_it.c位于路径User\bsp,用于部分系统中断服务程序。 添加MDK-ARM分组需要的内容
startup_stm32h743xx.s 位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates\arm,主要用于堆和栈空间设置,中断向量表也在这个文件。 0 |3 Z" ~3 S% e6 A% C( b/ q+ i 添加HAL_Driver分组需要的内容( f: }& e: e! R1 w! a
stm32h7xx_hal_conf.h位于路径\User\bsp,主要用于HAL库的配置。# I4 X" R. E& ~# l4 F# w9 |9 Z+ N: Y ! e! h7 d: q: v$ P 其它文件路径:\Libraries\STM32H7xx_HAL_Driver\Src,用到什么外设添加什么驱动文件即可,有些外设驱动跟DMA也有关联,直接添加进来即可。) d$ e6 w4 Y( ?/ p' k1 \7 t : l; e9 ]/ D. J7 v+ m" N 添加CMSIS分组需要的内容& H" `8 ^; x: Q6 d( a! N, \
system_stm32h7xx.c位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates,主要用于复位RCC相关寄存器和中断向量表位置设置。 添加SEGGER/HardFault分组需要的内容: |* ^* U+ w& s , M' t# [/ W* Q" i/ n' |' j
- i' \7 k/ p4 d( \ n 这两个文件位于路径:\User\segger\HardFaultHandlerMDK,主要用于硬件异常分析。 添加Doc分组需要的内容! j: d1 k1 a+ Z+ \+ K4 k
. T0 \# L7 X+ A z5 c 这两个文件位于Doc文件夹,主要用于说明例程的功能和更新记录。7 ~5 e6 b: Y9 l# M8 t1 w- f 4.6 第5步,Target Options配置 MDK的配置基本都集中在Target Options对话框里面:
) `' s' V$ A9 k: Z! o 4.6.1 Device选项$ Y5 p+ E4 D) r Q; A# | 这个选项不用管,因为我们在创建的时候已经选择了STM32H743XIHx2 I8 T- i" g4 K, G* j' ^
4.6.2 Target选项 7 V/ ^( o/ G& o l: a
. c7 P6 L- ?( E+ d6 G2 J 因为我们一般不用软件仿真,这个选项不用管,也不推荐大家用MDK提供的软件仿真,问题比较多。3 |! \* _4 Q4 t/ Q% v4 ^ 选择编译器,使用默认的AC5即可。当前AC6支持的还不够好,仅MDK自家的软件都支持了,第三方的问题稍多。: W( Z: X; n$ k i+ z$ ?1 Z5 { 我们这里使用微库MicroLib,这个库针对嵌入式应用,MicroLIB做了深度优化,比使用C标准库所需的RAM和FLASH空间都大大减小。比如调用:<math.h>,<stdlib.h>,<stdio.h>,<string.h>。+ h- \: q( i1 L6 N
STM32H7支持双精度浮点,所以这里选择Double Precision双精度浮点。 STM32H743XIH的Flash首地址是0x0800 0000,大小0x200000,即2MB。 {3 G1 q1 ?) A5 g 默认的RAM空间选择DTCM,首地址0x2000 0000,大小0x20000,即128KB。4 H" H4 v( |- @0 @$ C7 f3 m 地址0x2400 0000,大小0x80000,即512KB是AXI SRAM的空间。* u8 C9 @- c. r5 F 4.6.3 Output选项 . r- T) c3 f7 m* g/ \
用于存放MDK编译过程中生成的obj临时文件路径,MDK在创建的时候已经帮我们创建好文件夹Objects,这里无需修改,使用默认即可。7 v6 m( U8 ]1 F& h# d- D6 b Debug Information表示调试信息,选上。/ c0 a. m& e7 b3 v; @8 T! w Create HEX File表示是否生成hex文件,选上。( k6 R9 D. v% _ Browse Information表示是需要go to def的支持,使用HAL库话,推荐先不要选上,因为MDK5使用AC5编译HAL库时间比较长.! ]' ?+ f& ?! x" q- ~1 l( w8 J! z ; u2 W. O6 Y$ q- Q5 z4 u+ _
4.6.4 Listing选项 ; v( r$ C# ]- n; z' S
: h4 k% k5 i% q: b1 Z 用于存放MDK编译过程中生成的list临时文件路径,MDK在创建的时候已经帮我们创建好文件夹Listings,这里无需修改,使用默认即可。# a, Y. W( B, N6 U7 ` 是否生成*.lst文件,选上。$ l# B7 ^5 O7 ~$ |& ^& `1 ^ 查看MAP文件要用上,全部选上。 4.6.5 User选项. W2 j8 E* v( c
这个选项基本用不上,可以不用管,主要是用来指定编译之前和编译之后执行的用户程序。对于本教程配套的例子来说在这里添加了一个批处理功能,用来实现Objects文件夹里面的hex文件复制到路径Project\MDK-ARM(uV5)里面,方便查找。6 b. p/ ]- t9 ?) m 8 x- S. U* V: C6 t% {( \- z1 |. H
/ G7 r Q9 c, E Z$ L, [' Z, I( x 4.6.6 C/C++选项' _& u$ W+ ^ Y
8 D7 I* g+ N0 y3 g C& q2 O 预定义宏0 k7 Y: y& ?) I5 M& e USE_HAL_DRIVER 表示使用HAL库。 STM32H743xx 表示使用H743系列。$ Z& m) ^5 o1 G 9 M3 u) ~6 O' S; o 选择0级优化,优化等级低,方便调试。; j3 u5 \' ~+ H: O& I 如何做MDK编译器的代码最小优化和性能最佳优化 选项One ELF Section per Function用于删除工程中没有用到的冗余函数。) q; P5 d) h. _% v4 h6 v 7 }+ K. y% A# C" h _* G7 K7 \ 使用C99规范,在第9章有介绍。 添加路径,把用到的头文件路径包含进来,点击最右侧的小按钮,弹出如下界面进行添加即可:6 R( L" q% C$ b, E" n! F0 s& |
4.6.7 Asm选项& @* T4 y, V7 d2 S; T( ]1 i+ n + D# c9 _( k7 ?' n" h. ^
这个选项用不到,不用管。1 o) u( \1 s0 X4 @ b* \6 R- q 4.6.8 Linker选项' e4 G6 I$ o! v6 r: l
) L0 [/ [* E: @1 |& r+ \( l- o. a! z4 s 这个选项用不到,不用管。 $ V; X' D" f/ e8 n+ W! Z4 O" H" t& _ 4.6.9 Debug选项) ~, x4 m) i8 Z+ Y) x: X
! }1 y" l4 \4 D0 H3 x0 i 软件仿真不推荐大家用,问题比较多。5 q2 N5 {1 S9 f) r 硬件仿真,这里选择的STLINK,大家根据自己用的那种调试器选择相应型号即可。3 }. R# D4 [% l6 l- u 8 I5 B' s8 @# G5 Y8 O5 q
( j' f: o. J9 ?% {. O$ S) F3 z 具体的调试设置在下一章有详细说明,本章主要是保证创建的工程能够正常编译。4 k0 N7 q0 ?6 [: H$ J : H0 M. N# p+ M4 x 4.6.10 Utilities选项) ?2 D v3 Z% F : U0 P7 R) c s& h+ n
这个选项主要用于编程工具选择,大家根据自己用的那种下载器选择相应型号即可。 Update Target before Debugging表示调试前更新芯片的程序。 4.7 第6步,最后一步验证是否创建成功 点击全编译:7 J9 R5 @6 H( C, a o3 U
编译结果:0错误,0警告,编译成功。
" e4 L& _/ d2 m3 O+ i1 ~; B 4.8 MDK的字体,多核并行编译,语法提示等设置 S& G! ?6 k) i! e3 U1 _; Z$ h 这里将MDK经常用到的设置做个说明。 ! O( s9 F; M/ O' E5 c' g" O0 N 4.8.1 Tab Size设置' m+ M$ @/ u& H5 {. w) e 教程配套例子的Tab size要设置为4,否则代码显示不整齐: U6 c: H; ^# _& ~ 选择此图标: 6 f5 ?0 \( L% ]5 H9 H
弹出的窗口里面设置Tab size为4: 5 @( E$ B0 W. C$ {! T
{8 W" i5 Z+ U6 ]. g$ P9 t2 L 4.8.2 使能多核并行编译 电脑有几个核,都选上,加快编译速度。 $ P; Z1 h5 i4 H3 u+ O6 U% K 选择此图标:- m+ L; b! R: ~, P# ^+ h
我这里是四核:0 x; q" `. @5 \1 A
+ q; Z/ C& h9 U3 ?# u# d/ Z 4.8.3 字体设置 推荐大家用下微软雅黑,而且可以防止复制粘贴的时候出现乱码问题。0 c4 y6 m+ |, p. v4 D/ u4 y9 h 安装微软雅黑的时候要注意,电脑端默认自带了一个微软雅黑,安装的时候会出现字体是躺着的。 选择此图标:
& w' O/ d1 j9 U) c9 q W0 \: U 选择中文简体:
: k5 U8 P8 Y( K+ f4 l# w* ` 选择安装微软雅黑字体: ! [# O2 D2 c. e: P& m% a8 X
- L. z9 m; X' f; K+ l1 k 效果如下:
4.8.4 语法提示和语法检测功能1 P1 y5 O) e c) l/ E7 @ 选择此图标:
MDK的语法提示和语法检测功能还行,大家可以根据需要开启:5 g. W$ Y. l q2 }* f
4.9 总结 对于初学者来说,务必要实际动手操作一遍,以后移植其它程序代码大有裨益。 / E$ [; ~3 d7 j& i4 u E' M ' {* Q$ B7 j4 J# o, ?# l |
【 逢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实现温度、湿度、气压数据读取
微信公众号
手机版