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

【经验分享】初学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),教程的后面章节会为大家做讲解。


; R- W* }- Q; O4 P" q1 j! J1.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。


2 W/ i. s' ^# R. o

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内核,从编程的角度来说,几乎没有区别。. `- t" s4 ?/ N- K7 D2 U2 i2 b

, E% N7 u5 k) G5 P( G8 G. }

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


; \& H+ T3 K2 v- k: p

1.4   STM32H7开发资源查找

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


& X* ]$ S% N' c1 K; P8 f5 f

1.4.1      开发文档

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

* `3 h5 i0 w) K& M1 R+ m# X- S' {% _

参考手册(Reference Manual)

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


: I: }1 i/ Y$ P5 u$ t7 Z3 v9 L

数据手册(Data Sheet)

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


& S8 [5 g6 Y* F/ [9 N6 T" d

勘误手册(Errata Sheet)

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


$ V* _( K, w2 j+ H. u9 D0 `" K

闪存编程手册(Flash Programming Manual)

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

( D: I* i1 i, h# K& _& q0 q

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

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


; Z1 h  I2 N! Q/ U

应用笔记(Application Note)

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

' S) ~4 u0 _' t0 X7 z$ S

用户手册(User Manual)

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


8 k  m* v$ h9 k) Q$ ]

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选项即可。进入后,所有的相关资源就都在这个页面下了。

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

6 L/ S& [- X5 p0 F$ ^! z2 l2 ~

1.4.2      软件包

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

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

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

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

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

点击ACCEPT进入下面界面:

点击Login/Register

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


6 k  r. e+ O. v0 v

1.5   HAL库介绍

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

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

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


/ s8 D1 Z0 _( a+ r7 ]9 J

  1. 1=====================================================================; o4 Z. X; |+ W
  2.   2
    9 k5 }8 z1 c; v( A
  3.   3                     ##### GPIO Peripheral features #####! l  t5 j- e% k0 Z# Z
  4.   4 + i" _8 O) w: y+ Z! \
  5.   5======================================================================9 f4 \% S* R# N: G4 P9 ]" l+ N
  6.   6 9 G- Z0 f) g, h+ |; A+ x* ?. p, [0 R
  7.   7   [..]
    5 C+ r7 C' [4 Z4 K
  8.   8
    $ i  a2 Z' i9 ~3 \) I
  9.   9   Subject to the specific hardware characteristics of each I/O port listed in the datasheet, each
    - q5 u" {1 N% P2 J
  10. 10 ( D. z- c# Z0 c3 `( E, T
  11. 11   port bit of the General Purpose IO (GPIO) Ports, can be individually configured by software7 p" @* d5 S' n+ @8 h6 Q
  12. 12
    * f; z/ T1 X$ d$ a
  13. 13   in several modes:
    % @) }+ j3 M4 c7 F1 A$ S/ \1 D# y
  14. 14 0 J" m% V" I' f3 ^
  15. 15   (+) Input mode1 q: t% m' O, x! U0 ^
  16. 16
    & S9 u( Y4 v- ~, W4 H( F$ v
  17. 17   (+) Analog mode
    # a. R9 k; M# Z+ A. T. Q5 i
  18. 18 / O% u  S( K& M
  19. 19   (+) Output mode
    , I3 Y/ Y1 V$ f$ n' e
  20. 20 " x+ z4 W5 B: N7 V( J
  21. 21   (+) Alternate function mode& A# P7 u7 W! J& B  I) }& j7 i
  22. 22
    - O, p, y! x' a# a( D( Q: [
  23. 23   (+) External interrupt/event lines' G4 S4 M' ?9 Q* O$ f
  24. 24
    0 \8 v6 W6 s: N( `& c
  25. 25  7 ~/ |% @+ Y  m1 p
  26. 26 3 z- W8 i5 h$ x) M6 z
  27. 27   [..]
    6 A' d7 c" {! Y  Y2 S$ m; I
  28. 28 - G+ v6 ^* ~, E! ^: B
  29. 29   During and just after reset, the alternate functions and external interrupt ; \  x  [  K( c( L8 L  N  T
  30. 30
    3 r1 b( b$ S& H4 t) D8 @
  31. 31         lines are not active and the I/O ports are configured in input floating mode.
    / g1 @1 @5 g) B( e+ b
  32. 32
      f. d& s6 o! {+ B% |, P  Z# l
  33. 33     
    , B) a; z0 t6 ~; y$ ]$ Y6 j" Y9 ?
  34. 34 ' M* u3 O2 g2 i* t# Z0 G  G% [% x
  35. 35   [..]   
    4 i/ m/ F/ r+ k. U# ^2 l& V
  36. 36 % e  c8 ?1 p+ R: P* V9 \
  37. 37   All GPIO pins have weak internal pull-up and pull-down resistors, which can be
    ) r3 G) o- o' ?! S
  38. 38
    . `! p# h" E, @' j3 e. D
  39. 39         activated or not.
    + @% S0 f2 |+ c5 o5 m
  40. 40
    5 j0 m6 G/ \$ F5 i% f" f) r
  41. 41  ! ?4 i& N3 t9 c3 f0 Y" f0 }: ^1 h
  42. 42 ( g( N/ A8 j2 I2 [
  43. 43   [..]
    : L; i: q: Y- O
  44. 44 4 }0 b  s6 Y* o) C. [, q0 n+ S
  45. 45   In Output or Alternate mode, each IO can be configured on open-drain or push-pull
    $ Z* G2 }1 A/ e6 f5 @
  46. 46 7 L) Q* s/ b) }$ o
  47. 47         type and the IO speed can be selected depending on the VDD value.
    ; I6 q; I$ T4 x8 M+ E
  48. 48 5 E. l0 z9 Q. x% c
  49. 49  7 h# o+ f8 D  B( L
  50. 50
    - v! v* ^3 r. D  r3 b1 A
  51. 51   [..]
    ) [( Y5 H* J! N3 I5 l- ]
  52. 52
    ( T# _2 E: n6 F
  53. 53   All ports have external interrupt/event capability. To use external interrupt( P  w# W' Q$ i4 B, {# w
  54. 54 8 q; E4 W. o  E6 l7 i+ z7 I
  55. 55         lines, the port must be configured in input mode. All available GPIO pins are* P4 q$ l! a# g# i
  56. 56 8 Y3 g: M8 W3 ]4 G) |2 L) T$ S
  57. 57         connected to the 16 external interrupt/event lines from EXTI0 to EXTI15.6 a' L2 J& j5 k+ C8 ~6 b
  58. 58
    2 \6 r0 Q7 M' s
  59. 59  % `1 W0 Z6 a& y, c0 l  C1 o: G
  60. 60 / l0 r5 {5 B) b5 e: R
  61. 61   [..]# j" F: J% X( `5 a0 ~3 _0 N
  62. 62 ' l. n) @# X; V1 r! }) u  ?' f2 O, E
  63. 63   The external interrupt/event controller consists of up to 23 edge detectors* O4 Q8 d  O* V! {3 k
  64. 64 # q$ d1 U) L6 u4 n+ r
  65. 65         (16 lines are connected to GPIO) for generating event/interrupt requests (each
    * A  H* J! @( J1 |: k
  66. 66 $ \, p# k# a8 N7 `$ U+ |9 G
  67. 67         input line can be independently configured to select the type (interrupt or event)6 `6 ?3 m" z7 f0 C$ g. w
  68. 68 . ?1 Q) M# A8 \8 o' X5 O; y
  69. 69         and the corresponding trigger event (rising or falling or both). Each line can0 B# A5 x7 [( x4 @" F) q5 ^( N$ ?& Z
  70. 70 ' |! j$ a' B( n& {7 k
  71. 71         also be masked independently.
    / y( i( G5 r0 }
  72. 72
    ( o% q. X! F2 i
  73. 73  
    * P$ [  O" I" w9 k& A! O
  74. 74
    / l- ^9 ]. F* p1 n2 t* }
  75. 75                      ##### How to use this driver #####
    6 y: w' A9 b3 o; W
  76. 76 # v  Y6 Q- O/ w' X& m
  77. 77   ============================================================================== + i+ ?9 c! |; S. F( ~% |0 p
  78. 78 # R) J1 ?3 Q9 n; W2 y8 ?
  79. 79   [..]' y' V4 @5 t, u3 k. z. J
  80. 80
    # M1 e/ j! T4 `" }  _
  81. 81     (#) Enable the GPIO AHB clock using the following function: __HAL_RCC_GPIOx_CLK_ENABLE().
    * b8 Z$ c# I% X% y# |
  82. 82
    % N- g% N* Q2 h, {4 F
  83. 83  
    ) _. e! R: e+ @7 `! K7 m! l4 o- u8 B
  84. 84 : U- r  T5 b( T, P
  85. 85     (#) Configure the GPIO pin(s) using HAL_GPIO_Init().
    4 U3 `- L! _2 U% c+ C% z- ^6 J
  86. 86 : \, e) H! `" r: _
  87. 87         (++) Configure the IO mode using "Mode" member from GPIO_InitTypeDef structure
      ~# q# [3 G6 n9 j* p8 H
  88. 88 - x" M7 m0 `3 N1 K' p% e
  89. 89         (++) Activate Pull-up, Pull-down resistor using "Pull" member from GPIO_InitTypeDef2 w* z3 k2 O4 {1 Y& }! m
  90. 90 # [5 T& z/ E% m( ^2 Y+ h
  91. 91              structure.
    ! d7 f0 W' r( d
  92. 92
    ( v2 E6 G9 k! l0 b  R$ M
  93. 93         (++) In case of Output or alternate function mode selection: the speed is, |0 D0 r- r$ V; G% N6 u
  94. 94 # B; b  @+ G" C% W0 J) \# e1 s
  95. 95              configured through "Speed" member from GPIO_InitTypeDef structure.% a5 A  t. c+ t. Q
  96. 96
    % n/ q* R+ I: d7 O2 Q# j% ^
  97. 97         (++) In alternate mode is selection, the alternate function connected to the IO. G7 z& ]* X, f5 B. [3 e- N
  98. 98 % w1 y; ~! M: I5 }! u# G
  99. 99              is configured through "Alternate" member from GPIO_InitTypeDef structure.
    3 k3 v; ~! L: _- q
  100. 100 # O5 y( d, H' Q: i5 o# F
  101. 101         (++) Analog mode is required when a pin is to be used as ADC channel
    / `& x% h8 r& ]* t9 F5 d
  102. 102
    5 F: s0 W6 H, s* S
  103. 103              or DAC output.+ r5 F: K/ k& p7 I
  104. 104 ) K8 {4 D1 w2 H* B. S
  105. 105         (++) In case of external interrupt/event selection the "Mode" member from
    : o7 P3 Y& g$ S/ R7 n  c
  106. 106
    + ~; A% j% L3 p5 H1 b
  107. 107              GPIO_InitTypeDef structure select the type (interrupt or event) and
    : X4 o' m! Q5 E6 N( m# j/ A( U- ^
  108. 108 6 C4 M  N0 Y1 {5 `# g
  109. 109              the corresponding trigger event (rising or falling or both).
    % j6 [- Z' f/ b
  110. 110
    ( I* M6 A: h  V1 W
  111. 111  % @9 a. k. B, [+ F# P2 V; |' B- w
  112. 112 8 Q8 \: {2 Q9 g8 V
  113. 113     (#) In case of external interrupt/event mode selection, configure NVIC IRQ priority
    / k$ [4 |, ~9 X+ F0 p  S8 \! Q! h0 o
  114. 114 : ]! j5 }2 v- c: P( q
  115. 115         mapped to the EXTI line using HAL_NVIC_SetPriority() and enable it using
    ( ^! x* w+ O# i) B
  116. 116 , Z) M) b7 @9 y
  117. 117         HAL_NVIC_EnableIRQ().
    6 V& A% D; I% x9 Z2 M- V9 Q+ p
  118. 118
    & J2 s# u. F+ |& U) }$ F$ X9 m2 v! A! t
  119. 119         
    % U# r* n: l' `) o
  120. 120
    2 D$ f9 Q" K- m; p1 M* r
  121. 121     (#) To get the level of a pin configured in input mode use HAL_GPIO_ReadPin().
    - i$ A2 `! m; \$ H7 D9 K
  122. 122
    2 r  f: H! L2 M- s$ P8 r) P8 k
  123. 123            
    & m% W( Z" K7 [- r
  124. 124 0 }" I  n, b# }6 y6 l, h! j
  125. 125     (#) To set/reset the level of a pin configured in output mode use# M5 K& `0 g  d& D6 q  K: a
  126. 126 # U% x, c1 Q  U/ x# t( ?# E; X" u
  127. 127         HAL_GPIO_WritePin()/HAL_GPIO_TogglePin().
    3 {- L; R0 j0 z" X0 v) }, x6 @
  128. 128
    2 h" T0 b+ F; L  T' _
  129. 129                 
    , l. v% U/ z% ?9 E
  130. 130 * e! a1 _/ I; P
  131. 131    (#) To lock pin configuration until next reset use HAL_GPIO_LockPin().
    4 [7 A# B$ p+ I% ~* S
  132. 132 ' U9 ^& W) z* e1 R' n7 E
  133. 133  
    ! B4 m: ^8 X: A* ^7 @! O
  134. 134 ; y) w$ `  t6 Q, R0 K0 h
  135. 135                 , W6 f& {1 F. ^* f+ `8 u
  136. 136
    ' W4 [6 G% l1 Q) B2 U
  137. 137     (#) During and just after reset, the alternate functions are not
      g+ r# u. d1 z3 C2 K* x
  138. 138 5 |0 F- z' f! k- v( T  B8 p
  139. 139         active and the GPIO pins are configured in input floating mode (except JTAG
    " t7 U0 s+ q  L$ l9 V
  140. 140 & Z/ W: f5 K; l* n* b. k$ i6 _
  141. 141         pins).
    7 L& D: R8 o4 a& k5 r; J+ h( D4 s% Q
  142. 142 * v( E5 }4 t4 v4 t. I) A, j
  143. 143  
    7 I6 R/ \: ?6 f, h# a
  144. 144
    8 ^. u5 U& _0 D( z4 r$ H9 l
  145. 145     (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose
    7 I! ]0 E7 J. @- U9 J5 q2 ?
  146. 146
    0 f- ~( v3 ^( I+ l1 n" Z% b
  147. 147         (PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has
    ) Z% v  z: \6 Y+ ]5 `
  148. 148
    2 F/ y0 h2 F' P) p' z) N, {, m
  149. 149         priority over the GPIO function.
    ' Z0 |9 r1 i: c7 Z; ?
  150. 150
    8 f8 l  k& }3 C- @
  151. 151  ( J8 S; h. m# ^' ?- y2 U
  152. 152 ) V- w& \3 n! N1 c
  153. 153     (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as  s/ L0 z& [' j# z  u; F$ T
  154. 154
    5 `+ s5 A1 Q- m8 M; B) K1 D1 y5 T
  155. 155         general purpose PH0 and PH1, respectively, when the HSE oscillator is off.
    , l& Q; i' |- C* m+ w' }; z2 B3 w
  156. 156 ( c; s, E6 S7 W
  157. 157         The HSE has priority over the GPIO function.
复制代码

/ P* S- ^2 G; l4 {* ~& n

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

! y- n) r- l, o. U! D# R

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):


" Q, y* H% T, q9 R8 P7 v2 O( k

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

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软件包里面这几个文件夹:

  F( X7 c3 _9 u$ e2 q

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指令。当前这个文件下只有一个示例文件,还用不上。


9 F) ~0 A+ W, B/ ^  s2 A, g

Core_A

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

% ]% u: D& l+ P8 z" m) k

DAP

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


. l+ U, ]$ M: {  r; n9 P

Documentation

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


" V$ }- I7 [# M2 J( I5 a  M) W

Driver

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

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

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

8 K. W; I# C/ R7 ~$ b

DSP_Lib

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


$ j3 x0 {3 a. B+ |0 T

Include

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

$ V; o1 }2 R- j$ w* `

Lib

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

& c4 {5 H) h6 h

NN

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


2 j/ i3 V, W9 H1 i

Packs

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

" A# E7 l  }: e" g0 m: @9 J# {6 R0 |

RTOS

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

% s" b) Z$ f% L( {. v9 \' A

RTOS2

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

& {4 Q0 b: X! l+ i7 L7 E

SVD

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

0 i# ?, a! N* T. n/ n0 T& Y, o) q

Utilities

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


2 Q4 y& |7 C: L, n0 O4 l

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

' c  C. e# d' j/ p

1.7   STM32CubeMX开发平台

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

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

+ t; }  {1 l0 I# N

1.8   STM32H7调试方法

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

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

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

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

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

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


  e! X9 D" ~1 A% r

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

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


, |0 J) F! B- a. X

1.10 总结

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

. q3 K' }( ~6 u: {

. h9 q4 O/ v6 s2 u8 d; R; s5 f
收藏 评论0 发布时间:2021-12-25 10:45

举报

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