zoukankan      html  css  js  c++  java
  • Timer_对于MCU,定时器的重要性

    1、写在前面

      本文内容如下:

      推荐一篇ST中文网资料,该资料介绍了定时器的相关知识和使用案例(以ST MCU为主)

      下载地址在ST中文网,(最近)进入主页,都能在首页看到这个消息。

    https://www.stmcu.com.cn/Designresource/design_resource_detail?file_name=STM32+%E5%AE%9A%E6%97%B6%E5%99%A8%E5%9F%BA%E6%9C%AC%E5%8E%9F%E7%90%86%E5%8F%8A%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E4%B9%8B%E5%9F%B9%E8%AE%AD%E8%B5%84%E6%96%99&lang=EN&ver=3.1

      这个资料总共有186页。内容比较多,但讲述的比较全面。

    2、资料的主要内容

      • STM32定时器概述

      • 定时器时基单元

      • 定时器输入捕捉功能

      • 定时器比较输出功能

      • 定时器触发同步与级联

      • 定时器DMA批量传送

      • 定时器产生的触发输出与其它外设的关联

      • STM32F334/STM32F7/STM32L4等新增的定时器功能

      • 案例分享【穿插在上述内容中】

    3、STM32定时器分类

      整体讲, STM32家族的定时器众多,按照核内、核外标准大致分为两部分: 

      核内定时器 + 外设定时器

      • 核内定时器 : Systick

      • 外设定时器: 特定应用定时器+常规定时器

        • 特定应用定时器: LPTIM;RTC;WTD;HRTIM

        • 常规定时器: 基本定时器、通用定时器、高级定时器 【本篇介绍重点】

      按计数器位宽来分:

      • 16位定时器

      • 32位定时器 【TIM2 TIM5】

      • 24位定时器 【Systick】

      常规定时器

      1.基本定时器:几乎没有任何对外输入/输出,常用作时基,实现基本的计数、定时功能。

      2.通用定时器:除了基本定时器的时基功能外,还可对外做输入捕捉、输出比较以及连接其它传感器接口【编码器和霍尔传感器】 。

      3.高级定时器: 此类定时器的功能最为强大,除了具备通用定时器的功能外,还包含一些与电机控制和数字电源应用相关的功能,比方带死区控制的互补信号输出、紧急刹车关断输入控制。

    4、STM32定时器模块

    640?wx_fmt=png

    STM32【通用或高级】 定时器大致分为六个功能单元:

      • 从模式控制单元:负责时钟源、触发信号源的选择;控制计数器的启停、复位、门控等;

      • 时基单元:定时器核心单元。负责时钟源的分频、计数、溢出重装等。

      • 输入单元:为部分的时钟信号、 捕捉信号、 触发信号提供信号源。

      • 比较输出单元:通过对比较寄存器与计数器的数值匹配比较,实现不同输出波形。

      • 触发输出单元:输出触发信号给到其它定时器或外设。

      • 捕捉比较单元: 是输入捕捉或比较输出的公共执行单元。

    从信号链角度大体了解STM32定时器:

    640?wx_fmt=png

    STM32定时器中存在着几种基本的信号: 

      输入信号、 时钟信号、 触发输入信号、 触发输出信号,它们之间相互关联形成相应的信号链,从而衍生出各种定时器的功能。

    5、STM32定时器功能汇总

    (1) 六类功能单元

      【时基、从模式控制、输入、输出、捕捉比较、触发输出】 

    (2)四类信号

      【时钟信号、外部输入信号、触发输入信号、触发输出信号】

    (3) 四类事件

      【更新事件、捕捉、 比较事件、触发事件】

    (4)一大特性

      【影子寄存器的预装载特性】

    这上面的一些内容掌握了,对定时器基本就没多大问题了,资料中也有详细说明。

    6、案例:定时器一使能就进中断的问题

    问题描述: TIMER初始化阶段, 经常有人反馈一使能更新中断就就进中断服务程序?给开发带来些困扰,原因可能是什么?如何解决?

      因为在定时器的初始化代码里有软件更新操作触发了更新事件,并置位了更新中断标志,当使能更新中断时就立刻进入更新中断服务程序。

      在STM32标准库里的TIM_TimeBaseInit( )函数里都有这句代码:

    TIMx->EGR = TIM_PSCReloadMode_Immediate;

    • 在Cube库里的HAL_TIM_Base_Init( )函数里的 函数有这句代码:

    TIMx->EGR = TIM_EGR_UG;

    显然,这两行代码使用到了前面提到的软件更新操作,触发了更新事件,置位更新中断标志。所以我们在使能定时器更新中断之前,可以先做更新中断标志的清除操作。

    说明:资料中提供了很多案例说明,以及分析,我觉得比较好,方便大家理解。请多理解一下这些案例。

    7、时钟源问题思考

      1、几种时钟源?来自何处?

      2、来自TI1fp1与TIF_ED信号差别是什么?

      3、来自TI1/TI2的时钟是否可以直接像内部时钟一样被计数器用来计数?

      4、根据时钟源的介绍,你了解到了几种触发输入信号?

      5、TI3FP4可以作为通道2的输入捕捉信号吗?

      6、TI4FP4可以作为触发信号吗?

    文本转自:https://blog.csdn.net/dp29sym41zygndvf/article/details/85815086

  • 相关阅读:
    BZOJ4827: [Hnoi2017]礼物(FFT 二次函数)
    洛谷P3586 [POI2015]LOG(贪心 权值线段树)
    BZOJ4373: 算术天才⑨与等差数列(线段树 hash?)
    cf711D. Directed Roads(环)
    洛谷P3313 [SDOI2014]旅行(树链剖分 动态开节点线段树)
    洛谷P2045 方格取数加强版(费用流)
    cf900D. Unusual Sequences(容斥 莫比乌斯反演)
    agc007D
    hdu 4287Intelligent IME(简单hash)
    Python Post and Get 登陆web后台系统并抓取页面
  • 原文地址:https://www.cnblogs.com/iriczhao/p/11803256.html
Copyright © 2011-2022 走看看