stm32通用定時器
TIM通用定時器配置步驟:
1.配置TIM時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
2.定時器基本配置
void TIM2_Configuration(void)
{
?? TIM_TimeBaseInitTypeDef? TIM_TimeBaseStructure;
??? //? TIM_OCInitTypeDef? TIM_OCInitStructure ;
??? TIM_DeInit(TIM2);????????????????????????????? //復位TIM2定時器
????????
??? /* TIM2 configuration */
??? TIM_TimeBaseStructure.TIM_Period = 5;??????? // 2.5ms?????
??? TIM_TimeBaseStructure.TIM_Prescaler = 36000;??? // 分頻36000???????
??? TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;? // 時鐘分頻??
??? TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;? //計數方向向上計數
??? TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
??? /* Clear TIM2 update pending flag[清除TIM2溢出中斷標志] */
??? TIM_ClearFlag(TIM2, TIM_FLAG_Update);
??? /* Enable TIM2 Update interrupt [TIM2溢出中斷允許]*/
??? TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);?
??? /* TIM2 enable counter [允許tim2計數]*/
??? TIM_Cmd(TIM2, ENABLE);???????
}
TIM_Period設置了在下一個更新事件裝入活動的自動重裝載寄存器周期的值。它的取值必須在0x0000和0xFFFF之間。
TIM_Prescaler設置了用來作為TIMx時鐘頻率除數的預分頻值。它的取值必須在0x0000和0xFFFF之間。
TIM_ClockDivision的作用是做一段延時,一般在特殊場合的時候會用到,可不關心。
TIM_CounterMode選擇了計數器模式。
TIM_CounterMode_Up
TIM向上計數模式
TIM_CounterMode_Down
TIM向下計數模式
TIM_CounterMode_CenterAligned1?? TIM中央對齊模式1計數模式
TIM_CounterMode_CenterAligned2?? TIM中央對齊模式2計數模式
TIM_CounterMode_CenterAligned3?? TIM中央對齊模式3計數模式
單片機時鐘頻率72MHz,APB1 二分頻36MHz,故TIM2自動2倍頻至72MHz,故定時器中斷頻率為72000000/36000/5=400Hz
3.使能定時器中斷TIM_Cmd(TIM2, ENABLE);
4.配置NVIC。
??? NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;
??? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
??? NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;??
??? NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
??? NVIC_Init(&NVIC_InitStructure);
5.寫中斷函數
void TIM2_IRQHandler(void)
{
......//中斷處理
} ?