1. 程式人生 > >stm32f407之基本定時器TIM6&TIM7(操作暫存器)

stm32f407之基本定時器TIM6&TIM7(操作暫存器)

基本定時器TIM6&TIM7

      基本定時器TIM6和TIM7包括一個由可程式設計分頻器驅動的16位自動過載計數器。它可以用作普通的定時器,也可以用來驅動DAC。這兩個定時器是完全獨立的,不共享任何資源。更多時候是與DAC平配合使用。

作為定時器的配置步驟:

1.      設定中斷優先順序分組(如果之前沒有設定),這個最好一個程式裡只在開頭設定一次。

2.     使能相關時鐘。

3.     設定分頻。

4.     清空計數器的值。

5.     設定自動重灌暫存器的值。

6.     是否允許中斷。

7.     如果允許中斷,設定中斷優先順序,使能中斷。

8.     使能計數器。

程式:

/************************************
    標題:定時器TIM7的定時練習
    軟體平臺:IAR for ARM6.21
    硬體平臺:stm32f4-discovery
    主頻:168M
    
    author:小船
    data:2012-02-06
*************************************/

#include <stm32f4xx.h> 
#include "MyDebugger.h"

void main ()
{   

  SCB->AIRCR = 0x05FA0000 | 0x400;  //中斷優先順序分組 搶佔:響應=3:1
  
  RCC->APB1ENR |= (1<<5); //開啟TIM7時鐘
  TIM7->PSC = 8399; //對時鐘84M進行8400分頻,使得計數頻率為10k
  TIM7->ARR = 10000;  //定時一秒
  TIM7->CNT = 0;  //清空計數器
  TIM7->CR1 |= (1<<7); //自動重灌載預裝載使能
  TIM7->DIER |= 1; //使能中斷
  NVIC->IP[55] = 0x80;
  NVIC->ISER[1] |= (1<<(55-32));
  TIM7->CR1 |= 1; //開始計時
  MyDebugger_Init();
  while(1)
  {
  };
}

void TIM7_IRQHandler(void)
{
  if(TIM7->SR)
  {
    MyDebugger_LEDs(blue, turn);
    TIM7->SR &= ~(0x0001); 
  }
}