//========主函数================================
int main(void)
{
delay_init();
//延时函数初始化
NVIC_Configuration();
//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600);
//串口初始化为9600
LED_Init();
//LED端口初始化
TIM3_Int_Init(4999,7199);//10Khz的计数频率,计数到5000为500ms
while(1)
{
}
}
//=============中断函数========================
//定时器3中断服务程序
void TIM3_IRQHandler(void) //TIM3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志
LED1=!LED1;
}
TIM_Cmd(TIM3, DISABLE); //关闭定时器
}
如上,正常实现的功能应该是:初始化时,LED1灭,定时器定时500ms,在中断函数中LED1状态反转为亮,然后定时器关闭,LED1一直处于亮的状态中。
而现实的现象却是:上电后,LED1亮了下,然后就熄灭了,一直处于灭的状态。
我用单步调试了下,如图1,初始化时,PE5(LED1)是高电平。
接着到图2中,用step into,一直下去,就到了图3的while(1),然后调试就跑死了,没反应了。这期间PE5一直是高电平。
而如果运行在图2的时候,用step over跳过使能TIM3库函数,就跳到图4的关闭定时器函数处了,此时PE5为低电平,LED1一直亮下去。
所以我的疑问是,用图4的方法单步调试,LED1实现了应该正常的实验现象。
而用图3的方法调试,程序怎么跑飞了?
如果不单步调试,上电后的现象是LED1亮一下,然后一直熄灭,达不到图4单步调试时实现的正常功能。
新手好困惑啊。。。。
---------------------------------
原子哥,为什么我用软件仿真,完全正确,程序下到硬件上却不行。还有,用JTAG仿真,也得不行?为什么啊,就这个定时器让灯亮3秒,然后再中断里灯灭,关中断的东西。搞了一下午了..........软件怎么仿真都正确,一到硬件上就不行。崩溃了
一周热门 更多>