标题:
定时器与蜂鸣器(4)
[打印本页]
作者:
rise_ming
时间:
2012-3-12 13:08
标题:
定时器与蜂鸣器(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,直到寄存器溢出发生中断为止。 最后别忘了,需要使能定时器! !
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0