STMCU小助手
发布时间:2021-12-21 23:00
|
4.1 初学者重要提示 KEIL官方有一个专门的MDK上手文档mdk5-getting-started,在MDK的安装目录里面。 MDK5的工程创建过程还是比较重要的,务必实际上手操作一遍。' q T( t) m5 P: H8 |3 s, \4 [; v 4.2 第1步,创建工程文件夹 创建一个文件夹,里面包含如下文件(直接将跑马灯例子的Project文件里面内容全部删除,然后整个工程复制进来即可)。
9 I9 c7 z! f' L$ N Doc文件夹 用于记录例程的修改记录和例子简介。, a4 C" `7 V1 Y( J6 }1 {# A . E7 Y. ^5 |: h5 J2 Z Libraries文件夹; }" y) r2 m% K2 f; C" Y 在第一章详细介绍从官网的下载方法。; `+ h- {" f7 a# A7 n) { & M( s1 r$ [+ ^3 k7 J Project文件夹7 X j, N. X3 T* v5 d& g7 C. h3 X 这个是本章的重点,在这个文件夹里面再建立两个文件夹,MDK-ARM(uV5)文件夹里面用于存放MDK工程,EWARMv8文件夹用于存放IAR工程,方便以后创建IAR的工程。 u; r: ^. D; m; ] N User文件夹 这个是要用户提供的,开发板已经都提供好,bsp文件夹里面是开发板各个外设的驱动,segger文件夹是硬件异常分析代码。 ; O) _/ S" O* s7 q+ o# u6 o+ N 删除目标文件.bat' q6 T# ] ]; G7 @* F. ] 这个是批处理文件,用于删除MDK和IAR工程编译后生成的obj和list临时文件。 4.3 第2步,创建新工程) {0 U: S+ @2 u+ W8 G4 _ 打开MDK,选择Project ->New uVision Project:' j( X# {' B, |; v5 z W1 ? ) y: Z) i" l3 q& T1 Z
工程名设置为project:
+ }) V8 _4 F( W 选择器件:STM32H743XIHx, m1 J: `. ~" ^9 X( j, e# \, X : B$ @' _1 h- `' A, h
点击OK后弹出如下界面,点击Cancel取消,当前我们还不使用RTE环境创建, ; U0 C7 T7 F9 @& a. h( }2 B
4.4 第3步,设置工程名和工程分组名 默认新建的工程是下面这样的:9 c# k9 c/ T6 z* `! l8 n 4 k$ v( j- T4 y% |# I: n% a
打开Manage Project Items,双击Targer1修改名字为Flash,或者任何其它方便自己管理的名称,设置完毕后点击OK。, R& z6 K6 G3 u0 J' h ( r5 P+ }5 W& C( A' U' L) @
可以看到已经修改为Flash:- w1 o# O" ^% j* F! n; O
0 v# S2 J: v$ h+ Q2 ~. g" J 再次打开Manage Project Items,添加如下分组内容: ; Z# Y4 J0 B% x x7 e6 e% s
+ a9 ]; @ f( |1 Z: S# O% } 可以看到左侧工程列表已经更新: 9 t1 y, K; K) W$ r. {+ D' B: l! M& q
7 L4 T7 }# y* ]- `1 ` 4.5 第4步,添加工程文件 添加方法跟第2步,第3步一样,可以通过Manage Project Items添加:% E& [( c# f. ^. t
% n. J5 Y/ }% l- x4 V* Y 也可以直接双击工程列表里面的分组添加(注意文件类型里面推荐设置为ALL files所有文件):
+ @ z1 y1 h- X- b8 } 添加User分组需要的文件; W) L0 |4 `2 ~. S1 a ( b8 p$ `. }2 g, H% y3 B
main.c文件位于文件夹User,实现了一个简单的跑马灯效果。 & H2 r& ]$ F, B 添加BSP分组需要的内容# X! |2 z& [, z# d+ ^ + s [2 n& e- s5 G% f1 y8 n
- ]7 ] S6 Q1 w, b3 n: S9 _5 }( h bsp.c 位于路径\User\bsp,主要用于MPU、Cache、时钟和外设初始化。 1 m6 f, U1 X8 }$ x& f$ u6 W7 L0 H bsp.h位于路径\User\bsp,此文件是各种头文件的集中汇总贴,方便管理。, R; R8 _0 [9 y8 N# g. q * f+ u4 c5 [" ` bsp_led.c位于路径\User\bsp\src,用于LED驱动。( {$ l6 i/ q' M ' ?' H3 _. e$ S bsp_key.c位于路径\User\bsp\src,用于按键驱动。 : q" h8 `) S O bsp_timer.c位于路径\User\bsp\src,用于软件定时器组和微妙级单次延迟。. E# g! ?6 i( X9 l- g) ^. R bsp_fmc_io.c位于路径\User\bsp\src,用于IO扩展,这里LED要用到。 ?( a; O, m& w0 x/ @ bsp_uart_fifo.c位于路径\User\bsp\src,用于8串口FIFO驱动。1 f! T F/ j$ G stm32h7xx_it.c位于路径User\bsp,用于部分系统中断服务程序。0 {2 {) Q7 Y% | 6 B) D' B2 w/ N 添加MDK-ARM分组需要的内容( s2 a# y3 q6 C9 ]* v9 ?
startup_stm32h743xx.s 位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates\arm,主要用于堆和栈空间设置,中断向量表也在这个文件。$ ?& J- e& @# s3 }4 K - s" Y, x, C4 L" K4 m9 G( q- s: F 添加HAL_Driver分组需要的内容8 {8 v; y7 C; K% I, H % g* J8 i- L' U& J: H
: h- U& c" M" D- ^2 C( s stm32h7xx_hal_conf.h位于路径\User\bsp,主要用于HAL库的配置。 其它文件路径:\Libraries\STM32H7xx_HAL_Driver\Src,用到什么外设添加什么驱动文件即可,有些外设驱动跟DMA也有关联,直接添加进来即可。 添加CMSIS分组需要的内容) {, _! s' s0 M% X) U' k
( f1 j9 c' x+ v$ X4 s system_stm32h7xx.c位于路径\Libraries\CMSIS\Device\ST\STM32H7xx\Source\Templates,主要用于复位RCC相关寄存器和中断向量表位置设置。 添加SEGGER/HardFault分组需要的内容 3 H5 L x, ]/ e3 i5 S. D
6 I, q2 {; F" R0 F 这两个文件位于路径:\User\segger\HardFaultHandlerMDK,主要用于硬件异常分析。 ' z& m v3 R H. R( k1 _+ N 添加Doc分组需要的内容 - B s' Z. A, m- x6 H a$ ]
这两个文件位于Doc文件夹,主要用于说明例程的功能和更新记录。 4.6 第5步,Target Options配置 MDK的配置基本都集中在Target Options对话框里面: % r& A3 p: |0 d, s$ `
4.6.1 Device选项8 @& M& J6 M3 m 这个选项不用管,因为我们在创建的时候已经选择了STM32H743XIHx
4.6.2 Target选项% x9 ~ N8 C3 a: i/ W& c / Q1 B) s" o# W* ~* X
* F' {1 k0 @7 S, v 因为我们一般不用软件仿真,这个选项不用管,也不推荐大家用MDK提供的软件仿真,问题比较多。 选择编译器,使用默认的AC5即可。当前AC6支持的还不够好,仅MDK自家的软件都支持了,第三方的问题稍多。 我们这里使用微库MicroLib,这个库针对嵌入式应用,MicroLIB做了深度优化,比使用C标准库所需的RAM和FLASH空间都大大减小。比如调用:<math.h>,<stdlib.h>,<stdio.h>,<string.h>。! T2 O) E2 U+ ~$ N( B9 W
6 H% P3 W4 e; K) z# e STM32H7支持双精度浮点,所以这里选择Double Precision双精度浮点。2 I9 |- H/ S) R. Y: V9 V STM32H743XIH的Flash首地址是0x0800 0000,大小0x200000,即2MB。( a* H5 I7 S0 x 默认的RAM空间选择DTCM,首地址0x2000 0000,大小0x20000,即128KB。 地址0x2400 0000,大小0x80000,即512KB是AXI SRAM的空间。# P5 S2 `4 D" ~' ]( _ 4.6.3 Output选项, U6 [7 I- _# C2 q r/ B9 T; N+ e0 [ : C2 c! {* M2 ~; b
用于存放MDK编译过程中生成的obj临时文件路径,MDK在创建的时候已经帮我们创建好文件夹Objects,这里无需修改,使用默认即可。 Debug Information表示调试信息,选上。 Create HEX File表示是否生成hex文件,选上。2 ?* ?4 c* @5 y0 \1 @- }: h* h Browse Information表示是需要go to def的支持,使用HAL库话,推荐先不要选上,因为MDK5使用AC5编译HAL库时间比较长.* p( m) t) _: G' R" w3 B. q
4.6.4 Listing选项. Z+ s) ^6 C3 J: Y1 Q* T% V+ Z ; X7 V1 Z. u& `% ^+ k" I
用于存放MDK编译过程中生成的list临时文件路径,MDK在创建的时候已经帮我们创建好文件夹Listings,这里无需修改,使用默认即可。 是否生成*.lst文件,选上。 查看MAP文件要用上,全部选上。 4.6.5 User选项 6 D. l, p% }9 f, s$ b- O& |& w
这个选项基本用不上,可以不用管,主要是用来指定编译之前和编译之后执行的用户程序。对于本教程配套的例子来说在这里添加了一个批处理功能,用来实现Objects文件夹里面的hex文件复制到路径Project\MDK-ARM(uV5)里面,方便查找。" A1 K$ v4 |. Q
4.6.6 C/C++选项
9 ~: ]0 P7 V- J% K8 U; d 预定义宏 USE_HAL_DRIVER 表示使用HAL库。 STM32H743xx 表示使用H743系列。 1 h" D( S% ^* Y4 p% ` 选择0级优化,优化等级低,方便调试。+ o0 l: e" d! b* E0 [ 如何做MDK编译器的代码最小优化和性能最佳优化8 w% G" a8 [" G( k 选项One ELF Section per Function用于删除工程中没有用到的冗余函数。 @, \7 G8 C- A0 v" ^* ^' H6 U# | 使用C99规范,在第9章有介绍。8 m, y) A, z8 C: O1 C! P! g+ u0 h 添加路径,把用到的头文件路径包含进来,点击最右侧的小按钮,弹出如下界面进行添加即可:$ D9 [$ x. J v) H& W+ j; P % T0 b4 `" O: |0 j
! `0 l. w* K6 x$ t' [8 A P: [1 ^ 4.6.7 Asm选项 # S, d; o* q% [ R# @/ F
# a0 j, ?6 r# U# v9 M) I' Q" d 这个选项用不到,不用管。 4.6.8 Linker选项8 K! d h( I" H( O! \
这个选项用不到,不用管。0 V; w9 j H' x0 k6 l 4.6.9 Debug选项 9 C7 X7 B- |; J [+ n: W2 `& j
软件仿真不推荐大家用,问题比较多。5 f( J7 p+ E d& J0 b' J 硬件仿真,这里选择的STLINK,大家根据自己用的那种调试器选择相应型号即可。
具体的调试设置在下一章有详细说明,本章主要是保证创建的工程能够正常编译。 4.6.10 Utilities选项
这个选项主要用于编程工具选择,大家根据自己用的那种下载器选择相应型号即可。 Update Target before Debugging表示调试前更新芯片的程序。 4.7 第6步,最后一步验证是否创建成功 点击全编译:
编译结果:0错误,0警告,编译成功。
4.8 MDK的字体,多核并行编译,语法提示等设置 这里将MDK经常用到的设置做个说明。7 I5 Y1 @* @" n ~ 1 j5 h: W/ ~# a/ g' V& k+ e. P6 s 4.8.1 Tab Size设置* M/ Z7 q$ v5 J* I. |4 A5 D/ J 教程配套例子的Tab size要设置为4,否则代码显示不整齐: . L( k8 E2 G& @ 选择此图标:
弹出的窗口里面设置Tab size为4:) T; y% t. M- | & s+ b: @8 v( N/ L7 n1 A4 u
* [( j9 x! o4 G8 k9 Q 4.8.2 使能多核并行编译 电脑有几个核,都选上,加快编译速度。 ) u7 w# D" F% Q$ h7 d7 E5 e1 |4 y 选择此图标:
我这里是四核:
4.8.3 字体设置 推荐大家用下微软雅黑,而且可以防止复制粘贴的时候出现乱码问题。 安装微软雅黑的时候要注意,电脑端默认自带了一个微软雅黑,安装的时候会出现字体是躺着的。 * Y# ~$ s" a7 R+ F! T 选择此图标:
- w4 ] Q% N0 n! t. c+ |! @ 选择中文简体:% C! F" ^7 j, { / c4 I" a) K+ y9 a( \" c
选择安装微软雅黑字体:
效果如下:. p5 A2 E: \; }& b5 R4 \ 2 A Z) c# x. [. [& ?
4 o H( B \' P: b4 [# L* Q% X 4.8.4 语法提示和语法检测功能2 s! J/ [, ^0 _ n7 N, j 选择此图标: 5 W% q7 w2 Z+ C4 E T
MDK的语法提示和语法检测功能还行,大家可以根据需要开启:' j4 ~; B7 B, m. h; `
* C1 R: Q) L. V# ` 4.9 总结+ `$ R3 x8 M2 \) L8 _ 对于初学者来说,务必要实际动手操作一遍,以后移植其它程序代码大有裨益。 9 f. [6 V/ i) b! \( Q) _+ r4 w " }* Y6 d( Y) U* O |
【 逢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实现温度、湿度、气压数据读取
微信公众号
手机版