定时器是一个芯片的基本功能,保证了时间的准确性的基础,我们可以通过数据手册了解到,我们当前TIM1的定时器的最大输出是64MHz,虽然没有到主频的72Mhz,但是也是一个非常高的频率了。
01-框图.png


好了我们就接下来完成始终的基本初始化的功能。
  1. #include "DRV_TIM.h"


  2. void TIM_Init(void)
  3. {
  4.         TIM_TimeBaseInitType TIM_TimeBaseStructure;
  5.         NVIC_InitType NVIC_InitStructure;
  6.         RCC_APB2_Peripheral_Clock_Enable(RCC_APB2_PERIPH_TIM1);
  7.        

  8.         TIM_Base_Struct_Initialize(&TIM_TimeBaseStructure);
  9.         TIM_TimeBaseStructure.Period    = 63;
  10.         TIM_TimeBaseStructure.Prescaler = 1000;
  11.         TIM_TimeBaseStructure.ClkDiv    = 0;
  12.         TIM_TimeBaseStructure.CntMode   = TIM_CNT_MODE_UP;
  13.         TIM_Base_Initialize(TIM1, &TIM_TimeBaseStructure);

  14.         NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
  15.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  16.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  17.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  18.         NVIC_Initializes(&NVIC_InitStructure);
  19.        
  20.         TIM_Interrupt_Enable(TIM1, TIM_INT_UPDATE);
  21.         TIM_On(TIM1);
  22. }

  23. unsigned int Timcnt=0;


  24. void TIM1_UP_IRQHandler(void)
  25. {

  26. if (TIM_Interrupt_Status_Get(TIM1, TIM_INT_UPDATE) != RESET)
  27.     {
  28.         TIM_Interrupt_Status_Clear(TIM1, TIM_INT_UPDATE);
  29.                         Timcnt++;
  30.                         if(Timcnt==500)
  31.                         {
  32.                           Timcnt=0;
  33.                           GPIO_Pin_Toggle(GPIOA,GPIO_PIN_1|GPIO_PIN_7);
  34.                         }
  35.     }
  36. }
这里需要说一下的,和ST的不一样的地方,他的中断是使用结构体的,不是使用函数直接来设置,和大多数有不同的地方,这里直接在定时器初始化函数里面写的一样。
  1. int main(void)
  2. {
  3.         LED_Init();
  4.         UART_Init();
  5.         TIM_Init();
  6.         while(1)
  7.         {
  8. //                LED_Test();
  9. //                printf("LED_Blink!\r\n");
  10.         }
  11. }
在主函数内注释掉点灯的函数,我们就直接在终中断数中点灯,
好了,定时器就分享到这里,下次移植CoreMark来和大家聊聊跑分。