首先转载:   STM32定时器的预装载寄存器与影子寄存器之间的关系

本文的说明依据STM32参考手册(RM0008)第10版:
英文:http://www.st.com/stonline/products/literature/rm/13902.pdf
中译文:http://www.stmicroelectronics.com.cn/stonline/mcu/images/STM32_RM_CH_V10_1.pdf

在STM32参考手册的第13、14章中,都有一张定时器的框图,下面是第14章中定时器框图的局部,图中黄色框所示的是auto-reload register,在下面的第14.3.2节"Counter Modes"就解释了auto-reload register的用法。

在图中可以看到auto-reload register这个框有一个阴影,有些其它寄存器也有用阴影表示,如我用蓝色标出的Capture/Compare寄存器;有阴影的寄存器,表示在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器);正如手册上的14.3.1节所说,根据TIMx_CR1寄存器中APRE位的设置,preload register的内容可以随时传送到shadow register,即两者是连通的(permanently),或者在每一次更新事件(UEV)时才把preload register的内容传送到shadow register。

在图中用红线圈起的一个大写的U和一个向下的箭头,表示对应寄存器的影子寄存器可以在发生更新事件时,被更新为它的preload register的内容;而图中用绿线圈起的部分,表示对应的Autoreload register可以产生一个更新事件(U)或更新事件中断(UI)。

设计preload register和shadow register的好处是,所有真正需要起作用的寄存器(shadow register)可以在同一个时间(发生更新事件时)被更新为所对应的preload register的内容,这样可以保证多个通道的操作能够准确地同步。如果没有shadow register,或者preload register和shadow register是直通的,即软件更新preload register时,同时更新了shadow register,因为软件不可能在一个相同的时刻同时更新多个寄存器,结果造成多个通道的时序不能同步,如果再加上其它因素(例如中断),多个通道的时序关系有可能是不可预知的。

(原文件名:STM32_TIM_Auto_Reload_Register.GIF)

个人点评:

1.  有影子寄存器的有3个:分频寄存器PSC,自动重装载ARR,自动捕获CCRx,注意,PSC,ARR,CCRx不是影子寄存器,而是它们对应的“预装载寄存器”;

2、影子寄存器才是真正起作用的寄存器,但是ST没有提供这个寄存器出来,只是提供出与之相对应的预装载寄存器,分别为“PSC,ARR,CCRx”

3、我们用户能接触到,能修改或读取的都是预装载寄存器,ST只是把它们开放出来(影子寄存器并没有开放给用户),其实就是ARR寄存器,如:TIM1->ARR

4、从预装载寄存器ARR传送到影子寄存器,有两种方式,一种是立刻更新,一种是等触发事件之后更新;这两种方式主要取决于寄存器TIMx->CR1中的“APRE”位;

4.1 , APRE=0,当ARR值被修改时,同时马上更新影子寄存器的值;

4.2 , APRE=1,当ARR值被修改时,必须在下一次事件UEV发生后才能更新影子寄存器的值;

5、怎么样马上立刻更改影子寄存器的值,而不是下一个事件;方法如下:

5.1 、将ARPE=0,TIM_ARRPreloadConfig(ch1_Master_Tim, DISABLE );

5.2     在ARPE=1,TIM_ARRPreloadConfig(ch1_Master_Tim, ENABLE); 我们更改完预装载寄存器后,立刻设置UEV事件,即更改EGR寄存的UG位,如下:

TIM1->ARR     =    period-1;     //设置周期
                TIM1->CCR1   =    period>>1;  //设置占空比 50%
                TIM_GenerateEventTIM1,TIM_EventSource_Update); //主动发生UEV事件,UG=1

6、传送过程示意图如下:

STM32定时器的预装载寄存器与影子寄存器之间的关系【转】的更多相关文章

  1. 关于STM32 定时器 PWM 实时调节占空比时,预装载特性

    最近在调试项目的时候遇到一个奇怪的现象:在调试状态下,给定时器捕获比较寄存器赋不同值,能产生不同占空比的波形(图1).反映到器件上也有不同的电压显示,但是在设备运行的时候,就不行了(图2). 图1 图 ...

  2. STM32TIM定时器的影子寄存器

    1.简介 在STM32基本定时器的PSC预分频寄存器和ARR自动装载寄存器都有影子寄存器. 我们可以看到基本定时器功能框图上对应的寄存器有影子~ 2.功能 影子寄存器的存在起到一个缓冲的作用. 设置影 ...

  3. STM32定时器时间的计算方法

    本文出自:https://wenku.baidu.com/view/e3bdfb7601f69e31433294c4.htmlSTM32定时器时间的计算方法STM32中的定时器有很多用法:(一)系统时 ...

  4. stm32定时器学习二——PWM设置

    /* STM32 嵌入式学习入门(5)——PWM的实现 上一篇博文介绍了定时器和PWM的基本的原理,本篇博文从代码层面来介绍PWM的具体实现.同样,还是以博主所用的开发板——正点原子开发板STM32F ...

  5. STM32定时器配置(TIM1-TIM8)高级定时器+普通定时器,定时计数模式下总结

    文章结构: ——> 一.定时器基本介绍 ——> 二.普通定时器详细介绍TIM2-TIM5 ——> 三.定时器代码实例 一.定时器基本介绍  之前有用过野火的学习板上面讲解很详细,所以 ...

  6. STM32定时器配置(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)高级定时器+普通定时器,定时计数模式下总结

    文章结构: ——> 一.定时器基本介绍 ——> 二.普通定时器详细介绍TIM2-TIM5 ——> 三.定时器代码实例 一.定时器基本介绍  之前有用过野火的学习板上面讲解很详细,所以 ...

  7. 关于stm32定时器的理解

    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 表面意思是输出控制极性为高,但是意思是定时器输入0,不反相,输出0: 输出控制极性为 ...

  8. 影子寄存器(shadow register)

    1.以下仅供参考:有阴影的寄存器,表示在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的.但在操作中真正 ...

  9. STM32定时器学习---基本定时器

    STM32F1系列的产品,除了互联网产品外,工作8个,3种定时器,其中一种就是基本定时器.那么STM32单片机的基本定时器如何操作以及编程呢? 下面我们就来详细的了解一下 STM32F1系列的产品,除 ...

随机推荐

  1. ConcurrentLinkedQueue

    我们要实现一个线程安全的队列有两种实现方式,阻塞算法.非阻塞算法.使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁) 或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环 ...

  2. extjs分页

    1.本地分页:设置store的proxy属性为pagingmemoryproxy实例 2.远程分页

  3. mac下多个php版本快速切换的方法

    php是为了快速构建一个web页面而迅速被大家广为接受的开源语言,通过不断发展已经有了很多的php开源系统,满足了目前大部分用户的站点需求.1995年初php诞生到现在已经存在多个版本,并且每个版本都 ...

  4. [py]你真的了解多核处理器吗? 了解多线程

    越来越多的人搞爬虫,设计到多线程爬取, 还有一些机器学习的一些模块也需要这玩意, 感觉自己不会逼格不高. 抽时间赶紧玩一玩这东西, 希望提高对软件的认知和归属感,不要太傻. cpu内部架构参考 你知道 ...

  5. Chrome Input框老是有输入记录的终极解决方案

    尤其是日期框,输入记录都挡住日期弹框了. 浏览器地址栏输入: chrome://settings/autofill,按钮关掉就可以了.

  6. [LeetCode] 53. Maximum Subarray_Easy tag: Dynamic Programming

    Given an integer array nums, find the contiguous subarray (containing at least one number) which has ...

  7. 机器学习理论基础学习1——频率派 VS 贝叶斯派

    频率派 贝叶斯派 theta是个未知的常量,X是随机变量, theta是个随机变量,X是随机变量 MLE最大似然估计 MAE最大后验概率 统计机器学习,优化问题 1)建立模型.概率 2)定义损失函数 ...

  8. matplotlib--设置线条颜色及形状

    一.控制颜色 b--blue c--cyan(青色) g--green k--black m--magenta(紫红色) r--red w--white y--yellow 颜色有三种表示方法,可以用 ...

  9. Selenium - Css Selector 使用方法

    什么是Css Selector? Css Selector定位实际就是HTML的Css选择器的标签定位 工具 Css Selector可以下载火狐浏览器插件,FireFinder 或 FireBug和 ...

  10. windows7下docker配置镜像加速

    原文地址:https://blog.csdn.net/slibra_L/article/details/77505003 1,本文目的:windows7下docker配置镜像加速,下面是具体操作步骤: ...