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

stm32f4定时器基本应用

程序员文章站 2022-03-13 23:34:32
...

stm32f4定时器基本应用

所谓的基本应用,就是只用到了它的计数功能和中断功能,没用到外部输入功能、PWM输出功能以及一些其它高级的功能。

一、定时器时钟源

stm32f4定时器基本应用

STM32F4的定时器的时钟频率由硬件自动设置,分为2种情况:

  1. 如果 APB 预分频器为 1,定时器时钟频率等于 APB 域的频率。
  2. 否则,等于 APB 域的频率的两倍 (×2)。

在我使用的板子上,AHB1为4分频,AHB2为2分频

二、计算器模式

1. 递增计数模式

在递增计数模式下,计数器从 0 计数到自动重载值,然后重新从 0 开始计数并生成计数器上溢事件。

2. 递减计数模式

在递减计数模式下,计数器从自动重载值开始递减计数到 0,然后重新从自动重载值开始计数并生成计数器下溢事件。

3.中心对齐模式(递增/递减计数)

在中心对齐模式下,计数器从 0 开始计数到自动重载值 — 1,生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从
0 开始重新计数。

三、程序解析

程序使用定时器1,设置定时器1为1秒中断。
void Time1Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;

    /* 1. 使能时钟 */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

    TIM_DeInit(TIM1); 

    /* 2. 配置定时器参数 */
    TIM_TimeBaseStructure.TIM_Period            = 10000 - 1;               /* 定时器重装载值 */     
    TIM_TimeBaseStructure.TIM_Prescaler         = 16800;                   /* 定时器时钟分频系数 */            
    TIM_TimeBaseStructure.TIM_ClockDivision     = TIM_CKD_DIV1;     
    TIM_TimeBaseStructure.TIM_CounterMode       = TIM_CounterMode_Up;       /* 计数器模式 */
    TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;                        /* 重复计数值 */
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); 

    /* 3. 配置定时器中断优先级 */
    NVIC_InitStructure.NVIC_IRQChannel                   = TIM1_UP_TIM10_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  
    NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 1;        
    NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;  
    NVIC_Init(&NVIC_InitStructure);   

    TIM_ClearFlag(TIM1, TIM_FLAG_Update);

    /* 4. 使能定时器中断 */
    TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);

    /* 5. 使能定时器 */
    TIM_Cmd(TIM1, ENABLE); 
}   

四、注释

1. 定时器重载值的计算

由于APB2为2分频,故定时器时钟源的频率为168MHz,在程序中定时器1的分频系数为16800,故要产生1S定时中断的值X为:

16800/168000000*X = 1

故定时器初值为:10000 - 1

2. TIM_RepetitionCounter重复计数的作用

重复计数的值可以设定为0x00~0xff,如果设定该值为非0时,定时器中断将会在设定时间TIM_RepetitionCounter倍后产生,例如设定该值为2,那么定时器中断将会在2秒后产生。注意,该值只在定时器1和定时器8中有用。

3.TIM_ClockDivision的作用

在《STM32F4xx中文参考手册.pdf》中是这样描述的
stm32f4定时器基本应用
具体什么意思,暂时不明白。

相关标签: stm32 定时器