为什么推荐开启自动重载预装载使能

一、前言

在学习Cube时发现有一个参数auto-reload preload,在实验的时候感受不到设置成Enable和Disable有什么不同,所以查看开发手册了解有什么区别。在这里把学习心得分享给大家。

影子寄存器是真正发挥作用的寄存器,我们修改PSC、ARR都是在操作预装载寄存器,需要根据相关控制位决定是否立即生效或是等待更新事件发生生效。


关键词:影子寄存器、预分频器、预装载寄存器


二、影子寄存器介绍

2.1影子寄存器

影子寄存器在框图表示上下面有一个阴影。这表示在物理上这个寄存器对应2个寄存器:一个是我们可以写入或读出的寄存器,称为预装载寄存器,另一个是我们看不见的、无法真正对其读写操作的,但在使用中真正起作用的寄存器,称为影子寄存器.

数据手册介绍预装载寄存器的内容可以随时传送到影子寄存器,即两者是连通的(permanently),或者在每一次更新事件(UEV)时才把预装载寄存器的内容传送到影子寄存器。

2.2影子寄存器有什么好处?

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

这部分引用自这位博主写的影子寄存器

三、基本定时器框图解读

在这里插入图片描述

预分频器和自动重载寄存器有一个阴影,那个阴影就是手册里面说的影子寄存器。当你启用缓冲功能后,你修改PSC(分频系数)和ARR(计数寄存器)的值不会立马生效,而是当更新事件触发后修改的值才会生效,生效的值会被传递到影子寄存器中。

3.1关闭预装载(ARPE=0)

当ARPE=0时,在这里可以看到自动重载寄存器值发生改变后,自动重载影子寄存器的值立马发生改变,也就是没有预先的过程,而是直接装载。(手册里面没有画自动重载影子寄存器,我这里补画了一个。)
在这里插入图片描述

3.2启用预装载(ARPE=1)

当ARPE=1时,自动重载寄存器的值发生改变后,自动重载影子寄存器的值并没有马上发生改变,而是等到本次时钟周期结束,也就是定时器发生更新事件(计数器的值到达上次设定的值)后才发生改变。
在这里插入图片描述

总结来说,ARPE=1时就像手机卡套餐一样,本月修改,下个月生效。 ARPE=0时,就是立马生效,就比如流量加油包。

四、如果不开启会有什么问题?

假设现在ARR=0xFF,计数器的值为0x36,这时如果突然将ARR改为0x40。那么ARPE=0 or 1会有什么区别?

当ARPE=0时,由于ARR的影子寄存器的值马上被修改为0x40,所以在来4个时钟信号,就会发生定时中断。

当ARPE=1时,ARR不会马上把值传递到影子寄存器,而是等待计数器到达0xFF后再将值传递过去。也就是必须先完成本次计数周期才能更改定时器的时钟周期。不会出现一个计数周期不是0xFF又不是0x40的情况。

这只是一个细节问题,我在应用的时候并没有因为这个细节出现什么大问题。可能是我没有经常修改ARR,感受不到区别。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值