×
单片机 > 单片机程序设计 > 详情

STM32的定时器(含中断)配置样例

发布时间:2020-05-22 发布时间:
|

1. 系统时钟配置

void RCC_Configuration(void)
{
    ErrorStatus HSEStartUpStatus; 
    RCC_DeInit(); 
    RCC_HSEConfig(RCC_HSE_ON); 
    HSEStartUpStatus = RCC_WaitForHSEStartUp(); 
    if (HSEStartUpStatus == SUCCESS)
    { 
        RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB(HCLK)时钟为系统时钟 
        RCC_PCLK2Config(RCC_HCLK_Div1); //设置高速AHB时钟(APB2)为HCLK时钟

        RCC_PCLK1Config(RCC_HCLK_Div2); //设置低速AHB时钟(APB1)为HCLK的2分频 
        RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);//选择PLL时钟源为HSE1分频,倍频为

        //9,PLLCLK = 8MHz * 9 = 72 MHz 
        RCC_PLLCmd(ENABLE); 
        while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); 
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); 
        while (RCC_GetSYSCLKSource() != 0x08); 
    } 
}

2. 为产生PWM脉冲的定时器配置

void TIMER2_Cfg(void)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

    TIM_DeInit(TIM2); 
    TIM_InternalClockConfig(TIM2); 
    TIM_TimeBaseStructure.TIM_Prescaler = 720-1;            //预分频系数, 此时TIMER的频率=100k
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //设置计数器模式为向上计数模式
    TIM_TimeBaseStructure.TIM_Period = 1000 - 1;            //设置计数溢出大小,每计1000个脉冲就

    //产生一个更新事件。TIM_Period时长意味着TIM_Prescaler分频后脉冲频率的再分频。 
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);         //把配置写入寄存器

    //以下是TIM2中断配置

    TIM_ClearFlag(TIM, TIM_FLAG_Update);       //清中断,以免一启用中断后立即产生中断

    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //使能TIM2中断源
}

3. TIM3产生更新时间的中断配置

void NVIC_Cfg(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);           //设置中断组为1
    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;           //更新事件,TIM2中断通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级0
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;        //响应优先级1
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;           //允许中断
    NVIC_Init(&NVIC_InitStructure);                           //写入设置
}

4.定时器初始化

void PWM_Init(void)

{

    RCC_Configuration();

    TIMER_Cfg();

    NVIC_Cfg();

}

7. 打开定时器2

TIM_Cmd(TIM2, ENABLE);


关键字:STM32  定时器  中断 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会