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

概述STM32

[复制链接]
STMCU-管管 发布时间:2020-11-12 10:48
概述STM32
3 F: G- g2 h0 OCortex-M3缩略语
/ Z0 W& ^0 `" Z. O- u5 M( IAMBA:先进单片机总线架构   ADK:AMBA设计套件4 i/ V7 m; ^6 Y
AHB:先进高性能总线    AHB-AP:AHB访问端口+ `: C+ x- c, T& d5 M9 M8 k7 C& y
APB:先进外设总线    ARM ARM:ARM架构参考手册
  o0 ~  j7 |1 \' l  ~- IASIC:行业领域专用集成电路    ATB :先进跟踪总线6 g/ |9 j; D" z$ n! g. U* f: D
BE8:字节不变式大端模式    CPI:每条指令的周期数
. L4 G& D- d4 H8 Q: @' E& K) BDAP:调试访问端口    DSP:数字信号处理(器)6 |' n. s% z5 G! u
DWT:数据观察点及跟踪    ETM:嵌入式跟踪宏单元# |1 y6 v! y4 v: |' S, e& F5 `
FPB:闪存地址重载及断点  FSR:fault状态寄存器
& ~6 d0 `0 ]/ \4 r4 P. Z# k3 |  mHTM:Core Sight AHB跟踪宏单元; d0 _, e% g* t- D" l9 X" p
ICE:在线仿真器    IDE:集成开发环境
0 ^# m. R+ r  O% [IRQ:中断请求(通常是外中断请求)$ O3 \( A- d+ @6 @( H
ISA:指令系统架构   ISR:中断服务例程" K! _# \9 X; ^8 Q/ E- P
ITM:仪器化跟踪宏单元      $ O( ~$ o; L! L2 D
JTAG:连接点测试行动组(一个关于测试和调试接口的标准)
& S* i# s( P) j( {$ F6 H# S$ XLR:连接寄存器" \3 x0 s; |+ ]9 R& w
LSB:最低有效位3 Y- m# x" o, h
MSB:最高有效位* \% E$ X( q3 W- d; c8 z" Y
LSU:加载存储单元
0 _9 h' Q1 ~; N, kMCU:微控制器单元3 m0 \4 \: F3 m7 E9 U% s8 t0 ]& \* B# A
MPU:存储器保护单元
7 y& b3 O! H8 WMMU:存储器管理单元; z! W) [4 f+ b& g$ w2 B. {
MSP:主堆栈指针. h/ s. D, g3 |9 @$ b2 |6 K2 v' c
NMI:不可屏蔽中断
/ ^& c3 P9 l( Y, h: _/ J' U& FNVIC:嵌套向量中断控制器
; y% A: @. t* i5 LPC:程序计数器
$ l6 z- u3 i. g8 ]# N+ ~. m1 G* A) NPPB:私有外设总线
7 W- r! T- L3 c/ A, N; v' I* w数值0 N+ E, q, _0 Q" G$ u7 C, t! w
1. 4''hC , 0x123  都表示16进制数
( \- `; f' i; w5 l2. #3表示数字3 (e.g., IRQ #3  就是指3号中断) , L  |; u" e: A+ q$ S
3. #immed_12表示一个12位的立即数
  _( L' J* \7 O- q4. 寄存器位。通常是表示一个位段的数值,例如
3 V6 W; O- q: X7 n0 f& q' [bit[15:12]  表示位序号从15往下数到12,这一段的数值。
: [+ G% q# E3 O6 V. A( r
寄存器访问类型
/ W+ C* q- d! X+ {" P2 ?, u/ IR  :表示只读
/ y% @8 \' N! C& y' u- b6 e2 YW:表示只写 $ s( ~, ^+ j. h9 o3 R% L( I; M' j
RW :表示可读可写(前3条好像地球人都知道)
3 ?+ q, S4 C8 T# p+ V8 X6 R+ JR/Wc :表示可读,但是写访问将使之清 0

, m' W) K& y) ]& N- e3 u: FCortex-M3芯片简介
7 P% `" [' J# {# \( }芯片的基本结构如下图:/ n% @: v7 v2 w% H, y0 L
15.png
. E# o; k1 G. W) N( b- ~
    在这个版本中,内核架构首次从单一款式变成3种款式:& E) T/ R. H, B1 j
款式A:设计用于高性能的“开放应用平台”——越来越接近电脑了
9 _, W7 B9 y; g! I. m4 J5 E款式R:用于高端的嵌入式系统,尤其是那些带有实时要求的——又要快又要实时。 8 z2 o4 T6 j6 J* d
款式M:用于深度嵌入的,单片机风格的系统中- B! Y2 `3 r- h1 _4 e
    介绍:. x! h3 r! A& n6 p( r4 V
A:用于高性能的“开放应用平台”,应用在那些需要运行复杂应用程序的处理器。支持大型嵌入式操作系统
! T  D& u$ h- x8 m) oR:用于高端的嵌入式系统,要求实时性的/ L1 h5 p. p, S- ?
M:用于深度嵌入的、单片机风格的系统中% E  C& R" o3 \0 i% v* X
Cortex-M3处理器的舞台
7 W# e2 r7 f4 n    高性能+高代码密度+小硅片面积,使得CM3大面积地成为理想的处理平台,主要应用在以下领域:
% f! y6 E& M; ?$ k! q7 _
低成本单片机
! y2 L: v3 H: x! |/ I0 i1 \+ t! i汽车电子
' c4 a  D+ z6 I9 g. Q数据通信# J5 j$ x. R( d
工业控制
3 R/ c4 G" g1 z- I* l/ h消费类电子产品9 ~1 C! n2 k; V/ Z
Cortex-M3概览
- E  L. H* M) n4 e(1)简介
# t$ w5 z# a8 T    Cortex-M3是一个 32位处理器内核。内部的数据路径是 32位的,寄存器是 32位的,存储器接口也是 32 位的。CM3 采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,从而提升了性能。为实现这个特性, CM3内部含有好几条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一方面,指令总线和数据总线共享同一个存储器空间(一个统一的存储器系统)。   
0 B# U# t: o* z* ^( G    比较复杂的应用可能需要更多的存储系统功能,为此CM3提供一个可选的MPU,而且在需要的情况下也可以使用外部的 cache。另外在CM3中,Both小端模式和大端模式都是支持的。
5 K: a' w5 y3 B: ](2)Cortex-M3的简化图

" y/ H3 m$ V6 J% ^6 ]6 s
16.png
- E; h  \# B- P" }) x3 [

+ S- F2 q0 g- G4 V3 [(3)寄存器组 0 S( d) {9 h  d: z- n: I
    处理器拥有R0-R15的寄存器组,其中R13最为堆栈指针SP,SP有两个,但是同一时刻只能有一个可以看到,这就是所谓的“banked”寄存器。
: ]$ c  A5 ?. l! d: E# {: e" H
17.png
1 U3 P1 D' k1 Q* J% b
R0-R12都是 32位通用寄存器,用于数据操作。但是注意:绝大多数 16位Thumb指令只能访问R0-R7,而 32位 Thumb-2指令可以访问所有寄存器。         ( k# _- M) H4 S/ y) w8 ]
Cortex-M3拥有两个堆栈指针,然而它们是 banked,因此任一时刻只能使用其中的一个。
3 |/ |5 K7 M; w9 k主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)。   
6 p; @- \( [2 [5 w+ J进程堆栈指针(PSP):由用户的应用程序代码使用。堆栈指针的最低两位永远是0,这意味着堆栈总是4字节对齐的。1 `0 q6 m5 ]- h/ [7 g( _: y3 z
R14:连接寄存器--当呼叫一个子程序时,由R14存储返回地址。
5 {" F+ a1 v! sR15:程序计数寄存器--指向当前的程序地址,如果修改它的值,就能改变程序的执行流(这里有很多高级技巧)。     4 T7 b8 g3 g' m: I
Cortex-M3还在内核水平上搭载了若干特殊功能寄存器,包括程序状态字寄存器组(PSRs)、中断屏蔽寄存器组(PRIMASK, FAULTMASK, BASEPRI)、控制寄存器(CONTROL)。
4 ]' }' p! w  E2 E   v- Q- d( B7 f0 e
18.png 7 n) @$ o0 J+ @! `. J- I4 K4 P

" z0 w: h: a# s4 A3 i1 ?    Cortex-M3处理器支持两种处理器的操作模式,还支持两级特权操作。        . x* ^6 w+ n4 |8 J6 A1 {
    两种操作模式分别为:处理者模式和线程模式(thread mode)。引入两个模式的本意,是用于区别普通应用程序的代码和异常服务例程的代码——包括中断服务例程的代码。        
" c4 P" W4 f; k* E# s/ p    Cortex-M3 的另一个侧面则是特权的分级——特权级和用户级。这可以提供一种存储器访问的保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及到要害的操作。处理器支持两种特权级,这也是一个基本的安全模型。
0 S  Z7 E0 k1 J( w/ r
     
3 c. ]! R0 i, i% N: q
19.png # S# D( Y% q3 {
2 Q+ w1 ?: X, A  _3 }2 h
    在 CM3 运行主应用程序时(线程模式),既可以使用特权级,也可以使用用户级;但是异常服务例程必须在特权级下执行。复位后,处理器默认进入线程模式,特权极访问。在特权级下,程序可以访问所有范围的存储器(如果有 MPU,还要 在MPU规定的禁地之外),并且可以执行所有指令。      
4 k" O# \+ f6 L+ Q: H7 l$ G. {    在特权级下的程序可以为所欲为,但也可能会把自己给玩进去——切换到用户级。一旦进入用户级,再想回来就得走“法律程序”了——用户级的程序不能简简单单地试图改写 CONTROL寄存器就回到特权级,它必须先“申诉”:执行一条系统调用指令(SVC)。这会触发SVC异常,然后由异常服务例程(通常是操作系统的一部分)接管,如果批准了进入,则异常服务例程修改 CONTROL寄存器,才能在用户级的线程模式下重新进入特权级。        ; Y. q. f) h' I. w5 a6 w+ d: z! a
    事实上,从用户级到特权级的唯一途径就是异常:如果在程序执行过程中触发了一个异常,处理器总是先切换入特权级,并且在异常服务例程执行完毕退出时,返回先前的状态。
7 J. E) f4 x- x7 a8 E! L" e- o
3 @9 d* o4 P9 `& O4 B/ b
20.png 3 s5 `+ V  B/ D+ p
6 X* f2 y1 C6 p/ h
    通过引入特权级和用户级,就能够在硬件水平上限制某些不受信任的或者还没有调试好的程序,不让它们随便地配置涉及要害的寄存器,因而系统的可靠性得到了提高。进一步地,如果配了 MPU,它还可以作为特权机制的补充——保护关键的存储区域不被破坏,这些区域通常是操作系统的区域。 9 a' x5 J6 k" t* I
(4)内建的嵌套向量中断控制器  2 E1 s" ?# I, x2 P' B
    Cortex-M3 在内核水平上搭载了一颗中断控制器——嵌套向量中断控制器 NVIC(Nested Vectored Interrupt Controller)。它与内核有很深的“亲密接触”——与内核是紧耦合的。NVIC提供如下的功能:
* {; e1 x9 Z& B& Y6 Q, p! N4 c可嵌套中断支持

) ~1 g' y  {+ v+ |- S向量中断支持 0 B% f" J( A2 l; V2 {2 f2 J" C
动态优先级调整支持
$ q7 G( M$ I8 _1 r, ]/ A0 H中断延迟大大缩短 7 i; `9 ?# D# C# `
中断可屏蔽
% A+ p4 W6 }/ `+ G/ ]" K- t! C/ {, t' Q7 a7 U
    可嵌套中断支持:  可嵌套中断支持的作用范围很广,覆盖了所有的外部中断和绝大多数系统异常。外在表现是,这些异常都可以被赋予不同的优先级。当前优先级被存储在 xPSR 的专用字段中。当一个异常发生时,硬件会自动比较该异常的优先级是否比当前的异常优先级更高。如果发现来了更高优先级的异常,处理器就会中断当前的中断服务例程(或者是普通程序),而服务新来的异常——即立即抢占。         4 ~' f8 P; z& F; s5 H
    向量中断支持:  当开始响应一个中断后,CM3会自动定位一张向量表,并且根据中断号从表中找出 ISR的入口地址,然后跳转过去执行。不需要像以前的 ARM那样,由软件来分辨到底是哪个中断发生了,也无需半导体厂商提供私有的中断控制器来完成这种工作。这么一来,中断延迟时间大为缩短。
, `' F9 U7 T; [# i5 ](5)存储器映射( o5 c3 D) V& g( J6 R) G
    Cortex-M3支持4G存储空间,具体分配如下图:8 M7 Y, u" o; k+ X
5 ~1 j* M/ A1 o: h* H7 q$ I8 }
21.png
6 F8 C9 s4 V) P* H
2 ?' n4 Y$ S; \* V
(6)总线接口3 q2 z$ [' U$ C1 _
    Cortex-M3内部有若干个总线接口,以使 CM3能同时取址和访内(访问内存),它们是: ) d8 d) H( B/ }6 o: H
指令存储区总线(两条)

. J' U2 K5 {: M# a- _0 T! J系统总线 " O" O! ]$ Y. U* J3 R; i( K9 m
私有外设总线
$ f# ^/ K7 W1 j$ G+ \- c5 @    有两条代码存储区总线负责对代码存储区的访问,分别是 I-Code 总线和 D-Code 总线。前者用于取指,后者用于查表等操作,它们按最佳执行速度进行优化。       % ]" v6 d* W/ S* B, n& ]
    系统总线用于访问内存和外设,覆盖的区域包括 SRAM,片上外设,片外 RAM,片外扩展设备,以及系统级存储区的部分空间。      
! ~4 b: ^% V0 ]  a8 K! ~    私有外设总线负责一部分私有外设的访问,主要就是访问调试组件。它们也在系统级存储区。 1 h# [1 [8 l5 {
(7)存储器保护单元(MPU)      Z1 l* o# {6 G+ J+ S5 c1 G" ~
    Cortex-M3有一个可选的存储器保护单元。配上它之后,就可以对特权级访问和用户级访问分别施加不同的访问限制。当检测到犯规(violated)时,MPU 就会产生一个 fault 异常,可以由fault异常的服务例程来分析该错误,并且在可能时改正它。       ! a; p7 Q$ v: \* `' F
    MPU 有很多玩法。最常见的就是由操作系统使用 MPU,以使特权级代码的数据,包括操作系统本身的数据不被其它用户程序弄坏。MPU在保护内存时是按区管理的。它可以把某些内存 region设置成只读,从而避免了那里的内容意外被更改;还可以在多任务系统中把不同任务之间的数据区隔离。一句话,它会使嵌入式系统变得更加健壮,更加可靠。
+ A! _, i) Q6 |' `; a; W& B/ Y    很多行业标准,尤其是航空的,就规定了必须使用 MPU来行使保护职能。
2 b4 G& L2 l8 C5 ^7 k(8)Cortex-M3的简评
) H6 p7 ~4 b5 Y% c9 A5 g高性能
+ G( i3 \: U5 b$ Y- P
    许多指令都是单周期的——包括乘法相关指令。并且从整体性能上,Cortex-M3比得过绝大多数其它的架构。指令总线和数据总线被分开,取值和访内可以并行不悖。
1 ?: i! C. [* B' v6 Q    Thumb-2的到来告别了状态切换的旧世代,再也不需要花时间来切换于 32位 ARM状态和16位Thumb状态之间了。这简化了软件开发和代码维护,使产品面市更快。
& G* Y2 @1 p% R5 R  f5 C1 p; _3 B    Thumb-2指令集为编程带来了更多的灵活性。许多数据操作现在能用更短的代码搞定,这意味着 Cortex-M3的代码密度更高,也就对存储器的需求更少。
7 F4 L; z: {; T& o- _( B    取指都按 32位处理。同一周期最多可以取出两条指令,留下了更多的带宽给数据传输。
: |; d' n! _% X! I2 f    Cortex-M3的设计允许单片机高频运行(现代半导体制造技术能保证 100MHz以上的速度)即使在相同的速度下运行,CM3的每指令周期数(CPI)也更低,于是同样的 MHz下可以做更多的工作;另一方面,也使同一个应用在 CM3上需要更低的主频。
3 q# X: ?" n, ~- v' u$ T- L4 o先进的中断处理功能
) c- m$ {. _+ g" n8 L
    内建的嵌套向量中断控制器支持240条外部中断输入。向量化的中断功能大大减少了中断延迟,因为不在需要软件去判断中断源。中断的嵌套也是在硬件水平上实现的,不需要软件代码来实现。
  ]& P0 Z) n$ W* m  b* p8 I. z, M    Cortex-M3在进入异常服务例程时,自动压栈了 R0-R3, R12, LR, PSR 和PC,并且在返回时自动弹出它们,这多清爽!既加速了中断的响应,也再不需要汇编语言代码了。
7 C+ C4 q) S* {. M1 W2 M8 j    NVIC支持对每一路中断设置不同的优先级,使得中断管理极富弹性。最粗线条的实现也至少要支持 8级优先级,而且还能动态地被修改。3 d1 q+ _" A. C8 w) v$ x
    优化中断响应还有两招,它们分别是“咬尾中断机制”和“晚到中断机制”。 5 j, U. `. [8 Z/ x0 O# }' T
    有些需要较多周期才能执行完的指令,是可以被中断-继续的——就好比它们是一串指令一样。这些指令包括加载多个寄存器(LDM),存储多个寄存器(STM),多个寄存器参与的PUSH,以及多个寄存器参与的 POP。
7 J+ q" h! V( [; y9 a2 Z    除非系统被彻底地锁定,NMI(不可屏蔽中断)会在收到请求的第一时间予以响应。对很多安全-关键(safety-critical)的应用,NMI都是必不可少的(如化学反应即将失控时的紧急停机)。
" j0 K1 P# _0 T% \* ]# f' p总结! l, }% @* W7 u
    以上内容总结了STM32的一些基本知识,希望能为STM32的学习打好基础。
4 N6 B+ @* v( B+ S! U5 L
收藏 评论0 发布时间:2020-11-12 10:48

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版