zoukankan      html  css  js  c++  java
  • 定时器45事

    简单回忆今日所学:

    1、定时器有两种——系统节拍定时器和可编程的高级控制定时器

    系统节拍定时器(Systick) 高级控制定时器(TIM)

    24位的系统定时器SysTick,它从重装载值向下计数到0,在下一个时钟边沿重装载LOAD寄存器中的值。

    由一个16位的自动装载计数器组成,它由一个可编程的预分配器驱动。

    STK_CTRL控制和状态寄存器:

    CLKSOURCE(AHB,AHB/8)

    COUNTFLAG(计数器计数到0就返回1)

    ENABLE(使能计数器)

    TICKINT(按照该值可选地发布SysTick待决)

    注:当技术从1到0的时候,SysTick和COUNTFLAG才被激活

    STK_LOAD重装载值寄存器:(24位)

    STK_VAL当前值存储器

    控制寄存器CR1:

    CEN(Counter enable)

    DIR(Direction)0/1=向上、下

    CMS(Center-aligned mode selection) 0边沿对齐,1/2/3中心对齐

    ARPE(Auto-reload preload enable)自动重装载预装载使能

    状态寄存器SR:

    事件发生寄存器:软件伪造硬件信号进行调试

    计数器:CNT

    预分频器:PSC(prescaler)

    自动重装载寄存器:ARR

    分频AHB,AHB/8,AHB是固定的72MHz(这个跟时钟源那边的分频有什么区别和联系吗?) 时钟可以在1-2的16次方(65536)之间任意分频

    难点:

    1、RELOAD值按照其用途计算:

    要产生周期为N个处理器周期的多次定时,使用RELOAD值N-1。比如,所需要的SysTick中断是每3个时钟脉冲,设置RELOAD为2。0->2->1->0,在计数1->0的时候,异常请求才被激活。

    要在延迟N个周期之后发出单次SysTick中断,使用RELOAD的值为N。比如,所需的SysTick中断是在3个脉冲周期之后,设置RELOAD为3。3->2->1->0,正好是过了3个信号周期。

    2、自动重装载寄存器的缓冲设计方式:

    ARR实际上有两个寄存器,在软件端可以看见一个,在硬件端可以看到另外一个(Prescaler buffer),软件端的值可以随时在代码里面写入,但是硬件端的buffer只有在有更新事件产生使,才会被装载进去,真正地影响到我们分频周期,也就是说硬件信号控制着何时拿去用。

    3、计数器的使能打开之后,不是立刻就开始计数,而是过了一个脉冲周期之后才开始,这是为了同步。

    4、分频器的值设置为0的时候不分频,设置为1的时候二分频,设置为0xFFFF,实际上是2的16次方分频,计数频率最低。

    5、当分频值固定,也就是计数周期固定的时候,不需要打开自动重装载的使能。

    6、更新事件:上溢、下溢、触发、初始化

      触发事件:开始、停止、初始化、触发

  • 相关阅读:
    学姐学长们的测试
    loli的测试——搜索
    搜索-2
    单调队列
    乱搞题 (不知道怎么分类)
    对拍及数据生成
    搜索-1
    矩形重叠
    拼写单词
    java笔记
  • 原文地址:https://www.cnblogs.com/dadidelearning/p/9912449.html
Copyright © 2011-2022 走看看