前言:
影子寄存器是什么?听起来很高级很神秘的样子
其实它的作用很简单,那么下面就是我对影子寄存器的见解
以基本定时为例,因为框图最为简单。在预装载功能/影子寄存器这块所有定时器都是相同作用!
定时器框图:
说明:
定时器中PSC预分频器,ARR自动重载寄存器,CCR捕获比较寄存器都有影子寄存器,而PSC预分频器的影子寄存器是默认开启的。
在编程时对PSC,ARR,CCR写入值,这些直接写入的我称之为预装载寄存器(本体寄存器)
由框图可知它们背后都有个阴影,其实背后是一个寄存器,我们通常称为影子寄存器
它们之间会有某种作用关系,我们称之为预装载功能(缓存功能)
预装载寄存器:
预装载寄存器是编写代码时配置和修改定时器参数的寄存器(PSC,ARR,CCR)。当我们对PSC,ARR,CCR写值操作时,实际上是在修改预装载寄存器(本体)的值。预装载寄存器具有缓冲作用,时器运行的情况下允许在不影响当前定时器运行,提前准备好新的参数值。
预装载功能可以通过软件开启或关闭(PSC硬件默认开启)。当预装载功能关闭时,写入预装载寄存器的值会立即更新到影子寄存器,从而使修改立即生效。
而当预装载功能开启时,写入预装载寄存器的值会在产生更新事件时,才更新到影子寄存器并生效。
影子寄存器:
影子寄存器是真正控制定时器运行的寄存器(真正起作用)。它包含了定时器当前运行的参数值(PSC,ARR,CCR)。
影子寄存器是“不可见”的,即无法直接读写影子寄存器的值,而只能通过预装载寄存器来间接修改。
影子寄存器的设计目的是为了确保定时器运行的稳定性和可靠性。通过引入影子寄存器,可以避免在修改定时器参数时产生的瞬间不稳定状态,从而确保定时器能够按照预期的方式运行。
总结:
预装载寄存器和影子寄存器在STM32等微控制器的定时器机制中扮演着不同的角色。预装载寄存器用于代码配置和修改定时器参数(PSC,ARR,CCR),而影子寄存器则直接关系了定时器当前运行的参数值(PSC,ARR,CCR)。
预装载寄存器具有缓冲作用,允许在不影响当前定时器运行的情况下提前准备好新的参数值;而影子寄存器则确保了定时器运行的稳定性和可靠性