zoukankan      html  css  js  c++  java
  • STM32F407VG (五)定时器

    一、定时器节本分类和主要特点
    1.STM32定时器分类:
    1)看门狗定时器
    2)SysTick定时器
    3)RTC定时器

    4)通用定时器
    a)通用定时器TIM2~TIM5, 当中TIM2和TIM5是32位,TIM3和TIM4是16位
         具有四个独立通道
         中断/DMA事件
         支持增量编码器和霍尔传感器

    b)通用定时器TIM9~TIM14,16位定时器
         最多具有连个独立通道
         中断事件

    5)基本定时器TIM6,TIM7,16位定时器
         同步电路触发DAC
         中断/DMA事件

    6)高级定时器TIM1。TIM8,16位定时器
        具有四个独立通道
        中断/DMA事件
        支持增量编码器和霍尔传感器
        
         输入信号能够改变计数器状态或复位
         可改变定期器寄存器的反复计数器。


    二、实例1. 定时中断
        
    1.时钟初始化
     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
     TIM_DeInit(TIM2);
       /* 时钟预分频数 */       //84000000/84=1000000,预分频后时钟为1M      
     TIM_TimeBaseStructure.TIM_Prescaler= (84 - 1);
     /* 自己主动重装载寄存器周期的值(计数值) */ /* 累计 TIM_Period个频率后产生一个更新或者中断 */
     TIM_TimeBaseStructure.TIM_Period =1000-1 ;  
    /* 採样分频 */
     TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
    /* 向上计数模式 */ 
     TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; 
     //调用初始化函数 
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
     /* 清除溢出中断标志 */ 
     TIM_ClearFlag(TIM2, TIM_FLAG_Update);  
    /*设置产生TIM_FLAG_Update中断*/        
     TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
    /* 开启时钟 */
     TIM_Cmd(TIM2, ENABLE); 

    2. 设置中断向量。具体的解释见本博客有关“中断”部分的文章
     1)中断初始化
     NVIC_InitTypeDef NVIC_InitStructure;
     /* Enable TIM2 interrupt IRQ channel */ 
     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
     NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
     NVIC_Init(&NVIC_InitStructure);

     2)中断函数
     void TIM2_IRQHandler(void)
    {
     static unsigned int cpu_counter = 0; 
     if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET)  
     {
      TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update);
      cpu_counter ++;
      if(cpu_counter >= 500) //等闪烁的周期是1s
      {
       cpu_counter = 0;
       GPIO_ToggleBits(LED1);
      } 
     }
     
    }

    波形非常标准吧:)

  • 相关阅读:
    progresql
    postgresql
    postgresql
    postgresql 索引
    postgresql 视图
    postgresql 触发器
    postgresql异常快速定位
    postgresql数据库备份和恢复
    amgular $q用法
    安装fcitx
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7105790.html
Copyright © 2011-2022 走看看