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

STM32总结概述

[复制链接]
flyingstar 发布时间:2025-8-6 14:22
Cortex-M3缩略语
AMBA:先进单片机总线架构   ADK:AMBA设计套件5 t# z" \% q- w) G* p
AHB:先进高性能总线    AHB-AP:AHB访问端口8 ]' L+ Y" ~# |8 U8 L, ~4 l; q# T
APB:先进外设总线    ARM ARM:ARM架构参考手册1 j( B1 j4 c' B' o; F! z8 V
ASIC:行业领域专用集成电路    ATB :先进跟踪总线
6 t7 c3 U9 ?$ `1 s& gBE8:字节不变式大端模式    CPI:每条指令的周期数* H: @2 h, i! M1 b, a" F
DAP:调试访问端口    DSP:数字信号处理(器)2 H! O$ K& }) `' \* `
DWT:数据观察点及跟踪    ETM:嵌入式跟踪宏单元
$ W+ z8 E( I- z( Q" ]FPB:闪存地址重载及断点  FSR:fault状态寄存器: ^0 @: Z9 d" f7 e
HTM:Core Sight AHB跟踪宏单元# o/ q; X0 E) K, s( l- f
ICE:在线仿真器    IDE:集成开发环境
! b& X1 d, T& Z4 i) xIRQ:中断请求(通常是外中断请求)$ F- K! o0 _9 ~) F3 ]
ISA:指令系统架构   ISR:中断服务例程, I1 J0 H6 [; }2 _( Y
ITM:仪器化跟踪宏单元      JTAG:连接点测试行动组(一个关于测试和调试接口的标准)
$ G$ p0 `" E: m& i, z0 |) s8 ^LR:连接寄存器5 w7 z& E9 e5 b* E7 U6 I
LSB:最低有效位
" F  S  B- p+ y4 {0 Q2 Y+ j: vMSB:最高有效位
% k0 ^. O4 P$ P3 S2 NLSU:加载存储单元
5 m; }$ f3 k% ?$ \) YMCU:微控制器单元
' y, N$ ]0 j  S4 s; \4 NMPU:存储器保护单元4 q/ Z' F" |6 U# }+ E  P" i" g
MMU:存储器管理单元
6 `7 a* X) z7 L* |" LMSP:主堆栈指针! ^- S" f& ~9 e, u. b6 V
NMI:不可屏蔽中断: B1 X& d/ c' _. m
NVIC:嵌套向量中断控制器6 ^+ G# O0 j* W# C8 f
PC:程序计数器
+ d* x) L) z3 \3 L; M" j" CPPB:私有外设总线4 g( B1 c! |7 }& F: U

' z: m" f" ^" K5 J数值
- I# e+ V$ y8 o& k1. 4''hC , 0x123  都表示16进制数
3 U- S! k* C% |1 U2 C- x5 a$ x2. #3表示数字3 (e.g., IRQ #3  就是指3号中断)
' y! ], ^3 O1 _) K+ J$ \' f( n3. #immed_12表示一个12位的立即数 + y5 K# B7 ?* S; f* ~1 B6 H( |3 H
4. 寄存器位。通常是表示一个位段的数值,例如   u- K1 B0 c6 ]; c% }
bit[15:12]  表示位序号从15往下数到12,这一段的数值。

8 P6 X9 ?' C1 D! L/ ?* T3 m  G
8 o0 V8 V1 q) A# E; ~2 [寄存器访问类型8 h$ V: `4 l! N( \5 M+ ^7 k
R  :表示只读 % x( e  E, j/ |! ~1 N2 b
W:表示只写
. y4 V; q1 A4 v7 H! i9 \- Q! Q+ URW :表示可读可写(前3条好像地球人都知道)
3 L2 S; V0 z" gR/Wc :表示可读,但是写访问将使之清 0

! s" W& D0 q. ~+ T* E' N$ a1 ]! B: t! K' m, r& |6 ]& P  y6 E+ t4 x, g
Cortex-M3芯片简介- Q) l& H# C5 Y0 h1 G) I2 a
/ I2 n8 d. g% S3 X) D
芯片的基本结构如下图:
6 z6 `8 ^# p& X) s( ? 微信图片_20250806141918.jpg 1 y( D, ~3 }/ Z, y5 o
    在这个版本中,内核架构首次从单一款式变成3种款式:
. a, Q) h2 f0 S' S
  • 款式A:设计用于高性能的“开放应用平台”——越来越接近电脑了
  • 款式R:用于高端的嵌入式系统,尤其是那些带有实时要求的——又要快又要实时。
  • 款式M:用于深度嵌入的,单片机风格的系统中# L# w" H# b" F( y$ b; {. x! O* n( T
    介绍:5 w' n  H  w9 @/ F* Y$ q2 \
  • A:用于高性能的“开放应用平台”,应用在那些需要运行复杂应用程序的处理器。支持大型嵌入式操作系统
  • R:用于高端的嵌入式系统,要求实时性的
  • M:用于深度嵌入的、单片机风格的系统中
    5 H) o2 @1 o" C
Cortex-M3处理器的舞台    3 {) Q8 y" B( Q) T# d
高性能+高代码密度+小硅片面积,使得CM3大面积地成为理想的处理平台,主要应用在以下领域:  Z+ |: [; B7 Z( Z( _
  • 低成本单片机
  • 汽车电子
  • 数据通信
  • 工业控制
  • 消费类电子产品
    1 P; d# M! l% A2 T& |8 g  ~3 a
Cortex-M3概览
" O1 M2 J9 Q' \3 l6 Q(1)简介   
: h! f( ]0 U* v- y- A7 z2 \1 H2 _Cortex-M3是一个 32位处理器内核。内部的数据路径是 32位的,寄存器是 32位的,存储器接口也是 32 位的。CM3 采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,从而提升了性能。为实现这个特性, CM3内部含有好几条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一方面,指令总线和数据总线共享同一个存储器空间(一个统一的存储器系统)。       8 I3 }3 q& O/ v) M8 r
2 M. t1 ~8 r7 J
8 |1 V8 O3 l/ v4 Z. X! Y
比较复杂的应用可能需要更多的存储系统功能,为此CM3提供一个可选的MPU,而且在需要的情况下也可以使用外部的 cache。另外在CM3中,Both小端模式和大端模式都是支持的。
  `% l2 L; t8 b1 w, [8 |
7 y2 b: b' @" G

2 F" }  g% Q  B. D: e& G' h' y. ^(2)Cortex-M3的简化图
4 N! s1 r1 K" x* P0 i 微信图片_20250806141914.jpg
9 F! T  ?9 F* k(3)寄存器组 & D" a4 A8 l" O* C3 [+ o' m

. p9 z+ u9 s6 W9 X# V  s    处理器拥有R0-R15的寄存器组,其中R13最为堆栈指针SP,SP有两个,但是同一时刻只能有一个可以看到,这就是所谓的“banked”寄存器。
! h2 R4 _, U: M; G& U$ n5 } 微信图片_20250806141910.jpg
$ z6 o4 u9 Q  f
  • R0-R12都是 32位通用寄存器,用于数据操作。但是注意:绝大多数 16位Thumb指令只能访问R0-R7,而 32位 Thumb-2指令可以访问所有寄存器。
  • Cortex-M3拥有两个堆栈指针,然而它们是 banked,因此任一时刻只能使用其中的一个。
  • 主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)。
  • 进程堆栈指针(PSP):由用户的应用程序代码使用。堆栈指针的最低两位永远是0,这意味着堆栈总是4字节对齐的。
  • R14:连接寄存器--当呼叫一个子程序时,由R14存储返回地址。
  • R15:程序计数寄存器--指向当前的程序地址,如果修改它的值,就能改变程序的执行流(这里有很多高级技巧)。
  • Cortex-M3还在内核水平上搭载了若干特殊功能寄存器,包括程序状态字寄存器组(PSRs)、中断屏蔽寄存器组(PRIMASK, FAULTMASK, BASEPRI)、控制寄存器(CONTROL)。
    2 r, k+ a" y" b$ t! B& Q4 j
微信图片_20250806141906.jpg     # o: ]! Y/ X& }, ~% q
Cortex-M3处理器支持两种处理器的操作模式,还支持两级特权操作。    ' l* u4 W# m6 c% d6 A6 M
        * v2 E% d( _& g3 k# ^  R
两种操作模式分别为:处理者模式和线程模式(thread mode)。引入两个模式的本意,是用于区别普通应用程序的代码和异常服务例程的代码——包括中断服务例程的代码。           
6 T" w0 j5 ~, @  @9 S! O* |. X) F& M' b$ i' \6 @
5 C9 o' l- o, _& }4 s9 T
Cortex-M3 的另一个侧面则是特权的分级——特权级和用户级。这可以提供一种存储器访问的保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及到要害的操作。处理器支持两种特权级,这也是一个基本的安全模型。+ J$ I3 i! y+ ?# n
微信图片_20250806141903.jpg         
8 E( S. o; Q4 q8 r2 I! S: r8 P  n在 CM3 运行主应用程序时(线程模式),既可以使用特权级,也可以使用用户级;但是异常服务例程必须在特权级下执行。复位后,处理器默认进入线程模式,特权极访问。在特权级下,程序可以访问所有范围的存储器(如果有 MPU,还要 在MPU规定的禁地之外),并且可以执行所有指令。   5 b7 X  R& }# x( @0 B
        6 I: t0 n  W: ~1 f' G/ j: d
在特权级下的程序可以为所欲为,但也可能会把自己给玩进去——切换到用户级。一旦进入用户级,再想回来就得走“法律程序”了——用户级的程序不能简简单单地试图改写 CONTROL寄存器就回到特权级,它必须先“申诉”:执行一条系统调用指令(SVC)。这会触发SVC异常,然后由异常服务例程(通常是操作系统的一部分)接管,如果批准了进入,则异常服务例程修改 CONTROL寄存器,才能在用户级的线程模式下重新进入特权级。   
7 i2 ]4 p5 x6 v7 J1 Y         + q4 Q* U& V& i, i  s5 Q
事实上,从用户级到特权级的唯一途径就是异常:如果在程序执行过程中触发了一个异常,处理器总是先切换入特权级,并且在异常服务例程执行完毕退出时,返回先前的状态。
' M# w4 u8 _. ~8 N- D4 }" C2 W$ L 微信图片_20250806141858.jpg    
3 m; I( j9 u& D. J通过引入特权级和用户级,就能够在硬件水平上限制某些不受信任的或者还没有调试好的程序,不让它们随便地配置涉及要害的寄存器,因而系统的可靠性得到了提高。进一步地,如果配了 MPU,它还可以作为特权机制的补充——保护关键的存储区域不被破坏,这些区域通常是操作系统的区域。 - W) l5 \8 H. K3 o
+ Z) ~# O2 \; h, G! o1 _/ X
# a3 j/ H: n$ e; Z6 I" w- |6 l; q
(4)内建的嵌套向量中断控制器     
  Q9 g4 D. j6 v! g# v9 k8 u4 }9 t. g2 C! i2 j) L1 h

8 t  t( e+ G3 {, r0 v$ HCortex-M3 在内核水平上搭载了一颗中断控制器——嵌套向量中断控制器 NVIC(Nested Vectored Interrupt Controller)。它与内核有很深的“亲密接触”——与内核是紧耦合的。NVIC提供如下的功能:
  • 可嵌套中断支持
  • 向量中断支持
  • 动态优先级调整支持
  • 中断延迟大大缩短
  • 中断可屏蔽# Q9 n$ Q7 B; v9 b
    可嵌套中断支持:  可嵌套中断支持的作用范围很广,覆盖了所有的外部中断和绝大多数系统异常。外在表现是,这些异常都可以被赋予不同的优先级。当前优先级被存储在 xPSR 的专用字段中。当一个异常发生时,硬件会自动比较该异常的优先级是否比当前的异常优先级更高。如果发现来了更高优先级的异常,处理器就会中断当前的中断服务例程(或者是普通程序),而服务新来的异常——即立即抢占。         
8 J1 g. g+ \8 ~7 k) E+ G) x' {) _& x
: ]* @0 O; O, V9 e
    向量中断支持:  当开始响应一个中断后,CM3会自动定位一张向量表,并且根据中断号从表中找出 ISR的入口地址,然后跳转过去执行。不需要像以前的 ARM那样,由软件来分辨到底是哪个中断发生了,也无需半导体厂商提供私有的中断控制器来完成这种工作。这么一来,中断延迟时间大为缩短。: c& {4 [3 {$ O, N$ p' s: u

( }$ q- m1 M0 y; U9 `

& C8 o$ p$ x; V) a(5)存储器映射   
7 ~' E/ K( w# `% P# D. s" BCortex-M3支持4G存储空间,具体分配如下图:
微信图片_20250806141852.png
(6)总线接口    Cortex-M3内部有若干个总线接口,以使 CM3能同时取址和访内(访问内存),它们是:
  • 指令存储区总线(两条)
  • 系统总线
  • 私有外设总线
    . K- j9 g& O2 f8 Y
    有两条代码存储区总线负责对代码存储区的访问,分别是 I-Code 总线和 D-Code 总线。前者用于取指,后者用于查表等操作,它们按最佳执行速度进行优化。       & S/ R) T0 Q4 |9 w7 B* I
    系统总线用于访问内存和外设,覆盖的区域包括 SRAM,片上外设,片外 RAM,片外扩展设备,以及系统级存储区的部分空间。          
7 p& S2 c. ~- x7 W8 O2 A9 C私有外设总线负责一部分私有外设的访问,主要就是访问调试组件。它们也在系统级存储区。 0 P) D4 m& b& Q& j9 F
- T& K/ T+ d! g; q" e1 ^, m( @

8 l( R' w6 q, y9 X9 ]2 Q  c(7)存储器保护单元(MPU)       
3 |- d* O  N) @( \+ v3 t/ E Cortex-M3有一个可选的存储器保护单元。配上它之后,就可以对特权级访问和用户级访问分别施加不同的访问限制。当检测到犯规(violated)时,MPU 就会产生一个 fault 异常,可以由fault异常的服务例程来分析该错误,并且在可能时改正它。           MPU 有很多玩法。最常见的就是由操作系统使用 MPU,以使特权级代码的数据,包括操作系统本身的数据不被其它用户程序弄坏。MPU在保护内存时是按区管理的。它可以把某些内存 region设置成只读,从而避免了那里的内容意外被更改;还可以在多任务系统中把不同任务之间的数据区隔离。一句话,它会使嵌入式系统变得更加健壮,更加可靠。   
9 k+ R5 h" n" q9 C" X4 x$ v( l1 T6 ?) A4 Y( `% L7 h
' c- j% N1 R# _
很多行业标准,尤其是航空的,就规定了必须使用 MPU来行使保护职能。0 c- F8 Q9 l/ M9 M& t4 J8 b2 Q, N$ ?. h

1 ~8 y+ S7 G( ~' r+ r' Y
5 x/ [% D. o1 [+ B" O
(8)Cortex-M3的简评
  • 高性能
    ' g) F9 ]/ `& Y* x
    许多指令都是单周期的——包括乘法相关指令。并且从整体性能上,Cortex-M3比得过绝大多数其它的架构。指令总线和数据总线被分开,取值和访内可以并行不悖。    
% n8 G! n. B# |4 p' j2 AThumb-2的到来告别了状态切换的旧世代,再也不需要花时间来切换于 32位 ARM状态和16位Thumb状态之间了。这简化了软件开发和代码维护,使产品面市更快。       E- ^# i9 b! C* I& ?5 ^
Thumb-2指令集为编程带来了更多的灵活性。许多数据操作现在能用更短的代码搞定,这意味着 Cortex-M3的代码密度更高,也就对存储器的需求更少。    
6 G2 k: s0 n$ G: p* I取指都按 32位处理。同一周期最多可以取出两条指令,留下了更多的带宽给数据传输。     $ b  }; g; k& ~; J+ u
Cortex-M3的设计允许单片机高频运行(现代半导体制造技术能保证 100MHz以上的速度)即使在相同的速度下运行,CM3的每指令周期数(CPI)也更低,于是同样的 MHz下可以做更多的工作;另一方面,也使同一个应用在 CM3上需要更低的主频。
  • 先进的中断处理功能
    2 Y' J- K* `' X9 b2 ~: k
    内建的嵌套向量中断控制器支持240条外部中断输入。向量化的中断功能大大减少了中断延迟,因为不在需要软件去判断中断源。中断的嵌套也是在硬件水平上实现的,不需要软件代码来实现。   
% @2 X5 B- r6 VCortex-M3在进入异常服务例程时,自动压栈了 R0-R3, R12, LR, PSR 和PC,并且在返回时自动弹出它们,这多清爽!既加速了中断的响应,也再不需要汇编语言代码了。    % ^0 u9 M+ h4 }1 ?- u& E8 z
NVIC支持对每一路中断设置不同的优先级,使得中断管理极富弹性:STM32外部中断实例。最粗线条的实现也至少要支持 8级优先级,而且还能动态地被修改。
3 U. d( p; ~, [- T    优化中断响应还有两招,它们分别是“咬尾中断机制”和“晚到中断机制”。
    8 D# O  Z7 k3 W( }) w
有些需要较多周期才能执行完的指令,是可以被中断-继续的——就好比它们是一串指令一样。这些指令包括加载多个寄存器(LDM),存储多个寄存器(STM),多个寄存器参与的PUSH,以及多个寄存器参与的 POP。   
4 f- W5 X: }9 ?' h* m, s7 y3 M' m除非系统被彻底地锁定,NMI(不可屏蔽中断)会在收到请求的第一时间予以响应。对很多安全-关键(safety-critical)的应用,NMI都是必不可少的(如化学反应即将失控时的紧急停机)。+ S8 o9 \& g. |( S

- L6 h) r$ [# M* R( C* Z8 y总结    % g4 S, @3 R+ g2 R) r' _
$ k! Z" H: J- U/ t# a' a0 b3 y, B

' }: M) {2 w9 k1 Y以上内容总结了STM32的一些基本知识,希望能为STM32的学习打好基础。
& K5 x& j7 Q  P; I! s4 T$ j( x
赞 收藏 评论0 发布时间:2025-8-6 14:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版