STM32定时器的预装寄存器及影子寄存器PSC—ARR-CCRx

发布者:Whisper123最新更新时间:2022-04-21 来源: eefocus关键字:STM32  定时器  预装寄存器  影子寄存器 手机看文章 扫描二维码
随时随地手机看文章

在谈预装寄存器及影子寄存器的差别前,不妨先对STM32定时器的时基单元做个基本了解。STM32各系列的定时器结构和框架基本是一样的,时基单元也一样。 下面时基单元是以STM32F3系列为参考。


时基单元中的TIMx_PSC、 TIM_ARR两个寄存器加上捕捉比较模块中TIMX_CCR寄存器,它们都可以动态修改。不过他们的修改和生效可能不在同一个时刻,这里便引入了预装寄存器及影子寄存器的概念。要记住一点,真正在TIMER模块中起作用的是影子寄存器。


1、用户程序对TIMx_PSC寄存器值的修改或读取都是操作其预装载寄存器,其修改值只能通过更新事件后才能生效,即从TIMx_PSC的预装寄存器拷贝到TIMx_PSC的影子寄存器。


2、对于TIM_ARR寄存器的修改或读取,是直接操作影子寄存器还是先操作ARR的预装寄存器,等更新事件后拷贝到影子寄存器呢,这跟一个TIMx_CR1寄存器的ARPE位有关。如果ARPE=0,即不使用ARR的预装功能,则修改TIMx_ARR 寄存器的值就是操作影子寄存器,新的ARR的值立即生效。否则,如果ARPE=1,即使用ARR的预装功能,则修改TIMx_ARR 寄存器的值就是操作预装寄存器,直到发生更新事件后,ARR预装载寄存器的值才被拷贝到影子寄存器中。




同样,对于TIMx_CCR的修改和读取跟TIM_ARR寄存器的修改或读取类似。是直接操作CCR影子寄存器还是先操作CCR的预装载寄存器,等更新事件后拷贝到影子寄存器呢,这跟一个TIMx_CCMRx寄存器的OCxPE位有关。如果OCxPE=0,即不使用CCR的预装载功能,则修改TIMx_CCR寄存器的值就是操作影子寄存器,新的CCR的值立即生效。否则,如果OCxPE==1,即使用CCR的预装载功能,则修改TIMx_ARR 寄存器的值就是操作预装载寄存器,要等到发生更新事件后,CCR预装载寄存器的值拷贝到影子寄存器中。


明白了OCxPE位的功用后,当OCxPE==1时,就不难理解为什么做OC比较输出时,发现修改CCR寄存器的值后可能需要最长1个ARR周期的延时后才能生效。

-------------------------------------------------------------------------------------

在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,因为软件不可能在一个相同的时刻同时更新多个寄存器,结果造成多个通道的时序不能同步,如果再加上其它因素(例如中断),多个通道的时序关系有可能是不可预知的。


个人点评: 

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  定时器  预装寄存器  影子寄存器 引用地址:STM32定时器的预装寄存器及影子寄存器PSC—ARR-CCRx

上一篇:stm32 6 step pwm信号生成
下一篇:STM32的定时器有两种捕获模式

推荐阅读最新更新时间:2024-11-12 10:51

2、STM32学习笔记——定时器
根据原子的《STM32不完全手册》。SYSTICK 的时钟固定为HCLK 时钟的1/8,在这里我们选用内部时钟源72M,所以SYSTICK的时钟为9M, 即SYSTICK定时器以9M的频率递减。SysTick 主要包含CTRL、LOAD、VAL、CALIB 等4 个寄存器。SYSTICK的时钟为9M,故1us有9个计数。 SysTick- CTRL: 位段 名称 类型 复位值 描述 16 COUNTFLAG R 0 如果在上次读本寄存器后systick已为0,则该位为1,若读该位自动清零 2 CLKSOURCE RW 0 0:外部时钟源 1:内部时钟 1 TICKINT
[单片机]
STM32之外部中断 EXTI
STM32中断控制线支持19个外部中断/事件请求,每个中断都有对应状态位和独立的触发与屏蔽设置。STM32F103的19个外部中断为: 线0-15:对应GPIO口的输入中断。 线16:连接到PVD输出(掉电检测,掉电时可立即保存重要数据作用)。 线17:连接RTC闹钟事件。 线18:连接到USB唤醒事件 STM32的每个IO口都可以作为外部中断源的输入端,而IO口使用的中断线只有16根,且引脚GPIOx.0~GPIOx.15(x=A~G)分别对应中断线0-15.这样每个中断线对应了7个IO口。如线0对应引脚GPIOA.0/GPIOB.0/GPIOC.0/GPIOD.0/GPIOE.0/GPIOF.0/GPIOG.0,但是每
[单片机]
<font color='red'>STM32</font>之外部中断 EXTI
巧用外设复位修改只读寄存器
有STM32开发者用到STM32F429芯片开发产品,并用到其中的CAN外设。在CAN应用过程中有个专门针对收发出错情况进行次数统计的两个计数器,其值通过错误状态寄存器CAN_ESR中的REC 和TEC 两个字段来体现,CAN硬件会根据错误数据大小做适当响应或处理。 根据寄存器描述得知,TEC 和REC 的值在这个寄存器里面是只读的。而此时的STM32用户有个强烈的需求,就是期望能适时地对这两个出错记录字段做清零。他自己也尝试编写一些代码想让二者清零,均以失败告终,便邮件咨询有无解决办法。 我们在阅读CAN_ESR寄存器内容时倒有个发现,即该寄存器的复位值是0x00000000。 也就是说,芯片每次复位后其值一定是0,
[单片机]
巧用外设复位修改只读<font color='red'>寄存器</font>
STM32的启动过程如何分析
本文分析STM32单片机从上电到运行的过程,目的在于了解STM32单片机从启动到运行的整个过程。 一般我们在使用STM32单片机的时候,都是使用官方提供的驱动文件,移植到自己即将要使用的工程中,移植完成之后再编写自己的逻辑代码,放到main( )函数中,就可以完美的运行起来了。相信很多的人都没有去关注过STM32从启动到运行这个过程都发生了什么,现在就简单分析一些这个过程。 本文以STM32F103为例进行分析。在官方给我们提供的启动文件中,将整个单片机的启动过程要做的事情都已经帮我们做好了,以至于我们在使用这款单片机的时候,几乎可以不会吹灰之力就可以运行起来。STM32F103的启动文件形如: 根据不同的芯片容量,都
[单片机]
<font color='red'>STM32</font>的启动过程如何分析
STM32 SPI DMA 的使用
一是想总结一下SPI总线的特点与注意点,二是总结一下SPI DMA的使用 一、SPI信号线说明   通常SPI通过4个引脚与外部器件相连: MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。 MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。 SCK:串口时钟,作为主设备的输出,从设备的输入 NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为 片选引脚 ,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。 二、原理   MOSI脚相互连接,MISO脚相互连接。这样,数据在主和从之间串行地传输(MSB位在前)。  
[单片机]
<font color='red'>STM32</font> SPI DMA 的使用
STM32中的独立看门狗和窗口看门狗是什么
一、前言 在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况。为了避免这种情况的出现,后期的MCU都集成了看门狗的功能。但是目前看门狗发展到今天基本上分为两大类:独立看门狗和窗口看门狗。 独立看门狗 :使用的是外部时钟,即使主频不工作了,看门狗也能正常工作。只要在到达喂狗时间的上限前喂狗即表示程序是正常的,这点和窗口看门狗是有区别的。另外独立看门狗是独立于整个系统之外的,这也是独立看门狗名字的由来,他有自己独立的时钟,不受整个系统的影响,所以独立看门狗主要用来监控硬件上的错误。 窗口看门狗 :使用芯片内部时钟。喂狗的时间既有上限又有下限,即喂狗太早或者太晚都不行,比如我要求你在0.8s到0.9s内
[单片机]
<font color='red'>STM32</font>中的独立看门狗和窗口看门狗是什么
STM32控制16路舵机控制板PCA9685
介绍 PCA9685 是最新的快速模式 Plus(Fm+)系列中的一员。 Fm+器件可以提供更高的频率 (高达 1MHz)和更频繁(densely populated) 的总线操作(高达 4000pF)。 OE引脚一定要至低使能,或者直接接地 网上Arduino的教程很多,商家给的也是Arduino的驱动文件,那怎么在STM32上用呢? STM32与驱动板的连接 驱动板 STM32 VCC 3.3V GND GND SCL I2C_SCL SDA I2C_SDA OE GND(低电平) V+ 不接 V+可以不接而采用电源接线柱使用外部供电,用5V的充电宝即可 由于PCA9685是使用IIC的,那么如何使用I
[单片机]
HT47定时器应用
HT47定时器应用 include ht47c20.inc data .section 'data' int_count db ? io_count db ? code .section at 0 'code' org 00h jmp start org 04h reti org 08h reti org 0ch reti org 10h jmp timer_int ;--------------------------------- org 20h start: clr i NTC 0 clr intc1 clr adcr.1 set tmrc.5 ;系统时钟 MOV a,0ah MO
[单片机]

推荐帖子

Windows CE下建立数据库的几种方法.pdf
WindowsCE下建立数据库的几种方法.pdfWindowsCE下建立数据库的几种方法.pdf
yuandayuan6999 单片机
看到iphone5的发布,怎么感觉安卓也好,wp也好都大有前途
本帖最后由jameswangsynnex于2015-3-320:00编辑也许是期望值太高了,iphone5的发布,并没有让人感觉那么惊艳,个人认为iphone5依旧是一部好机器,但是确实没有什么亮点。屏幕没有达到720P的效果,屏幕的话应该一直一来一直是苹果机器的优势之一,客观地讲这个分辨率比主流的高端安卓机还差那么点。其他的地方也没有太多可圈可点的地方,本身苹果的做风就是不是安卓机器那样拼硬件指标。功能上也没有太大改进,支持LTE也是大势所趋,2800万的拍摄其实是照片的
wstt 移动便携
软件工程师工资待遇一般怎么样?
先从整个市场大行业来看,软件工程师,程序员属于高薪产业,国家扶持等这个是毋庸置疑的,确认好软件工程师、程序员的行业是非常不错,前景一片光芒。那软件工程师工资一般多少钱,待遇怎么样?待遇好不好?软件工程师的待遇当然不会太差,但是也有部分比较苦逼的程序员和挼案件工程师,拿着不过的工作,每天凌天一两点拖着疲惫的身体回家。这样的程序员也不在少数。其实软件工程师分好多等级,小编笼统的概括为初级,中级,高级三个层次。这三个等级基本上决定的软件工程师的工资等级,但是具体待遇好不好喝公司也有一些
huaqingyuanjian 综合技术交流
TI汽车紧急呼叫和远程信息处理解决方案
本帖最后由dontium于2015-1-2311:47编辑今天给大家介绍TI汽车紧急呼叫和远程信息处理解决方案。配备eCall系统的车辆将可在发生事故时向紧急服务中心拨打电话。客户通过利用包含TI推出的AEC-Q100合格集成电路(IC)在内的完整参考解决方案,能够加快eCall系统的设计。player.youku./player.php/sid/XNjc0MjAxNjQ0/v.swfTI汽车紧急呼叫
德州仪器_视频 模拟与混合信号
英飞凌针对电动工具的高功率、高效率以及高可靠性解决方案 直播中!
点击进入直播直播时间:7月3日(周三)下午14:00直播简介:作为电子工程师,我们一直致力于让设计方案更更安全、更可靠、更稳健,还能使用市面上最流行的技术,比如快充。目前,电动工具的市场增长主要由有线/汽油转换所驱动,随着工具中的电池具备更高压、更高能量密度和轻便的特性,设计挑战也越来越多。为应对市场上的挑战,英飞凌推出了完整的系列解决方案,本期研讨会将逐一为您介绍。奖品设置:直播讲师:黎伟昌|英飞凌大中华区消费、计算
EEWORLD社区 工控电子
《智能驾驶之激光雷达算法详解》5.多传感器SLAM
本书第13章是关于多传感器融合SLAM算法的相关讲解,主要介绍了多传感器融合在智能车辆定位中的应用。由于单一传感器存在工作特性和局限性,处理不了复杂路况,因此多传感器融合实现高精度、稳定、实时的定位成为学术界和工业界的热点之一。多传感器融合SLAM有松耦合和紧耦合两种方式,紧耦合方式精度和稳定性较高,是目前研究重点,如LIC-Fusion算法、基于因子图框架的算法、R2LIVE算法及LVI-SAM算法等。此外,一些学者结合事先构建的高精点云地图提供全局定位信息,如百度的相关研究及
镜花水月000 汽车电子
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved