STM32F030 定时器
程序员文章站
2024-02-25 15:00:09
...
一般定时器(TIM3)(参考文献:STM32F030x4/6/8/C参考手册)
TIM3介绍
TIM3主功能
功能介绍
定时器基本单元(功能图)
计数器模式
向上计数模式
计数器从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的计数频率我们是知道的,从而可以计算出高电平脉宽的准确时间。
上一篇: STM32F030 IAP升级编写总结