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

概述STM32

[复制链接]
STMCU-管管 发布时间:2020-11-12 10:48
概述STM32
; t# J( U8 y, I/ M" p9 P( fCortex-M3缩略语7 K8 E2 C2 U- L$ M+ _
AMBA:先进单片机总线架构   ADK:AMBA设计套件$ W$ X! }9 r. ]. z! D
AHB:先进高性能总线    AHB-AP:AHB访问端口, Z" M9 q  {9 x% m. m
APB:先进外设总线    ARM ARM:ARM架构参考手册
: m. W) V; ]4 kASIC:行业领域专用集成电路    ATB :先进跟踪总线
5 Y6 I3 `3 [& k  lBE8:字节不变式大端模式    CPI:每条指令的周期数) k8 t; H6 u6 ^$ w! u6 j8 D
DAP:调试访问端口    DSP:数字信号处理(器)( J3 {( x6 @' R' d* p
DWT:数据观察点及跟踪    ETM:嵌入式跟踪宏单元
5 J0 {1 L/ @* v# S$ wFPB:闪存地址重载及断点  FSR:fault状态寄存器9 g7 F/ A; V5 e1 Y
HTM:Core Sight AHB跟踪宏单元/ ^$ l1 v# I& E* s& F+ c, x# c
ICE:在线仿真器    IDE:集成开发环境
' U6 [) S4 a- z" n# v- JIRQ:中断请求(通常是外中断请求)4 @0 n+ c0 O2 f6 g7 V5 p* z
ISA:指令系统架构   ISR:中断服务例程  \5 b& G: ^# Z) ^7 `, D
ITM:仪器化跟踪宏单元      $ ~9 R7 u& j9 [
JTAG:连接点测试行动组(一个关于测试和调试接口的标准)
) J$ b* ?! Y1 p" m9 X: SLR:连接寄存器; F2 M1 I6 |- o
LSB:最低有效位
; ^/ [9 d6 n! K8 ]+ B: r0 @MSB:最高有效位; x0 v/ @1 q3 s- g
LSU:加载存储单元
/ N. ~. ~* w% G8 q/ _; x2 H; G/ B2 TMCU:微控制器单元
# ]  Y: u4 i- [$ k. u# wMPU:存储器保护单元  h; U) I$ X) e; w  y6 K) O& j; c
MMU:存储器管理单元
0 P& s  ]* H) A( hMSP:主堆栈指针6 o2 G9 u' p! c
NMI:不可屏蔽中断
& }$ o. n" y: \- jNVIC:嵌套向量中断控制器
# x, s2 C! T2 l7 w1 s0 }  ^PC:程序计数器, U! k3 N7 v, X6 n. |
PPB:私有外设总线4 m0 Y% h) b& d/ U
数值* f0 L9 b  j1 J9 \
1. 4''hC , 0x123  都表示16进制数 " M) P7 W4 D# g; g2 P
2. #3表示数字3 (e.g., IRQ #3  就是指3号中断)
0 S0 S7 Z2 S7 S6 b0 }" \4 d3. #immed_12表示一个12位的立即数   X& }; {# O1 h" W6 x0 o. v4 R
4. 寄存器位。通常是表示一个位段的数值,例如
9 d4 E1 t- u: L2 U6 @1 C: b# abit[15:12]  表示位序号从15往下数到12,这一段的数值。
, U" k% |2 H- a/ @! u  \
寄存器访问类型; s* f+ D0 Q; }% o) o9 q
R  :表示只读
! M/ j  ^. P1 T/ cW:表示只写 . N4 O/ ~5 x0 {$ W" a
RW :表示可读可写(前3条好像地球人都知道) - [. ~. ?$ P7 v8 s
R/Wc :表示可读,但是写访问将使之清 0
! T) v, W  q  t7 r5 E
Cortex-M3芯片简介' _' h. B+ j* E
芯片的基本结构如下图:
- p8 B# G. R1 ]8 \1 `1 j
15.png
9 k5 G7 _0 m5 y& ^1 [2 B2 |
    在这个版本中,内核架构首次从单一款式变成3种款式:' P+ X  O9 B4 l# Z4 l
款式A:设计用于高性能的“开放应用平台”——越来越接近电脑了
! u$ \  K5 \% z- T& l7 D6 |款式R:用于高端的嵌入式系统,尤其是那些带有实时要求的——又要快又要实时。 * {( g4 I6 M( h  A+ e
款式M:用于深度嵌入的,单片机风格的系统中
3 i2 r: Y8 l# b  x: P    介绍:7 j: \9 i* g! G4 c& Q
A:用于高性能的“开放应用平台”,应用在那些需要运行复杂应用程序的处理器。支持大型嵌入式操作系统
7 T/ H3 T$ v) e3 ~. R( Z2 j( z! HR:用于高端的嵌入式系统,要求实时性的
" R, s. C1 C. c, V8 E# d3 }M:用于深度嵌入的、单片机风格的系统中3 ~4 T2 @1 W3 O, K& S; |
Cortex-M3处理器的舞台( {) {  y* N8 e( V% E* @
    高性能+高代码密度+小硅片面积,使得CM3大面积地成为理想的处理平台,主要应用在以下领域:

! |6 c% \4 M2 Z+ q7 u* C低成本单片机! u: ~1 t  O" |% U8 m
汽车电子. ^# Q  o, q. j' P3 {3 h; D
数据通信7 r4 B1 E+ a5 C- E5 X3 `6 |) w# w
工业控制
) }  r4 Q! q  C/ N! \4 H- ~消费类电子产品
- H% f$ U; ]$ ~, _" Q4 mCortex-M3概览
  ?+ F- U# S; ?+ g% y(1)简介
8 T( w# m' ]% @  a. O8 Y    Cortex-M3是一个 32位处理器内核。内部的数据路径是 32位的,寄存器是 32位的,存储器接口也是 32 位的。CM3 采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,从而提升了性能。为实现这个特性, CM3内部含有好几条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一方面,指令总线和数据总线共享同一个存储器空间(一个统一的存储器系统)。   - r% V6 z- {9 A3 y% k5 w
    比较复杂的应用可能需要更多的存储系统功能,为此CM3提供一个可选的MPU,而且在需要的情况下也可以使用外部的 cache。另外在CM3中,Both小端模式和大端模式都是支持的。
" I( E) c  H. z. c9 q5 _3 E(2)Cortex-M3的简化图
2 i  h0 U( x: p; `7 n" T2 q3 @
16.png
; H, A! T& G& x- h. @  g/ o, s
1 ^- {: m: z, c+ \! ^$ {
(3)寄存器组
3 a0 d. ?# C% M2 S  b; ^    处理器拥有R0-R15的寄存器组,其中R13最为堆栈指针SP,SP有两个,但是同一时刻只能有一个可以看到,这就是所谓的“banked”寄存器。, \$ }( E: l7 _% k0 Z* N/ j) r
17.png
* K; O. _: T5 u  s
R0-R12都是 32位通用寄存器,用于数据操作。但是注意:绝大多数 16位Thumb指令只能访问R0-R7,而 32位 Thumb-2指令可以访问所有寄存器。         
, B5 a9 {' y" X3 ^' zCortex-M3拥有两个堆栈指针,然而它们是 banked,因此任一时刻只能使用其中的一个。
1 s) O: D8 |: ], I% n; x主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)。   
8 Q9 f  C  P& f9 l' R进程堆栈指针(PSP):由用户的应用程序代码使用。堆栈指针的最低两位永远是0,这意味着堆栈总是4字节对齐的。
. Q/ H  L+ K  L' [! C. r' oR14:连接寄存器--当呼叫一个子程序时,由R14存储返回地址。
5 y7 ~$ D) m, B4 h# Z/ ]: QR15:程序计数寄存器--指向当前的程序地址,如果修改它的值,就能改变程序的执行流(这里有很多高级技巧)。     1 q$ U* \: l9 s) x- `0 ^8 H6 k
Cortex-M3还在内核水平上搭载了若干特殊功能寄存器,包括程序状态字寄存器组(PSRs)、中断屏蔽寄存器组(PRIMASK, FAULTMASK, BASEPRI)、控制寄存器(CONTROL)。! L8 l2 n+ i/ l# [( M3 z0 B$ c
* t. U) ~9 l( p+ n7 L0 g2 i( e
18.png * b+ w# h" X. O

9 x2 @$ ]" H- p" F) Z1 g7 A5 a    Cortex-M3处理器支持两种处理器的操作模式,还支持两级特权操作。        ) S$ E& ]4 y0 }7 r4 y3 \4 j
    两种操作模式分别为:处理者模式和线程模式(thread mode)。引入两个模式的本意,是用于区别普通应用程序的代码和异常服务例程的代码——包括中断服务例程的代码。        
1 l3 r4 f! P3 A8 z9 k    Cortex-M3 的另一个侧面则是特权的分级——特权级和用户级。这可以提供一种存储器访问的保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及到要害的操作。处理器支持两种特权级,这也是一个基本的安全模型。
  M( ?4 }& d% ^# s5 O/ w" S' L
     
3 E, r; c/ F/ |$ o1 b1 a
19.png
1 A9 L, D$ N6 d  t
; [. Q' T. A3 F$ Z
    在 CM3 运行主应用程序时(线程模式),既可以使用特权级,也可以使用用户级;但是异常服务例程必须在特权级下执行。复位后,处理器默认进入线程模式,特权极访问。在特权级下,程序可以访问所有范围的存储器(如果有 MPU,还要 在MPU规定的禁地之外),并且可以执行所有指令。       8 X0 H! i+ ~& p/ L
    在特权级下的程序可以为所欲为,但也可能会把自己给玩进去——切换到用户级。一旦进入用户级,再想回来就得走“法律程序”了——用户级的程序不能简简单单地试图改写 CONTROL寄存器就回到特权级,它必须先“申诉”:执行一条系统调用指令(SVC)。这会触发SVC异常,然后由异常服务例程(通常是操作系统的一部分)接管,如果批准了进入,则异常服务例程修改 CONTROL寄存器,才能在用户级的线程模式下重新进入特权级。        5 T1 n5 c' N; d9 Z
    事实上,从用户级到特权级的唯一途径就是异常:如果在程序执行过程中触发了一个异常,处理器总是先切换入特权级,并且在异常服务例程执行完毕退出时,返回先前的状态。
+ u% K. Y3 @9 ~/ S/ o$ s* \3 P& {
# T( h- T$ R$ O1 b/ p& T- j8 W3 ?
20.png
' u$ w/ o4 E. w9 ?
' i  `! I' i; J8 j1 O  K6 Q
    通过引入特权级和用户级,就能够在硬件水平上限制某些不受信任的或者还没有调试好的程序,不让它们随便地配置涉及要害的寄存器,因而系统的可靠性得到了提高。进一步地,如果配了 MPU,它还可以作为特权机制的补充——保护关键的存储区域不被破坏,这些区域通常是操作系统的区域。
9 ?$ ?* q8 A' D& r/ H! r# E(4)内建的嵌套向量中断控制器  
, T; V8 S+ S+ Z5 ]+ ]    Cortex-M3 在内核水平上搭载了一颗中断控制器——嵌套向量中断控制器 NVIC(Nested Vectored Interrupt Controller)。它与内核有很深的“亲密接触”——与内核是紧耦合的。NVIC提供如下的功能: 4 k, r+ i" D9 T
可嵌套中断支持
% i% X7 x& t4 }- o) u( t0 s- {+ e
向量中断支持
1 ^/ a# m, V4 Q' s- ?) N动态优先级调整支持
) N* a# `! _! O% ]- I8 \3 S4 \中断延迟大大缩短 ! m' U* |# B2 ?, {( _) h9 {5 f
中断可屏蔽1 g/ ?3 d8 Z9 ~! _. i" Z: }
9 _+ A1 k3 M! l4 \
    可嵌套中断支持:  可嵌套中断支持的作用范围很广,覆盖了所有的外部中断和绝大多数系统异常。外在表现是,这些异常都可以被赋予不同的优先级。当前优先级被存储在 xPSR 的专用字段中。当一个异常发生时,硬件会自动比较该异常的优先级是否比当前的异常优先级更高。如果发现来了更高优先级的异常,处理器就会中断当前的中断服务例程(或者是普通程序),而服务新来的异常——即立即抢占。         
0 l0 P7 |- Z/ A1 C    向量中断支持:  当开始响应一个中断后,CM3会自动定位一张向量表,并且根据中断号从表中找出 ISR的入口地址,然后跳转过去执行。不需要像以前的 ARM那样,由软件来分辨到底是哪个中断发生了,也无需半导体厂商提供私有的中断控制器来完成这种工作。这么一来,中断延迟时间大为缩短。  k" f, S% Y: g1 }- ^0 I
(5)存储器映射
! k( u; v0 ]# j6 u2 U5 Z    Cortex-M3支持4G存储空间,具体分配如下图:: a  r! I7 E: o$ O$ E
% S* i  k1 K% J4 l  l& L
21.png $ v) }/ w5 h. J# P  D5 N+ t- {, R

. \$ X2 Q0 I9 r" I/ Q8 ?( n1 S(6)总线接口! w7 V3 W$ v$ e5 q4 S$ b
    Cortex-M3内部有若干个总线接口,以使 CM3能同时取址和访内(访问内存),它们是: * K+ u! v8 V" u) p* m2 t8 W
指令存储区总线(两条)
; r3 u0 L( H% O+ a# T
系统总线
# ]9 `7 c$ Q+ d8 e/ G私有外设总线
  q; A7 J# B3 D8 q+ ?# C4 y    有两条代码存储区总线负责对代码存储区的访问,分别是 I-Code 总线和 D-Code 总线。前者用于取指,后者用于查表等操作,它们按最佳执行速度进行优化。       % r* Y7 ]" W' U! a" I& L* Z
    系统总线用于访问内存和外设,覆盖的区域包括 SRAM,片上外设,片外 RAM,片外扩展设备,以及系统级存储区的部分空间。       + q  l% P$ o  {- B4 C$ E- T
    私有外设总线负责一部分私有外设的访问,主要就是访问调试组件。它们也在系统级存储区。 ( a' N. u9 P* A) I8 o# W7 f
(7)存储器保护单元(MPU)    * z( Q! P. y/ g4 m3 e
    Cortex-M3有一个可选的存储器保护单元。配上它之后,就可以对特权级访问和用户级访问分别施加不同的访问限制。当检测到犯规(violated)时,MPU 就会产生一个 fault 异常,可以由fault异常的服务例程来分析该错误,并且在可能时改正它。       ' [/ [/ K# @6 ]5 {
    MPU 有很多玩法。最常见的就是由操作系统使用 MPU,以使特权级代码的数据,包括操作系统本身的数据不被其它用户程序弄坏。MPU在保护内存时是按区管理的。它可以把某些内存 region设置成只读,从而避免了那里的内容意外被更改;还可以在多任务系统中把不同任务之间的数据区隔离。一句话,它会使嵌入式系统变得更加健壮,更加可靠。
2 G2 Z3 n' O' A; `    很多行业标准,尤其是航空的,就规定了必须使用 MPU来行使保护职能。  j; y1 s) m3 {) k
(8)Cortex-M3的简评' j- n' K# D. Y, ?
高性能
+ i+ j. E& [3 U5 l2 i8 r; X
    许多指令都是单周期的——包括乘法相关指令。并且从整体性能上,Cortex-M3比得过绝大多数其它的架构。指令总线和数据总线被分开,取值和访内可以并行不悖。
2 y/ f; I$ M; E0 O$ y    Thumb-2的到来告别了状态切换的旧世代,再也不需要花时间来切换于 32位 ARM状态和16位Thumb状态之间了。这简化了软件开发和代码维护,使产品面市更快。 " W" F. G- ]3 C
    Thumb-2指令集为编程带来了更多的灵活性。许多数据操作现在能用更短的代码搞定,这意味着 Cortex-M3的代码密度更高,也就对存储器的需求更少。
1 G$ t- Y" u! `3 x0 X    取指都按 32位处理。同一周期最多可以取出两条指令,留下了更多的带宽给数据传输。 & J, p! ~; T/ U2 K' ?: }; Q
    Cortex-M3的设计允许单片机高频运行(现代半导体制造技术能保证 100MHz以上的速度)即使在相同的速度下运行,CM3的每指令周期数(CPI)也更低,于是同样的 MHz下可以做更多的工作;另一方面,也使同一个应用在 CM3上需要更低的主频。- L% H# u! ^0 L" c; @! c' X
先进的中断处理功能

) q; i+ D8 o; I" N& E8 w, w6 L    内建的嵌套向量中断控制器支持240条外部中断输入。向量化的中断功能大大减少了中断延迟,因为不在需要软件去判断中断源。中断的嵌套也是在硬件水平上实现的,不需要软件代码来实现。, H# }; p: u1 h  e+ u
    Cortex-M3在进入异常服务例程时,自动压栈了 R0-R3, R12, LR, PSR 和PC,并且在返回时自动弹出它们,这多清爽!既加速了中断的响应,也再不需要汇编语言代码了。
) q$ S! @) i3 R" P% A8 B    NVIC支持对每一路中断设置不同的优先级,使得中断管理极富弹性。最粗线条的实现也至少要支持 8级优先级,而且还能动态地被修改。
; W& n) Y- H7 M/ @# V    优化中断响应还有两招,它们分别是“咬尾中断机制”和“晚到中断机制”。 / j1 w3 i) g4 m2 n. J0 B
    有些需要较多周期才能执行完的指令,是可以被中断-继续的——就好比它们是一串指令一样。这些指令包括加载多个寄存器(LDM),存储多个寄存器(STM),多个寄存器参与的PUSH,以及多个寄存器参与的 POP。
4 F& T6 C; G- q    除非系统被彻底地锁定,NMI(不可屏蔽中断)会在收到请求的第一时间予以响应。对很多安全-关键(safety-critical)的应用,NMI都是必不可少的(如化学反应即将失控时的紧急停机)。
0 L9 x$ M$ o# `. W总结
" K6 E) g" K: N' d    以上内容总结了STM32的一些基本知识,希望能为STM32的学习打好基础。
8 p8 E* ~0 ^" V9 m
赞 收藏 评论0 发布时间:2020-11-12 10:48

举报

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