• TIM1计数模式


    向上计数模式

    在向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器的内容),然后重新从0开始计数并且产生一个计数器溢出事件。
    如果使用了重复计数器功能,在向上计数达到设置的重复计数次数(TIMx_RCR)时,产生更新事件(UEV);否则每次计数器溢出时才产生更新事件。
    在TIMx_EGR寄存器中(通过软件方式或者使用从模式控制器)设置UG位也同样可以产生一个更新事件。
    设置TIMx_CR1寄存器中的UDIS位,可以禁止更新事件;这样可以避免在向预装载寄存器中写入新值时更新影子寄存器。在UDIS位被清’0’之前,将不产生更新事件。但是在应该产生更新事件时,计数器仍会被清’0’,同时预分频器的计数也被清0(但预分频器的数值不变)。此外,如果
    设置了TIMx_CR1寄存器中的URS位(选择更新请求),设置UG位将产生一个更新事件UEV,但硬件不设置UIF标志(即不产生中断或DMA请求)。这是为了避免在捕获模式下清除计数器时,同时产生更新和捕获中断。
    当发生一个更新事件时,所有的寄存器都被更新,硬件同时(依据URS位)设置更新标志位(TIMx_SR寄存器中的UIF位)。
    ● 重复计数器被重新加载为TIMx_RCR寄存器的内容。
    ● 自动装载影子寄存器被重新置入预装载寄存器的值(TIMx_ARR)。
    ● 预分频器的缓冲区被置入预装载寄存器的值(TIMx_PSC寄存器的内容)。
    下图给出一些例子,当TIMx_ARR=0x36时计数器在不同时钟频率下的动作。
    关注
    分频因子为1时,一个CK_PSC脉冲一个CK_CNT
    分频因子为2时,2个CK_PSC脉冲一个CK_CNT
    预分频器可以将计数器的时钟频率按1到65536之间的任意值分频
    在这里插入图片描述
    在这里插入图片描述
    当ARPE=0时的更新事件(TIMx_ARR没有预装入)在这里插入图片描述
    当ARPE=1时的更新事件(预装入了TIMx_ARR)在这里插入图片描述
    向下计数模式
    在向下模式中,计数器从自动装入的值(TIMx_ARR计数器的值)开始向下计数到0,然后从自动装入的值重新开始并且产生一个计数器向下溢出事件。
    如果使用了重复计数器,当向下计数重复了重复计数寄存器(TIMx_RCR)中设定的次数后,将产生更新事件(UEV),否则每次计数器下溢时才产生更新事件。
    在TIMx_EGR寄存器中(通过软件方式或者使用从模式控制器)设置UG位,也同样可以产生一个更新事件。
    设置TIMx_CR1寄存器的UDIS位可以禁止UEV事件。这样可以避免向预装载寄存器中写入新值时更新影子寄存器。因此UDIS位被清为0之前不会产生更新事件。然而,计数器仍会从当前自动加载值重新开始计数,并且预分频器的计数器重新从0开始(但预分频系数不变)。
    此外,如果设置了TIMx_CR1寄存器中的URS位(选择更新请求) ,设置UG位将产生一个更新事件UEV但不设置UIF标志(因此不产生中断和DMA请求),这是为了避免在发生捕获事件并清除计数器时,同时产生更新和捕获中断。
    当发生更新事件时,所有的寄存器都被更新,并且(根据URS位的设置)更新标志位(TIMx_SR寄存器中的UIF位)也被设置。
    ● 重复计数器被重置为TIMx_RCR寄存器中的内容
    ● 预分频器的缓存器被加载为预装载的值(TIMx_PSC寄存器的值)。
    ● 当前的自动加载寄存器被更新为预装载值(TIMx_ARR寄存器中的内容)。
    注:自动装载在计数器重载入之前被更新,因此下一个周期将是预期的值。
    以下是一些当TIMx_ARR=0x36时,计数器在不同时钟频率下的操作例子。
    在这里插入图片描述
    在这里插入图片描述

    中央对齐模式(向上/向下计数)

    在中央对齐模式,计数器从0开始计数到自动加载的值(TIMx_ARR寄存器)−1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件;然后再从0开始重新计数。
    在此模式下,不能写入TIMx_CR1中的DIR方向位。它由硬件更新并指示当前的计数方向。
    可以在每次计数上溢和每次计数下溢时产生更新事件;也可以通过(软件或者使用从模式控制器)设置TIMx_EGR寄存器中的UG位产生更新事件。然后,计数器重新从0开始计数,预分频器也重新从0开始计数。
    设置TIMx_CR1寄存器中的UDIS位可以禁止UEV事件。这样可以避免在向预装载寄存器中写入新值时更新影子寄存器。因此UDIS位被清为0之前不会产生更新事件。然而,计数器仍会根据当前自动重加载的值,继续向上或向下计数。
    此外,如果设置了TIMx_CR1寄存器中的URS位(选择更新请求) ,设置UG位将产生一个更新事件UEV但不设置UIF标志(因此不产生中断和DMA请求),这是为了避免在发生捕获事件并清除计数器时,同时产生更新和捕获中断。
    当发生更新事件时,所有的寄存器都被更新,并且(根据URS位的设置)更新标志位(TIMx_SR寄存器中的UIF位)也被设置。
    ● 重复计数器被重置为TIMx_RCR寄存器中的内容
    ● 预分频器的缓存器被加载为预装载(TIMx_PSC寄存器)的值。
    ● 当前的自动加载寄存器被更新为预装载值(TIMx_ARR寄存器中的内容)。
    注:如果因为计数器溢出而产生更新,自动重装载将在计数器重载入之前被更新,因此下一个周期将是预期
    的值(计数器被装载为新的值)。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    重复计数器

    “时基单元”解释了计数器上溢/下溢时更新事件(UEV)是如何产生的,然而事实上它只能在重复计数达到0的时候产生。这个特性对产生PWM信号非常有用。
    这意味着在每N次计数上溢或下溢时,数据从预装载寄存器传输到影子寄存器(TIMx_ARR自动重载入寄存器, TIMx_PSC 预装载寄存器,还有在比较模式下的捕获 / 比较寄存器(TIMx_CCRx),N是TIMx_RCR重复计数寄存器中的值。
    重复计数器在下述任一条件成立时递减:
    ● 向上计数模式下每次计数器溢出时,
    ● 向下计数模式下每次计数器下溢时,
    ● 中央对齐模式下每次上溢和每次下溢时。虽然这样限制了PWM的最大循环周期为128,但它能够在每个PWM周期2次更新占空比。在中央对齐模式下,因为波形是对称的,如果每个PWM周期中仅刷新一次比较寄存器,则最大的分辨率为2xTck。重复计数器是自动加载的,重复速率是由TIMx_RCR寄存器的值定义(参看图)。当更新事件由
    软件产生(通过设置TIMx_EGR 中的UG位)或者通过硬件的从模式控制器产生,则无论重复计数器的值是多少,立即发生更新事件,并且TIMx_RCR寄存器中的内容被重载入到重复计数器。在这里插入图片描述

  • 相关阅读:
    月薪20k的软件测试工程师都要具备什么能力?你跟大佬的差距在哪?
    数据结构:队列详解 c++信息学奥赛基础知识讲解
    rocksdb中测试工具Benchmark.sh用法(基准、性能测试)
    【苹果】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
    一、PHP环境搭建[phpstorm]
    代谢组学文献分享:地中海饮食、血浆代谢组和心血管疾病风险
    云上亚运:所使用的高新技术,你知道吗?
    面向专业开发者的Python IDE——PyCharm,各个版本如何抉择?
    SIMULIA-Simpack 2022x新功能介绍
    基于北方苍鹰优化的BP神经网络(分类应用) - 附代码
  • 原文地址:https://blog.csdn.net/weixin_42914004/article/details/127661629