关于STM32影子寄存器和预装载寄存器和TIM_ARRPreloadConfig

发布者:心灵捕手最新更新时间:2022-02-21 来源: eefocus关键字: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,因为软件不可能在一个相同的时刻同时更新多个寄存器,结果造成多个通道的时序不能同步,如果再加上其它因素(例如中断),多个通道的时序关系有可能是不可预知的。


个人点评: 

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影子寄存器和预装载寄存器和TIM_ARRPreloadConfig

上一篇:定时器的时钟
下一篇:STM32 timer input filter

推荐阅读最新更新时间:2024-11-01 16:02

STM32自带的CRC32软件计算
看了很多朋友贴出了CRC的计算代码,还是不明白CRC怎么算,这不重要了,可用就行。在此帖上码表和查表法,代码经过验证,和STM32的CRC结果一致,以后要用到CRC32时就到此贴来找。 uint32 Crc32Table = { 0x00000000,0x04C11DB7,0x09823B6E,0x0D4326D9,0x130476DC,0x17C56B6B,0x1A864DB2,0x1E475005, 0x2608EDB8,0x22C9F00F,0x2F8AD6D6,0x2B4BCB61,0x350C9B64,0x31CD86D3,0x3C8EA00A,0x384FBDBD, 0x4C11DB70,0x48D0C6C7,0x459
[单片机]
STM32笔记(五)RTC的初始化
这次是RTC的笔记:) RTC这东西晕晕的,因为一个模块涉及到了RTC,BKP,RCC多个模块,之间的关系让人有点模糊 入门的知识请大家看手册,我来总结: 总之,RTC只是个能靠电池维持运行的32位定时器over! 所以,使用时要注意以下问题: 1. 上电后要检查备份电池有没有断过电。如何检查? 恩,RTC的示例代码中已经明示: 往备份域寄存器中写一个特殊的字符,备份域寄存器是和RTC一起在断电下能保存数据的。 上电后检查下这个特殊字符是否还存在,如果存在,ok,RTC的数据应该也没丢,不需要重新配置它 如果那个特殊字符丢了,那RTC的定时器数据一定也丢了,那我们要重新来配置RTC了 这个过程包括时钟使能、R
[单片机]
STM32之RTC例程
[单片机]
<font color='red'>STM32</font>之RTC例程
STM32中USART接收中断问题使单片机死机
问题描述: 在使用USART做串口通讯时,我只把接收中断打开,并设置抢占优先级为最低一个级别,而接收中断上一个优先级处理事情比较多,可能占用了2ms时间。当我使用9600波特率往下位机发送数据,速度非常快,就是一直按回车发送!问题就出来,不到1分钟时间,通讯没有反应了,死机了。USART配置代码如下: void uart_config(void) { USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = UART_GetBaud(BaudRate); USART_InitStructure.USART_WordLength = USA
[单片机]
stm32 定时器重映射
void TIM3_GPIOB5_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE); GPIO_AFIODeInit(); //将重映射恢复为初始值 //在程序中只可以调用一次,不然之前的设置就取消了 GPIO_PinRemapConfig(GPIO_Par ti alRemap
[单片机]
STM32:定时器中断与优先级
前言 利用HAL库开发实现功能:使用TIM2实现定时,每隔1秒实现双闪功能 一、基础知识 1、常见的定时器资源 1.系统滴答定时器 SysTick 集成在Cortex M3内核的定时器,主要目的是给RTOS提供时钟节拍做时间基准。比如HAL库函数中的HAL_Delay()就是基于这个定时器开发的。如果要做嵌入式Linux的相关项目,要和上位机进行通讯的话,这个函数就不能用了。 2.看门狗定时器 WatchDog 3.实时时钟 RTC 4.基本定时器 TIM6、TIM7 5.通用定时器 TIM2、TIM3、TIM4、TIM5 在基本定时器的基础上,实现输出比较、输入捕获、PWM生成、单脉冲模式输出等功能。这类定时
[单片机]
<font color='red'>STM32</font>:定时器中断与优先级
STM32学习笔记-L298N驱动模块-电机
新手上路,十几天的学习感觉弯路走了不少,所以打算把学习的知识记录下来,和大家分享,不要嫌弃我,我从非常新手的角度来写。 1、STM32F103RCT6 我也是第一次学习单片机,选择了正点原子家的迷你版,学习到后面才发现什么板子都差不多,只要学会看手册就好了。推荐论坛:CSDN、正点原子官网、51黑论坛等。可以跟着正点原子提供的手把手视频教程把基本的实验做出来再去学习更深入的原理,就能得到事半功倍的效果。不要因为自己不会而畏怯,一旦遇到不懂的知识就马上查资料,还是不懂就去问,好了,感想有点多了。 2、L298N电机驱动模块 以后不要只认为淘宝是买东西的,上面可以找到的资料也很多。解释一下: 马达A输出(OUT1和OUT
[单片机]
<font color='red'>STM32</font>学习笔记-L298N驱动模块-电机
STM32复习笔记(十)LCD的介绍和使用方法
一、TFTLCD驱动原理-TFTLCD简介: (1)介绍TFTLCD: TFTLCD即薄膜晶体管液晶显示器。它与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。 TFTLCD具有:亮度好、对比度高、层次感强、颜色鲜艳等特点。是目前最主流的LCD显示器。广泛应用于电视、手机、电脑、平板等各种电子产品。 (2)2.8寸 TFTLCD接口说明(16位80并口): (3)TFTLCD 16位80并口驱动简介: (4)ILI9341 驱动时序: 重点时序: 读ID低电平
[单片机]
<font color='red'>STM32</font>复习笔记(十)LCD的介绍和使用方法
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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