问题解决了,原来是清楚中断源的问题,如果如附件那样:
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET);
{
//GPIO_ResetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_2);
GPIO_WriteBit(GPIOA,GPIO_Pin_8,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8)));
GPIO_WriteBit(GPIOD,GPIO_Pin_2,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_2)));
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
}
}
是不能正常工作,但是如果改成如下这样:
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET);
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
//GPIO_ResetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_2);
GPIO_WriteBit(GPIOA,GPIO_Pin_8,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8)));
GPIO_WriteBit(GPIOD,GPIO_Pin_2,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_2)));
}
}
程序就能正常工作,灯每500毫秒闪一次
究竟这个清中断源的顺序有什么讲究的?
问题解决了,原来是清楚中断源的问题,如果如附件那样:
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET);
{
//GPIO_ResetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_2);
GPIO_WriteBit(GPIOA,GPIO_Pin_8,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8)));
GPIO_WriteBit(GPIOD,GPIO_Pin_2,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_2)));
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
}
}
是不能正常工作,但是如果改成如下这样:
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET);
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
//GPIO_ResetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_2);
GPIO_WriteBit(GPIOA,GPIO_Pin_8,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8)));
GPIO_WriteBit(GPIOD,GPIO_Pin_2,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_2)));
}
}
程序就能正常工作,灯每500毫秒闪一次
究竟这个清中断源的顺序有什么讲究的?
举报