利用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[3]>AD_Value[8]) array_Ia[TIMadc]=AD_Value[3]-AD_Value[8]; else array_Ia[TIMadc]=AD_Value[8]-AD_Value[3]; TIMadc++; } TIM_Cmd(TIM3, DISABLE); } |
RE:stm32定时器问题
RE:stm32定时器问题
?
回复:stm32定时器问题
TIM3是就没有进去过中断吗?TIM3的时钟是否开启了?TIM3的NVIC中断也没有配置。
这些都配置了,现在是把current detect中的循环去掉就能进入中断,加上循环就进不去。
RE:stm32定时器问题
在哪儿调用的?
RE:stm32定时器问题
RE:stm32定时器问题
RE:stm32定时器问题
ADCflag=1;
放在TIM_Cmd(TIM3, DISABLE); 后试试看
RE:stm32定时器问题
回复:stm32定时器问题
void Current_detect(void)
在哪儿调用的?
在主函数中调用的
main()
{
whilei(1)
current detect();
}
RE:stm32定时器问题
RE:stm32定时器问题
{
NVIC_config();
Init_TIMER3();
ADC_INT();
ADCflag=0;
TIM_Cmd(TIM3, ENABLE);
while(1)
{
if(ADCflag)
{ TIM_Cmd(TIM3,DISABLE);
ADC_GetConversionValue(ADC1);
if(AD_Value[3]>AD_Value[8]) array_Ia[TIMadc]=AD_Value[3]-AD_Value[8];
else array_Ia[TIMadc]=AD_Value[8]-AD_Value[3];
TIM_Cmd(TIM3, ENABLE);
}
}
}
void TIM3_IRQHandler(void)//定时器3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //
ADCflag=1;
}
}
我帮楼主改了一下架构,你试试,上电启动定时器,0.5S中断后,开启ADC采集,采集完毕重新启动定时器
RE:stm32定时器问题
1、使能中断;
2、把中断函数与向量表映射起来;
3、把需要设置的时钟都使能
回复:stm32定时器问题
我是想在一个0.5s周期内检测,然后取均方根计算有效值。
回复第 12 楼 于2014-04-04 20:24:53发表:
main()
{
NVIC_config();
Init_TIMER3();
ADC_INT();
ADCflag=0;
TIM_Cmd(TIM3, ENABLE);
while(1)
{
if(ADCflag)
{ TIM_Cmd(TIM3,DISABLE);
ADC_GetConversionValue(ADC1);
if(AD_Value[3]>AD_Value[8]) array_Ia[TIMadc]=AD_Value[3]-AD_Value[8];
else array_Ia[TIMadc]=AD_Value[8]-AD_Value[3];
TIM_Cmd(TIM3, ENABLE);
}
}
}
void TIM3_IRQHandler(void)//定时器3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //
ADCflag=1;
}
}
我帮楼主改了一下架构,你试试,上电启动定时器,0.5S中断后,开启ADC采集,采集完毕重新启动定时器
回复:stm32定时器问题
你把void Current_detect(void)函数中
ADCflag=1;
放在TIM_Cmd(TIM3, DISABLE); 后试试看
谢谢,还是不行。