打印

百为STM32开发板教程之十四——TIM通用定时器

[复制链接]
1173|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xi_liang|  楼主 | 2013-10-19 09:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
百为STM32开发板教程之十四——TIM通用定时器

使用通用定时器步骤:
1、打开定时器时钟
  /* TIM2 时钟使能 */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

2、使能定时器NVIC中断
  /*使能定时器2中断*/
  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

3、配置定时器参数
  /* 定时器基本配置 */
  TIM_TimeBaseStructure.TIM_Prescaler = 2;  //定时器计数频率12Mhz
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseStructure.TIM_Period = 12000;  //1ms溢出中断
  TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

4、打开定时器,开启中断
    /* 使能TIM2向上计数中断 */
    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
    /* TIM2计数使能 */
    TIM_Cmd(TIM2, ENABLE);


其中
TIM2的时钟 = PCLK1/(TIM_Prescaler+1)=36Mhz/(TIM_Prescaler+1)= 12Mhz

TIM_CounterMode_Up表示向上计数模式

TIM_Period:
在向上计数模式中,计数器从0计数到自动加载值TIM_Period(TIMx_ARR计数器的内容),然后重新从0开始计数并且产生一个计数器溢出事件。

5、中断服务程序处理
void TIM2_IRQHandler(void)
{
  if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //是否有溢出中断
  {
    TIM_ClearITPendingBit(TIM2, TIM_IT_Update );  //清除溢出中断
  cnt++;
  if(cnt>=1000)
  {
   cnt = 0;
   GPIO_WriteBit(GPIOF, GPIO_Pin_6, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOF, GPIO_Pin_6))); //1秒取反一次LED状态
  }
}
}
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://baiweijishu.taobao.com/ 百为STM32开发板 兼容官方STM3210E-EVAL开发板 WM-G-MR-09 WIFI开发板

41

主题

285

帖子

10

粉丝