stm32定时器问题
利用stm32定时器3产生0.5s的定时,用current detect程序启动定时器,循环检测adc信号,定时器中断程序改变adcflag 值,current detect程序停止定时器。但现在进入不了定时器3中断程序。怎么回事呢?给指点一下啊!谢谢啊!
void Init_TIMER3(void)//初始化
{
TIM_TimeBaseInitTypeDef TIM_BaseInitStructure; //
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //!!
TIM_DeInit( TIM3); //
TIM_InternalClockConfig(TIM3); //
TIM_BaseInitStructure.TIM_Period = 5000;
TIM_BaseInitStructure.TIM_Prescaler = 7199;
TIM_BaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //时钟分割为0
TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_BaseInitStructure);
TIM_ClearFlag(TIM3, TIM_FLAG_Update); //
TIM_ARRPreloadConfig(TIM3, DISABLE); //
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //
//TIM_Cmd(TIM3, ENABLE); //
}
void TIM3_IRQHandler(void)//定时器3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //
ADCflag=0;
}
}
/*****************************************************************************
void Current_detect(void)
{
ADCflag=1;
TIMadc=0;
TIM_Cmd(TIM3, ENABLE);
while(ADCflag)
{
ADC_GetConversionValue(ADC1);
if(AD_Value>AD_Value) array_Ia=AD_Value-AD_Value;
else array_Ia=AD_Value-AD_Value;
TIMadc++;
}
TIM_Cmd(TIM3, DISABLE);
}
RE:stm32定时器问题
TIM3是就没有进去过中断吗?TIM3的时钟是否开启了?TIM3的NVIC中断也没有配置。RE:stm32定时器问题
同意楼上看法,另外TIM_DeInit( TIM3)起什么作用?
回复:stm32定时器问题
回复第 2 楼 于2014-04-02 16:00:11发表:TIM3是就没有进去过中断吗?TIM3的时钟是否开启了?TIM3的NVIC中断也没有配置。
这些都配置了,现在是把current detect中的循环去掉就能进入中断,加上循环就进不去。
RE:stm32定时器问题
void Current_detect(void)在哪儿调用的?
RE:stm32定时器问题
你可以把整个工程都贴出来,这样我们可以为你更好地找到问题RE:stm32定时器问题
ADCflag 定义的什么类型, 应该是volatileRE:stm32定时器问题
你把void Current_detect(void)函数中ADCflag=1;
放在TIM_Cmd(TIM3, DISABLE); 后试试看
RE:stm32定时器问题
我认为楼主这样的写法不合理,应该是在定时器中加个计数器,然后通过这个计数器来做时间差的处理,这样就可以避免这种情况。回复:stm32定时器问题
回复第 5 楼 于2014-04-03 10:47:10发表:void Current_detect(void)
在哪儿调用的?
在主函数中调用的
main()
{
whilei(1)
current detect();
}
页:
[1]
2