首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

定时器与蜂鸣器(4)

定时器与蜂鸣器(4)

步骤四
  定时器的初始化配置, 使用 Timer_Config();。 OK, 关键部分出来了。
  我们来看下实现过程: void Timer_Config(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); TIM_DeInit(TIM2); TIM_TimeBaseStructure.TIM_Period=2000; //自动重装载寄存器的值 //时钟预分频数 //采样分频
  TIM_TimeBaseStructure.TIM_Prescaler= (36000 - 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_ITConfig(TIM2,TIM_IT_Update,ENABLE); TIM_Cmd(TIM2, ENABLE); } 我们每个语句都来解释一下。首先我们想使用定时器,就必须使能定时器的 时 钟 , 这 就 是 函 数 RCC_APB1PeriphClockCmd(); , 通 过 它 开 启 RCC_APB1Periph_TIM2。 TIM_DeInit( TIM2); 该函数主要用于复位 TIM2 定时器, 使之进入初始状态。 然后我们对自动重装载寄存器赋值,TIM_Period 的大小实际上表示的是需要经 过 TIM_Period 次计数后才会发生一次更新或中断。接下来需要设置时钟预分频 数 TIM_Prescaler, 这里有一个公式, 我们举例来说明: 例如时钟频率=72MHZ/(时 钟预分频+1)。 说明当前设置的这个 TIM_Prescaler, 直接决定定时器的时钟频率。 通俗点说,就是一秒钟能计数多少次。比如算出来的时钟频率是 2000,也就是 一秒钟会计数 2000 次,而此时如果 TIM_Period 设置为 4000,即 4000 次计数后
   //清除溢出中断标志
  /开启时钟
  就会中断一次。由于时钟频率是一秒钟计数 2000 次,因此只要 2 秒钟,就会中 断一次。 再往后的代码,还有一个需要注意的,就是我们一般采用向上计数模式,即 每次计数就会加 1,直到寄存器溢出发生中断为止。 最后别忘了,需要使能定时器! !
返回列表