初级会员

- 积分
- 100
- 金钱
- 100
- 注册时间
- 2015-5-9
- 在线时间
- 9 小时
|
10金钱
我用定时器外部计数模式进行对脉冲的计数,同时又想在当计数满溢出的时候触发更新中断,在中断服务函数中用一个变量记录它溢出了多少次。自己配置了定时器,但是不进入中断,弄了半天也不知道怎么回事,猜测是不是外部计数模式本身就是输入信号脉冲触发中断计数,就不能再触发溢出更新中断了?请各位帮忙看看,感激[mw_shl_code=applescript,true]u16 TIM2CH1_CAPTURE_VAL;
TIM_ICInitTypeDef TIM2_ICInitStructure;
void TIM2_Cap_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //ê1ÄüTIM2ê±Öó
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //ê1ÄüGPIOAê±Öó
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PA0 Çå3y֮ǰéèÖÃ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 êäèë
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿úËù¶èÎa50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);
// GPIO_ResetBits(GPIOA,GPIO_Pin_0); //PA0 ÏÂà-
//ÖD¶ÏóÅÏè¼¶NVICéèÖÃ
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //TIM3ÖD¶Ï
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //ÏèÕ¼óÅÏè¼¶0¼¶
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //′óóÅÏè¼¶2¼¶
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μà±»ê1Äü
NVIC_Init(&NVIC_InitStructure); //3õê¼»ˉNVIC¼Ä′æÆ÷
//3õê¼»ˉ¶¨ê±Æ÷2 TIM2
TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //é趨¼ÆêyÆ÷×Ô¶ˉ֨װÖμ
TIM_TimeBaseStructure.TIM_Prescaler =0; //Ô¤·ÖÆμÆ÷
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIMÏòéϼÆêyÄ£ê½
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //¸ù¾YTIM_TimeBaseInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
TIM_SetCounter(TIM2, 0);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //ê1ÄüÖ¸¶¨μÄTIM2ÖD¶Ï,ÔêDí¸üDÂÖD¶Ï
TIM_Cmd(TIM2,ENABLE ); //ê1Äü¶¨ê±Æ÷2
}
void TIM2_IRQHandler(void) //TIM2ÖD¶Ï·tÎñoˉêy
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //¼ì2éÖ¸¶¨μÄTIMÖD¶Ï·¢éúóë·ñ:TIM ÖD¶ÏÔ′
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update ); //Çå3yTIMxμÄÖD¶Ï′y′|àíλ:TIM ÖD¶ÏÔ′
TIM_SetCounter(TIM2, 0);
num1++;
}
LED0=!LED0;
}[/mw_shl_code]不尽。。。
|
-
定时器配置
-
最佳答案
查看完整内容[请看2#楼]
定时器配置中清除一下中断标志,TIM_ClearFlag(TIM2,TIM_FLAG_Update);
|