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

神舟IV学习笔记(七)定时器中断流水灯

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

通用定时器的功能非常强大,能够测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM),也能够用于定时中断任务。其实系统滴答和实时时钟功能类似于定时器。51单片机也有定时器,可以使用软件的方式实现实时时钟的功能,就是断电后会到初始状态了。

神舟IV开发板采用的是STM32F107VCT,内部含有多达10个定时器,其中TIM1和TIM8是高级控制定时器在APB2总线上,TIM2—TIM7是挂在APB1上的,所以使用起来要注意的是,开启不同的时钟。

我们就用通用定时器TIM2实现LED以1s速度流水灯的功能。首先我们看看时钟,TIM2挂在APB1总线上,而APB1的最大时钟速度为36MHZ。由于系统初始化将APB1的分频比设置为2,所以TIM2的时钟就是APB1时钟的2倍,等于系统时钟。TIM2具有16位可编程预分频器,范围可以从1到65536之间。这里我们设置分频比为7200,得到10KHZ的计数时钟。再设置自动装载的计数值为10000,这样就得到1s的定时器间隔,最后使能中断,配置中断函数。


 

主要代码为:

static void NVIC_Configuration(void)

{

  NVIC_InitTypeDef NVIC_InitStructure;

 

  /* Set the Vector Table base address at 0x08000000 */

  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);

 

  /* Enable the TIM5 gloabal Interrupt */

  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

 

  NVIC_Init(&NVIC_InitStructure);

 

}

int main(void)

{

  /* Setup STM32 system (clock, PLL and Flash configuration) */

  SystemInit();

 

  /* Add your application code here

     */

  LED_Configuration();//LED时钟和端口配置

  TIM2_Configuration();//TIM2时钟和端口配置

  NVIC_Configuration();//中断配置

  /* Infinite loop */

  while (1)

  {

  }

}

void TIM2_IRQHandler(void)//定时器中断函数

{

  if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)

  {

    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

    LED_Spark();//led流水灯

  }

}





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

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址