本帖最后由 网络孤客 于 2017-9-4 15:14 编辑
我想通过一个引脚,触发TIM2开始计时,时间到进行其他操作,不循环,触发一次计时一次。
当执行时,触发TIM2开始计时,瞬间就触发中断事件,根本没到我设置的计时时间。
请问,如何解决这问题?
/**************************************************************************************************
* 函 数:Init_Timer2
* 功 能:初始化Timer2
* 参 数:无
* 返 回:无
* 说 明:用于按键输入检查
* 更新日期:2017-9-2
**************************************************************************************************/
void Init_Timer2(void)
{
//256分频,自动重装值 40000,2M主时钟/(256*( 39999+1),相当于周期为5.2S,
TIM2_DeInit();
TIM2_TimeBaseInit(TIM2_PRESCALER_256, 39999);
TIM2_PrescalerConfig(TIM2_PRESCALER_256, TIM2_PSCRELOADMODE_UPDATE);
TIM2_SetCounter(0x00); //设定计数器的初值0
TIM2_ARRPreloadConfig(ENABLE); //允许自动重装
TIM2_SelectOnePulseMode(TIM2_OPMODE_SINGLE);//在发生下一次更新事件(清除CEN位)时,计数器停止
TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE); //更新中断使能
}
int main( void )
{
Init_Timer2();
IO_Init();
enableInterrupts(); //总中断使能
u8 Flag = 1;
while(1)
{
if (GPIO_ReadInputPin(Input_GPIO, HS_Pin) && Flag)
{
Flag = 0;
GPIO_WriteLow(Output_GPIO, Work_Pin); //点亮LED
TIM2_Cmd(ENABLE);
}
}
}
中断
INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
if (TIM2_GetITStatus(TIM2_IT_UPDATE) != RESET) //检查 TIM2 更新中断发生与否
{
TIM2_ClearITPendingBit(TIM2_IT_UPDATE); //清除中断标记
GPIO_WriteHigh(Output_GPIO, Work_Pin); //关LED
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>