zoukankan      html  css  js  c++  java
  • 定时器

          STM32定时器功能强大,共有8个16位定时器,其中TIM6、TIM7为基本定时器,主要产生DAC触发信号;TIM2、TIM3、TIM4、TIM5为通用定时器,除了基本的定时外,主要还有几个可用场合

        • 捕获/比较寄存器,可实现脉冲频率测量;
        • PWM输出过程分析;
        • PWM输入过程分析;
        • 定时器时钟,可使用外部脉冲作为定时器时钟源;

    TIM1和TIM8为高级定时器,它们具有基本、通用定时器的所有功能外,还具有三厢6步电机的接口、刹车功能及用于PWM驱动电路的死区时间控制等。相比通用定时器,主要多出了BRK、DTG两个结构,因而具有了死区时间的控制功能。

    以定时器3为例,初始化程序如下:

    void timer_init_(u16 err,u16 psc)
    {
      TIM_TimeBaseInitTypeDef TIM_instructer;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
        TIM_instructer.TIM_Period=err;
        TIM_instructer.TIM_Prescaler=psc;
        TIM_instructer.TIM_CounterMode=TIM_CounterMode_Up;
        TIM_instructer.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseInit(TIM3,&TIM_instructer);
        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
        TIM_Cmd(TIM3,ENABLE);    
    }
    
    void NIVC_init()
    {
        NVIC_InitTypeDef NVIC_instructer;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
        NVIC_instructer.NVIC_IRQChannel=TIM3_IRQn;
        NVIC_instructer.NVIC_IRQChannelCmd=ENABLE;
        NVIC_instructer.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_instructer.NVIC_IRQChannelSubPriority=1;
        NVIC_Init(&NVIC_instructer);
    }
    
    void TIM3_IRQHandler()
    {
      if(TIM_GetFlagStatus(TIM3,TIM_IT_Update)!=RESET)
        {
          LED0=~LED0;        
        }
      TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
    }

    其中NVIC初始化上节已有,针对TIM3的初始化,做出详解。

    typedef struct 
    { 
    u16 TIM_Period; 
    u16 TIM_Prescaler; 
    u8 TIM_ClockDivision; 
    u16 TIM_CounterMode; 
    } TIM_TimeBaseInitTypeDef; 

    TIM_Period 设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。它的取值必须在 0x0000 和0xffff之间;

    TIM_Prescaler设置了用来作为 TIMx 时钟频率除数的预分频值。它的取值必须在 0x0000 和0xFFFF 之间;

    TIM_ClockDivision 设置了时钟分割。该参数取值如下:

    TIM_CKD_DIV1     TDTS = Tck_tim
    TIM_CKD_DIV2     TDTS = 2Tck_tim
    TIM_CKD_DIV4     TDTS = 4Tck_tim

    TIM_CounterMode 选择了计数器模式。该参数取值如下:

    TIM_CounterMode_Up                          TIM 向上计数模式
    TIM_CounterMode_Down                      TIM 向下计数模式
    TIM_CounterMode_CenterAligned1       TIM 中央对齐模式 1 计数模式
    TIM_CounterMode_CenterAligned2       TIM 中央对齐模式 2 计数模式
    TIM_CounterMode_CenterAligned3       TIM 中央对齐模式 3 计数模式

    函数TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)功能为使能特定的中断,其中输入参数TIM_IT为使能或者失能TIM中断,可以一个或多个值组合,其值如下:

    TIM_IT_Update                TIM 中断源
    TIM_IT_CC1 TIM             捕获/比较 1 中断源
    TIM_IT_CC2 TIM             捕获/比较 2 中断源
    TIM_IT_CC3 TIM             捕获/比较 3 中断源
    TIM_IT_CC4 TIM             捕获/比较 4 中断源
    TIM_IT_Trigger               TIM 触发中断源

     

  • 相关阅读:
    sklearn中禁止输出ConvergenceWarning:
    sklearn里训练集和测试集的分割
    sklearn模型的保存与加载使用
    django项目成功启动,但views里代码未执行
    使用sklearn对iris数据集做基本的训练和预测
    unrecognized option '--high-entropy-va'
    快速下载Mingw(不使用sourceforge.net)
    cc1.exe: sorry, unimplemented: 64-bit mode not compiled in
    GoLand里Go Module模式下import自定义包
    GoLand生成可执行文件(Windows、Linux)
  • 原文地址:https://www.cnblogs.com/lwangj/p/5127317.html
Copyright © 2011-2022 走看看