void TIM2init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,
ENABLE);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel =
TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd =
ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 7200 -
1;
TIM_TimeBaseStructure.TIM_Prescaler = 10 -
1;
TIM_TimeBaseStructure.TIM_ClockDivision =
0;
TIM_TimeBaseStructure.TIM_CounterMode =
TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2,
&TIM_TimeBaseStructure);
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM2, ENABLE);
}
とりあえずこれで1mS毎に割り込みがかかる
あとは
void TIM2_IRQHandler(void)
{
if
(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET) {
TIM_ClearITPendingBit(TIM2,
TIM_IT_Update);
}
}
のなかで任意数をカウントすれば任意時間の割り込みが可能
ただしこれを時間待ちに使うと1mS~2mSくらいの誤差が発生するから
正確なwait処理にはもう一工夫必要
それは追々作ります
とりあえず1秒のカウンタが出来ればいろいろ応用できるので
何かと便利かと
0 件のコメント:
コメントを投稿