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

【经验分享】STM32随记:定时器(Timer)

[复制链接]
STMCU小助手 发布时间:2022-2-2 21:00
定时器(Timer):
分为高级,通用,基本三种.
M3:8个
高级:TIM1,TM8
通用:TIM2~TIM5
基本:TIM6,TIM7
M0:8个
高级:TIM1
通用:TIM2,TIM3,TIM14~TIM17
基本:TIM6
他们的区别:
高级: PWM互补输出,常用于三相电机的驱动.时钟由APB2的输出产生.
通用和基本时钟由APB的输出产生.

* m0 f' _' j  q/ s" I4 I
RCC:Reset and clock control
: l/ u$ [! i* D! G" l
如果要使用一个外设,必须先开启其时钟.
- ^( o1 y2 j: Z1 X  M) Z5 f
关于STM32的Systick时钟源:
0外部时钟源:等于HCLK/8
1内部时钟源:等于HCLK

: u7 }& f& I4 `  j9 T* H
M3有R0-R15的寄存器.
2 u7 B  ]0 t* P: {) A0 C
011119120319089.png
. F- H8 v$ g, N  S( W9 ]' H4 q
R13作为堆栈指针SP.SP有两个,但在同一时刻只能使用其中一个.他们分别是主堆栈指针(MSP)和进程堆栈指针(PSP)
主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程).
进程堆栈指针(PSP):由用户的应用程序代码使用.
R0~R12:为通用寄存器.
R14(LR):连接寄存器.
R15(PC):程序计数寄存器.指向当前的程序地址.如果修改它的值,可改变程序的执行流.
4 G! f* U5 p# g# w) z! m0 L
特殊功能寄存器:

: x# |" U& Z0 Z% p+ i; e 011119132651847.png
3 G9 S  R4 F: ]0 l# t3 o: d! u; h; q7 ~) m
011119173128441.png ( O1 Q2 V7 U' b6 r* f

3 P( E. o; x' v  f. C/ D/ m8 E' P
; R/ k+ a1 ~* i8 Q9 N8 c
特殊功能寄存器只能用MSR,MRS指令来访问,并且他们也没有与之相关联的访问地址.
* }" c; I" P$ X0 D
程序状态寄存器(PSRs或PSR):
内部分为3个子状态寄存器:
1.应用程序 PSR(APSR)
2.中断号 PSR(IPSR)
' f# x, U$ o' n# A' V3.执行 PSR(EPSR)
通过 MRS/MSR 指令,这 3 个 PSRs 即可以单独访问,也可以组合访问(2 个组合,3 个组合都可以)。当使用三合一的方式访问时,应使用名字“xPSR”或者“PSR”。

, Y$ {0 g0 I- K/ l9 W+ l4 \
中断屏蔽寄存器(PRIMASK, FAULTMASK 和 BASEPRI ):
PRIMASK  这是个只有单一比特的寄存器。在它被置 1 后,就关掉所有可屏蔽的异常,只剩下 NMI 和硬 fault 可以响应。它的缺省值是 0,表示没有关中断。
; O7 h  k/ S) l" F  K% `; Q0 DFAULTMASK  这是个只有 1 个位的寄存器。当它置 1 时,只有 NMI 才能响应,所有其它的异常,甚至是硬 fault,也通通闭嘴。它的缺省值也是 0,表示没有关异常。. R6 G# b5 B: |
BASEPRI  这个寄存器最多有 9 位(由表达优先级的位数决定)。它定义了被屏蔽优先级的阈值。当它被设成某个值后,所有优先级号大于等于此值的中断都被关(优先级号越大,优先级越低)。但若被设成 0,则不关闭任何中断,0 也是缺省值。
要访问 PRIMASK, FAULTMASK 以及 BASEPRI,同样要使用 MRS/MSR 指令.
FAULTMASK 就是专门留给 OS 用的.
其实,为了快速地开关中断, CM3 还专门设置了一条 CPS 指令,有 4 种用法 ) [) p* X2 G& t6 Q! O0 Q
    CPSID  I    RIMASK=1 ,     ; 关中断 & @* T: M! P  C
    CPSIE  I    RIMASK=0 ,     ; 开中断
6 {1 j7 L8 J$ R) z7 i/ Z    CPSID  F    ;FAULTMASK=1,    ; 关异常 - _) h- }8 T) k
    CPSIE  F    ;FAULTMASK=0    ; 开异常
当处理器处在线程状态下时,既可以使用特权级,也可以使用用户级;另一方面,handler 模式总是特权级的。在复位后,处理器进入线程模式+特权级。
CONTROL[0]只有在特权级下才能访问。用户级的程序如想进入特权级,通常都是使用一条“系统服务呼叫指令(SVC)”来触发“SVC 异常”,该异常的服务例程可以视具体情况而修改 CONTROL[0]。

0 g1 `1 A; d$ {. U
NVIC(Nested Vectored Interrupt Controller):嵌套向量中断控制器

" r; H1 J/ q* O- d- {
16种系统异常+240个外部中断.
CM3 的所有中断机制都由 NVIC 实现。
虽然 CM3 是支持 240 个外中断的,但具体使用了多少个是由芯片生产商决定。
CM3 还有一个NMI(不可屏蔽中断)输入脚。当它被置为有效(assert)时,NMI 服务例程会无条件地执行。
NMI 可以在任何时间被激活,甚至是在处理器刚刚复位之后。
中断向量表的0 号类型并不是什么入口地址,而是给出了复位后 MSP 的初值。???
必须保证加载到 PC 的数值是奇数(即 LSB=1),用以表明这是在 Thumb 状态下执行。倘若写了 0,则视为企图转入 ARM 模式,CM3 将产生一个 fault 异常。
通过读取 PSP 的值,OS 就能够获取用户应用程序使用的堆栈,进一步地就知道了在发生异常时,被压入寄存器的内容,而且还可以把其它寄存器进一步压栈(使用 STMDB 和 LDMIA 的书写形式)。9 k5 u+ w0 `. ?0 }6 f0 w8 a
OS 还可以修改 PSP,用于实现多任务中的任务上下文切换。
在 CM3 中,在 (FLASH)0 地址处提供 MSP 的初始值,然后紧跟着就是向量表(向量表在以后还可以被移至其它位置——译注)。向量表中的数值是 32 位的地址,而不是跳转指令。向量表的第一个条目指向复位后应执行的第一条指令。
  ^$ L$ o* X1 z! s" }9 x7 ^5 v
经过试验得出:创建的优先级最大的Task最先启动.

* [9 x- q+ ]/ H' z$ B5 E
赞 收藏 评论0 发布时间:2022-2-2 21:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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