你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】初学STM32H7的准备工作

[复制链接]
STMCU小助手 发布时间:2021-12-25 10:45
1.1   初学者重要提示

1、  关于学习方法问题,可以看附件章节A。

2、  学会 STM32H7相关资源的获取方法,做到心中有数,否则心里老是没底。

3、  关于MDK和IAR两种编译器,推荐都掌握,以其中一个为主,另一个为辅。因为很多时候我们需要参考的工程代码不是自己熟悉的编译器,就会很被动。

4、  相对于F1、F4系列,H7最大的区别的还是MPU和Cache的配置,这两个配置会贯穿整个教程为大家做讲解,而外设的学习大同小异。

5、  H7携带了DTCM和ITCM,ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上的其它RAM主频都是200MHz,所以要充分发挥TCM的性能。

6、  STM32H7系列只有HAL库,没有再配套标准库了,这点要知道。HAL库的优点是配置方便,特别是配合图形开发工具STM32CubeMX时,缺点是源代码稍显臃肿,封装的有点多。

7、  这几年涌现出好几款非常棒的调试工具(如Event Recoder,SEGGER RTT),教程的后面章节会为大家做讲解。


2 ~: e; l, @3 y% G0 L% ~1.2   开发环境说明

1、  IDE:支持两种IDE开发环境,MDK和IAR

        a.  MDK推荐使用MDK5.26正式版及其以上版本。

        b.  IAR固定使用IAR8.3版本,由于IAR向下兼容性稍差,其它版本未做支持。

2、  调试器使用JLINK,CMSIS-DAP,ULINK或者STLINK均可。

3、  配套开发板是安富莱的:STM32-V7开发板,MCU是STM32H743XIH6。

4 S' f4 o# |4 u+ R0 S) v

1.3   STM32H7和F1,F4系列的区别

使用STM32H7跟F1,F4系列的区别。

1、  最大的区别H7是多了一个L1 Cache一级缓存,这个缓存在为低速存储器带来加速的同时,也为程序设计带来了一些问题,其中最为主要的是数据一致性问题。

2、  STM32H7的自带外设比较之前的任何STM32型号都要生猛,算是大换血了,换了ADC,DMA,USART等重要外设,性能比之前要强劲很多。比如ADC换成了3.6Msps 16位分辨率,DMA支持任意互联了,USART也支持波特率自适应。

3、  到了STM32H7系列,ST官方仅提供了HAL库,没有再提供标准库,而对于F1,F4系列,标准库和HAL库都是有的。

4、  F1是M3内核,F4是M4内核,而STM32H7是M7内核,从编程的角度来说,几乎没有区别。1 @" P! ^( u$ |0 k* A


, B, ?0 U1 f0 c+ G' |

总的来说,主要有上面这四点不同,其它地方与使用F1,F4系列是相同的。

" H8 s, [4 s) E; ?; R; H

1.4   STM32H7开发资源查找

学习一款新的芯片,需要大家从官方获取两方面的资料,一个是相关的技术文档,比如参数手册、数据手册、应用笔记等;另一个是软件包,官方在软件包中提供了外设驱动库和基于此库的大量例程。


; V: ^* m9 }9 N, k+ d( t

1.4.1      开发文档

学习STM32H7主要下载哪些相关手册呢?主要有以下几个,这几个手册是我们经常要使用到的,不光学习STM32需要这类手册,学习FPGA、DSP也是这些类型的手册,熟练查阅和使用这些手册也是电子工程师必备的知识之一。


) ]- P2 c" s0 ?) a; I8 Z3 K& p# n

参考手册(Reference Manual)

对芯片每个外设的具体描述和功能介绍,比如我们要查USART,SPI,DMA相关寄存器和功能的介绍就可以使用这个手册。

% g& v/ [8 h. \7 i' E2 e) u3 L

数据手册(Data Sheet)

在我们要画PCB的时候用到这个手册的情况比较多,这个手册上面有关于这个系列芯片的引脚定义、电气特性、机械封装、料号定义等信息。


6 ^- Z5 _% d) ]9 V8 M2 {& i

勘误手册(Errata Sheet)

描述了芯片某些功能的局限性,并给出解决办法。这个手册也比较重要,有时候我们觉得有些地方调试老是出问题,就需要查找一下,看看是否是硬件bug。

: [) `3 f& O% L1 b

闪存编程手册(Flash Programming Manual)

芯片的片上Flash操作指南,比如芯片的擦除,编程,闪存读写保护,选项字节信息等。


5 ~' n- a* c9 F3 s" D/ U

内核编程手册(Cortex-M Programming Manual)

对内核的系统控制块的介绍。这个手册有时候也要用到,比如我们需要了解NVIC和SysTick相关的寄存器,就需要使用这个手册。这个手册可以在ARM官方网站下载,也可以到ST官网下载,区别是ARM官网下载的手册是通用的,而ST的是针对自家芯片做的。有时候在参考手册上面找不到相关寄存器的信息时,就需要用到这个手册。

+ o5 {2 h- ]/ x# k

应用笔记(Application Note)

针对不同应用主题的描述性文档,部分笔记还会有配套的固件例程。应用笔记的重要性不言而喻,很多时候官方对一些应用做出了解决方案,都会以应用笔记的形式发布。


% x5 N; S: @  z8 G1 U' |8 a1 S

用户手册(User Manual)

一般是对某个软件库的说明文档。


% P  u$ d4 y- ?6 J, E" y

Cortex-M3/M4权威指南

这也是非常重要的参考资料,对于有兴趣了解M3/M4内核的同学,这个资料相当重要,了解了内核才能更好的利用M3/M4。虽然是STM32H7是M7内核,大部分内容跟M3/M4都是一样的。

了解了这些手册的作用以后,我们学习如何在官网上面查找这些文档。前几年ST官方升级后,通过页面超链接的方式查找非常不方便,当前推荐直接在官方右上角的方框里面检索即可,比如使用的是STM32H7,直接输入STM32H7检索:

第1步:进入ST官方地址www.st.com,右上角输入STM32H7检索。

第2步:检索后会弹出所有STM32H7的芯片(随着时间推移,会增加新型号)。

第3步:比如我们用的是STM32H743XI,点击进入第2步截图中的STM32H743XI选项即可。进入后,所有的相关资源就都在这个页面下了。

基本上大家所需的开发文档都在这个页面下了。

3 I; O( w+ Q/ a+ y

1.4.2      软件包

通过上面小节整理完毕相关文档后,就是STM32H7软件包的下载了。软件包也比较好找,同样推荐1.4.1小节的方式。

第1步:进入ST官方地址www.st.com ,右上角输入STM32CubeH7检索。

第2步:检索后会弹出STM32CubeH7的软件包选项。

第3步:进入STM32CubeH7的页面地址后,就在页面的最底端看到这个软件包了(随着时间推移,版本会不断更新)。

第4步:点击按钮“Get Software”后,弹出如下界面

点击ACCEPT进入下面界面:

点击Login/Register

通过上面四步就获取了STM32H7的软件包。软件包的目录结构如下:


3 \3 s) _/ Q9 R1 U$ E: N

1.5   HAL库介绍

HAL库就包含在大家下载的STM32CubeH7软件包里面。软件包的框图如下:

HAL库全称Hardware Abstraction Layer,即硬件抽象层,其实就是STM32H7的外设驱动包。代码文件位于路径:Drivers\STM32H7xx_HAL_Driver。如下是部分截图:

单从人性化角度,这些外设驱动写的还是比较用心的,特别是每个C文件开头的使用说明。比如文件stm32h7xx_hal_gpio.c开头的说明:

2 W5 w* R% N+ J5 S9 d+ A

  1. 1=====================================================================. z7 }' n/ u  [( R
  2.   2 / Z9 [# Y4 P( |
  3.   3                     ##### GPIO Peripheral features #####
    / }8 }- F$ f6 A( n: T
  4.   4 & p) i& V7 E( k8 i
  5.   5======================================================================! L$ f' C  D/ _7 r* f
  6.   6 9 ~7 {0 F$ B& i# e& g: v) |
  7.   7   [..]
    8 G2 }+ D, P, ^1 f3 Y$ y
  8.   8 7 ~& Z8 x* @, s5 Z" T; E* Z
  9.   9   Subject to the specific hardware characteristics of each I/O port listed in the datasheet, each
    ; r( L7 P! j8 |$ v& K! \
  10. 10 ; [3 c1 f% ^- r  n* l
  11. 11   port bit of the General Purpose IO (GPIO) Ports, can be individually configured by software
    $ }9 ], G& Y3 J( p! L; G
  12. 12
    * _, U$ J# U7 u6 a
  13. 13   in several modes:
    6 e5 _+ |& q8 v; y, k, T$ ^
  14. 14 # _- h  B' K3 Q/ D+ R5 O9 G
  15. 15   (+) Input mode) ^- f& l, Z) u$ D9 ^; r7 T& w, E
  16. 16 ' K8 g7 Q6 d) B$ r
  17. 17   (+) Analog mode
    7 F$ K( k8 d$ W0 B* y5 f4 S& a. D
  18. 18
    $ l6 U2 q; E$ [5 B' S5 O1 J8 W
  19. 19   (+) Output mode
    ) C  `3 t$ \: s
  20. 20 % K" ]. l( p" e/ {, z: z
  21. 21   (+) Alternate function mode
    " r8 ?7 K2 I4 W5 P1 V9 ^
  22. 22 * {1 F9 b; `1 O" i. ^/ }/ F, _7 U
  23. 23   (+) External interrupt/event lines! f& U4 J3 h% Q- n% W0 W) k9 |
  24. 24 4 f) R; b( {! L: k2 ]
  25. 25  
    - _( w5 O" ]2 W, f3 @
  26. 26
    - M, ~$ z: _' n
  27. 27   [..]
    ; T. p/ h0 L7 H) L4 f  A5 Z
  28. 28 " y  K+ |% Z! C+ v1 n* @
  29. 29   During and just after reset, the alternate functions and external interrupt
    / O8 Y2 H$ c' C/ l
  30. 30 + W2 q$ s) t( Q6 o: J
  31. 31         lines are not active and the I/O ports are configured in input floating mode.
    ' V0 W3 ^4 Z+ R; V6 d7 ?# T
  32. 32
    . R7 h8 |+ u( D6 [: Y
  33. 33     
    & z" q3 t4 _4 g) e( P( p
  34. 34
    ) p4 K4 O& W# |
  35. 35   [..]   
    " W( e: W% o, L- ]
  36. 36 7 {" f+ q% e8 o$ j( c" D6 ^! a
  37. 37   All GPIO pins have weak internal pull-up and pull-down resistors, which can be* y) F$ @3 U) Q3 [3 D
  38. 38 # ^1 b8 ~6 ]( h- S
  39. 39         activated or not.9 [: l! [# \! W, m: j: Q0 i
  40. 40
    ! D$ s6 d* M% K. O& J" ~5 c
  41. 41  - o. j) J/ Q8 Q- r/ f: h6 h7 }4 F8 y
  42. 42 + S6 F- c- M2 j4 o  ^
  43. 43   [..]* k9 ]7 x8 T$ [5 U# \. K& p
  44. 44 & N9 l( g  H) a  \0 v9 @( H: O  m
  45. 45   In Output or Alternate mode, each IO can be configured on open-drain or push-pull
    ) p# s5 [" G% N7 M
  46. 46 : {  i9 n: K2 x
  47. 47         type and the IO speed can be selected depending on the VDD value.6 s# b( k+ t" E9 y8 u; |
  48. 48 7 ^  o+ T- r* `% Q0 u! x4 D
  49. 49  * }: J5 \& C& U# C$ I/ v8 T
  50. 50 & ?  m7 U3 z# c/ z
  51. 51   [..] % a& B) a- \7 f5 m9 [
  52. 52
    1 E9 b5 z0 w  d& X% i5 ]: Y
  53. 53   All ports have external interrupt/event capability. To use external interrupt# S. L/ ^! A0 z0 M+ ]
  54. 54 1 Z, t' ^9 h4 D3 ?
  55. 55         lines, the port must be configured in input mode. All available GPIO pins are5 e. s+ m; Y" x. D2 [- @
  56. 56 0 ], n* Y) M5 D! l8 D! H0 _$ S7 T
  57. 57         connected to the 16 external interrupt/event lines from EXTI0 to EXTI15.* A) G% P4 A( j. d; O0 L9 F+ f
  58. 58
    ( w8 c; v# {( L
  59. 59  
      g3 D: ~# N* {8 B- X
  60. 60
    # n3 j! N$ x: N2 v6 T
  61. 61   [..]
    5 j) q0 j5 u' K5 Z9 q, ]
  62. 62 ( ~0 a# m$ N/ |
  63. 63   The external interrupt/event controller consists of up to 23 edge detectors
    7 `& P/ B! _4 v& W
  64. 64
    0 t3 ?- o7 t4 Q/ t
  65. 65         (16 lines are connected to GPIO) for generating event/interrupt requests (each* \' w" e' Q$ U% A8 e  S  W, F2 T
  66. 66 6 ]2 k$ ~( x2 G: |5 s0 c; J3 K
  67. 67         input line can be independently configured to select the type (interrupt or event)
    & @& M% R) n3 g, x! L0 s1 d1 t, R
  68. 68
    6 z( f* ?8 J9 r
  69. 69         and the corresponding trigger event (rising or falling or both). Each line can; r% v8 j1 V! Y! t
  70. 70 , k. s! j9 P, O" N9 @6 g
  71. 71         also be masked independently.* N# N2 L  N1 I7 z3 f' O: |( F; v( K
  72. 72 ; e% D- r% |- n5 @' V4 O
  73. 73  
    ' z3 [5 O. x: |3 m6 e
  74. 74 5 @/ z8 y( k: h: `
  75. 75                      ##### How to use this driver #####
    & e4 B( ^* u6 f% B% V. Y
  76. 76
    " ~- e8 n/ o) w# S3 @/ b& x
  77. 77   ============================================================================== - p% h/ C- q1 u# z1 B! @2 ]. o
  78. 78 ) y, l0 u1 r8 |$ x- E
  79. 79   [..]
    ! F. S5 `$ C* z4 R! q
  80. 80
    2 a3 U. i5 U; K& o! F! Q
  81. 81     (#) Enable the GPIO AHB clock using the following function: __HAL_RCC_GPIOx_CLK_ENABLE().$ Z& g/ e4 U: N' x/ G* D/ `* \
  82. 82
    7 X9 s# t$ y7 h0 k# D6 l4 ~
  83. 83  " i7 Y. _7 Q& T/ j, ~! f
  84. 84
    $ r8 v( l2 \6 W# i/ L& ?" p1 z
  85. 85     (#) Configure the GPIO pin(s) using HAL_GPIO_Init().
    & y5 _+ p. w0 x3 ~' i
  86. 86
    ( B* @3 d' {" ]1 ^$ n& _, l) Z
  87. 87         (++) Configure the IO mode using "Mode" member from GPIO_InitTypeDef structure
    2 {( }4 _( X9 F' M* j% C: G
  88. 88
      v/ d. G  B. X6 Y3 X4 l0 Z
  89. 89         (++) Activate Pull-up, Pull-down resistor using "Pull" member from GPIO_InitTypeDef
    + p4 }9 J0 d5 R, X" f( D
  90. 90 7 }$ ~0 m; q! u( I6 N
  91. 91              structure.# i2 [3 L& d$ d6 H
  92. 92
    1 J$ r) {* d5 Y; X. V* R7 |
  93. 93         (++) In case of Output or alternate function mode selection: the speed is; r7 Z( }, J: l# D6 ~
  94. 94 % S  ]) f- R- `: v+ K& I% s
  95. 95              configured through "Speed" member from GPIO_InitTypeDef structure.
    , w1 u- \5 N. P$ ]& N4 n. j
  96. 96 4 D' |: q9 x8 D2 `) f8 ]. t: p6 `
  97. 97         (++) In alternate mode is selection, the alternate function connected to the IO
    - c+ i6 u2 P. T  V
  98. 98 9 G& q6 i& O) ]* K) |( `/ M
  99. 99              is configured through "Alternate" member from GPIO_InitTypeDef structure.2 r& F- `9 Q& f+ N1 b+ [, X% x+ _9 r
  100. 100 1 G9 }+ j3 F$ o4 y; i% c
  101. 101         (++) Analog mode is required when a pin is to be used as ADC channel+ I) J/ ^# T6 N* u7 w* [3 S
  102. 102
    + S3 i. v, q+ y, {* _6 @! e
  103. 103              or DAC output.
    / s/ i4 ?) _* G' e7 l8 ?3 ?
  104. 104 ! I8 Z4 m# j0 h5 N! X
  105. 105         (++) In case of external interrupt/event selection the "Mode" member from
    7 p. T) ^5 Q) ~5 j6 o
  106. 106
    ! R+ I' Y  n* {
  107. 107              GPIO_InitTypeDef structure select the type (interrupt or event) and
    $ }: W4 a9 \: z, U$ ^4 l/ g
  108. 108 ' d6 \" c! u  I1 o# {
  109. 109              the corresponding trigger event (rising or falling or both).
    / M8 U8 d; x) E# U% b
  110. 110 ; T% C3 E" }$ q4 Q; Z. v
  111. 111  
    0 B1 A5 x! M( }. C
  112. 112 ( _$ D$ l5 B0 U! t, z
  113. 113     (#) In case of external interrupt/event mode selection, configure NVIC IRQ priority
    ! u. s6 E9 ?* ^
  114. 114
    ' k* _5 d" e0 h. ^3 ^0 v
  115. 115         mapped to the EXTI line using HAL_NVIC_SetPriority() and enable it using/ v8 @) V! z, x$ D9 T; f0 h+ a
  116. 116
    5 X2 d: Z( l" K) U4 F1 S
  117. 117         HAL_NVIC_EnableIRQ().
    * F; N, w6 w! P2 h( [) t
  118. 118
    5 }) A$ K  w- U5 x
  119. 119         
    0 \; {8 M9 J, R& k- J  n1 U2 f8 p
  120. 120 2 z" h1 ]* T6 l2 J' r/ _2 W. r9 _1 N# ^
  121. 121     (#) To get the level of a pin configured in input mode use HAL_GPIO_ReadPin().8 _  K$ X; \5 ?: T! ~+ B; l2 u
  122. 122 $ j! g& A8 t: |: l) L1 D$ A1 P* B
  123. 123            
    $ h. D$ U+ w, ]+ i/ \
  124. 124 ( Y) h" I% _( s) l3 d7 V
  125. 125     (#) To set/reset the level of a pin configured in output mode use
    + P" R& ^; c0 s% A
  126. 126
      c; q8 r" _! Y/ m0 T- M8 P
  127. 127         HAL_GPIO_WritePin()/HAL_GPIO_TogglePin().
      G  }# h; d, r, b5 z: m
  128. 128 ' N& A) w8 [+ Q5 U6 l
  129. 129                   L& V8 U: `: H0 q* D0 p! J
  130. 130
    * E& p9 \, T9 q1 r
  131. 131    (#) To lock pin configuration until next reset use HAL_GPIO_LockPin().
    - I* R2 f) @: F0 F: o: z
  132. 132
    / w  [/ b6 L! ]6 y
  133. 133  / O- C( D1 N! g; |2 F' U
  134. 134
    + q/ H  B/ x4 P% U' h
  135. 135                 
    # W8 Z; o$ O: k3 k+ ?
  136. 136 # Z2 z0 _3 Q7 E1 R: S
  137. 137     (#) During and just after reset, the alternate functions are not0 h" T% q1 v4 X% V1 G) z
  138. 138 8 |& Y5 V8 g5 }* H& a3 z
  139. 139         active and the GPIO pins are configured in input floating mode (except JTAG1 N" a% r' Z# V+ c: i. V5 C
  140. 140 6 l2 B* U5 o- Q$ l! D7 P
  141. 141         pins).2 \" A* L2 @6 D* i
  142. 142
    & f1 t8 Q( O- A5 y8 N
  143. 143  % L! p& _) s1 W; p
  144. 144 & K9 x2 u' t* m) j3 w
  145. 145     (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose
    7 p) g0 M# n, S* k) z) G: \. H
  146. 146
    7 m; q* N1 `1 }6 o6 E" Z) k- a
  147. 147         (PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has
    8 m2 W( E# M: s5 m. e( o9 h
  148. 148
    9 U: S% g" Z6 T  D' ?. k
  149. 149         priority over the GPIO function.7 q* h. k+ @+ Y# M! N9 x4 Q
  150. 150 8 g  J- |% q/ B
  151. 151  ) x7 L) r: x& m% f4 r, M: Z  j! S( b
  152. 152
    6 g7 O  A- J7 @$ C' M# C8 Q
  153. 153     (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as* j7 ^! y0 ~7 }7 I% ]. M
  154. 154 ' r5 y# J; G. G1 Z4 _/ z
  155. 155         general purpose PH0 and PH1, respectively, when the HSE oscillator is off.
    % \2 @( Z+ ?0 y2 Y. G: D& l( T
  156. 156 ' S& d; b7 }' L: [
  157. 157         The HSE has priority over the GPIO function.
复制代码

* b: Q- P5 `8 b9 B

HAL库的使用方法跟之前F1,F4系列的标准库差不多,只是HAL库封装的稍显臃肿。事情都是两面的,代码臃肿了,易用性会好些。

; M, I6 V3 Z* x: P$ s$ v  N) \

1.6   CMSIS软件包介绍

CMSIS(微控制器软件接口标准,Cortex Microcontroller Software Interface Standard)是ARM官方设计的驱动包,框图如下:

ARM推出CMSIS软件包意在统一各大芯片厂商的外设驱动,DSP数字信号处理,下载器和各个主流RTOS的API统一。几年下来,各个厂商一直是各自为战,所以CMSIS的驱动一直没有被各个芯片厂商采用。而且ARM做得也不够完善,没有ADC、DAC、定时器之类的外设驱动。

这两年情况好了不少,特别是ARM为ST做的CMSIS-Driver明显完善了很多。针对我们这个教程来说,当前还用不到这些东西,主要用到CMSIS软件包里面的如下头文件即可(不同版本,截图中的文件可能不同,这个软件包是一直在更新中的,下面的截图的版本是V5.3.0):


6 ^5 C7 T$ }+ v) b

这个软件包可以在三个地方获取:

1、STM32CubeH7软件包里面。

每个版本的Cube软件包都会携带CMSIS文件夹。

2、MDK安装目录(下面是5.3.0版本的路径)。

大家安装了新版MDK后,CMSIS软件包会存在于路径:ARM\PACK\ARM\CMSIS\5.3.0\CMSIS。

3、GitHub。

通过GitHub获取也比较方便

当然,也可以在ARM官网下载,只是这两年ARM官网升级得非常频繁,通过检索功能找资料非常麻烦。所以不推荐大家到ARM官网下载资料了。

下面为大家简单介绍下CMSIS软件包里面这几个文件夹:


8 I9 ~/ e& Q! k+ P9 l( _* h

Core

Cortex-M处理器内核和外设的API。 它为Cortex-M0,Cortex-M0 +,Cortex-M3,Cortex-M4,Cortex-M7,Cortex-M23,Cortex-M33,SC000和SC300提供了标准化接口。 还包括用于Cortex-M4,Cortex-M7和Cortex-M33 的SIMD指令。当前这个文件下只有一个示例文件,还用不上。

0 r) j2 S4 Q+ T; d6 F  L

Core_A

同上,只是用于Cortex-A5/A7/A9。

6 d5 D" p4 v7 u0 g( t5 t2 O1 l# _0 x

DAP

这个是ARM官方推出的下载器固件,也就是大家所说的CMSIS-DAP下载器。


) {1 {# k! t- H* P) Q' m) f

Documentation

这个是CMSIS软件包的Help文档,打开后效果如下:


& F+ W- r$ x; _& r+ x! v+ L

Driver

这个是ARM做好的驱动框架,支持的外设如下:

针对不同厂商,ARM会出一个完整的驱动包,比如STM32H7系列,在MDK安装目录的此路径下(前提是大家安装了STM32H7软件包):ARM\PACK\Keil\STM32H7xx_DFP\2.1.0\CMSIS\Driver。

ARM做的这个驱动跟HAL库有什么区别呢?ARM做的这个库要调用到HAL的一些API,然后封装了一些比较好用的API,方便用户调用。

5 j+ J; A0 [" s% [! i9 V6 p

DSP_Lib

这个是ARM提供的DSP库,此库支持以CM0、CM3、CM4以及CM7为内核的所有MCU,含源码。


8 ~6 B" u- j: T7 Q. X1 {

Include

这个文件比较重要,虽然是头文件,但是封装了很多内核方面的API,是大家工程里面务必包含的路径。


; e5 y6 I" _; _% s% U5 [

Lib

这个文件是GCC和MDK格式的DSP库文件。

! @, f9 z4 ^7 g5 o) q7 Z

NN

这个是ARM新出的神经网络库,框图如下:


  i( F% h. h! A! D; p, [- d

Packs

这个文件没什么用,大家不用管。

- n7 b+ J9 f) N3 {; ~5 L

RTOS

这个是RTX4以及CMIS-RTOS V1封装层,含源码,免费,Apache-2.0授权。


+ y& k8 H  ~# d' j: b1 u

RTOS2

这个是RTX5以及CMIS-RTOS V2封装层,含源码,免费,Apache-2.0授权。


" L; R  X: A  G% T) s) y! R3 h" q

SVD

SVD的全称是System View Description,系统视图描述。对芯片的外设、存储器等进行了详细描述,编译器要用到这个文件,不同系列芯片有不同的SVD文件。以STM32H7为例,在MDK的option选项里面可以看到以svd为后缀的文件被调用。

- C! O/ s, J' o) |4 m9 i

Utilities

这个文件里面提供了一些实用的小软件或者文件。


" ~# z: @! z$ M! [$ z2 [) u: V

关于CMSIS软件包就为大家介绍这么多,后面用到哪个文件时,再为大家详细介绍。

# }1 H! X; l; o5 |' Q

1.7   STM32CubeMX开发平台

STM32CubeMX是ST在2014年推出的图形开发软件,方便用户配置时钟、外设、引脚以及RTOS和各种中间件。整体框图如下:

通过这个图形软件,可以让大家方便地生成工程代码,支持MDK,IAR,TrueSTUDIO等编译器。针对STM32CubeMX的使用,后面会专门做几期专题教程。


+ t! E* L5 R' ]$ ?! V) w# S+ T8 f

1.8   STM32H7调试方法

STM32H7的调试方法主要分为两大类:

1、MDK和IAR编译器自带的调试

    MDK调试方法在第5章进行了详细讲解。

    IAR调试方法在第7章进行了详细讲解。

2、终极调试组件Event Recoder的使用方法。

    在8章节进行了详细讲解。


: k* |+ s9 `' `( P! y

1.9   STM32H7出现硬件异常的解决办法

大家做项目时,经常会遇到硬件异常问题,所以专门为此做了一个章节(具体在11章节进行了详细讲解)。


9 H/ f- T$ i. ^  ^/ X8 P* _5 K1 ~

1.10 总结

本章节就为大家讲解这么多,建议初学者花些时间对 STM32H7的开发文档的章节结构了解一下,随着以后的学习最好可以达到熟练查看这些开发文档的程度。


. r- X9 m  X( [) }1 q2 C% `  j" q3 \! Z" ~1 I
收藏 评论0 发布时间:2021-12-25 10:45

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版