欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32F030 定时器

程序员文章站 2024-02-25 15:00:09
...

一般定时器(TIM3)(参考文献:STM32F030x4/6/8/C参考手册)

TIM3介绍

TIM3主功能

功能介绍

定时器基本单元(功能图)

STM32F030 定时器

计数器模式

向上计数模式

计数器从0递增到auto-reload value,然后复位到0重新递增,
同时产生一个overflow event

向下计数模式

计数器从auto-reload value递减到0,然后复位到auto-reload value重新递减,
同时产生一个underflow event

中心对齐模式

计数器从0递增到auto-reload value-1,此时产生一个overflow event
然后从auto-reload value递减到1,此时产生一个underflow event
然后复位到0重新递增。

时钟源

定时器时钟源可以是以下几种之一:

  • Internal clock (CK_INT)
  • External clock mode1: external input pin (TIx)
  • External clock mode2: external trigger input (ETR)
  • Internal trigger inputs (ITRx): using one timer as prescaler for another timer

捕获/比较通道

输入捕获模式

PWM输入模式

强制输出模式

输出比较模式

PWM模式

单脉冲模式

在一个外部事件时清除OCxREF信号

编码器接口模式

定时器输入XOR功能

定时器和外部触发器同步

定时器同步

调试模式

TIM3寄存器

定时器初始化示例:

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    /* Time base configuration */
    TIM_TimeBaseStructure.TIM_Period = 65535;
    TIM_TimeBaseStructure.TIM_Prescaler = 0;
  /*CK_CNT = f(CK_PSC)/(TIM_Prescaler+1)*/
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  /*tDTS = TIM_ClockDivision*tCK_INT (dead-time and sampling clock)*/
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

定时器结构体解释:

typedef struct
{
  uint16_t TIM_Prescaler;         /*定时器时钟分频器:0x0000~0xFFFF*/

  uint16_t TIM_CounterMode;       /*计数模式*/

  uint32_t TIM_Period;            /*定时周期,取值范围:0x0000~0xFFFF*/ 

  uint16_t TIM_ClockDivision;     /*!使用数字滤波器时设定定时器时钟和采样时钟间的分频比*/

  uint8_t TIM_RepetitionCounter;  /*!This parameter is valid only for TIM1. */
} TIM_TimeBaseInitTypeDef;  

定时器工作模式

输入捕获模式

输入捕获模式可以用来测量脉冲宽度或者测量频率。 STM32的定时器,除了TIM6和 TIM7,其他定时器都有输入捕获功能。 STM32的输入捕获,简单的说就是通过检测 TIMx_CHx 上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA 等。
比如使用TIM2_CH1来捕获高电平脉宽,也就是要先设置输入捕获为上升沿检测,记录发生上升沿的时候 TIM2_CNT的值。然后配置捕获信号为下降沿捕获,当下降沿到来时,发生捕获,并记录此时的TIM2_CNT值。这样,前后两次TIM2_CNT之差,就是高电平的脉宽,同时 TIM2的计数频率我们是知道的,从而可以计算出高电平脉宽的准确时间。

相关标签: stm32