你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32定时器问题

[复制链接]
kingg209 提问时间:2014-4-2 13:56 /
利用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); 
}
 
<
收藏 评论16 发布时间:2014-4-2 13:56

举报

16个回答
回答时间:2014-4-2 16:00:11

RE:stm32定时器问题

TIM3是就没有进去过中断吗?TIM3的时钟是否开启了?TIM3的NVIC中断也没有配置。
pythonworld 回答时间:2014-4-2 22:03:34

RE:stm32定时器问题

同意楼上看法,另外TIM_DeInit( TIM3)起什么作用
kingg209 回答时间:2014-4-3 07:09:44

回复:stm32定时器问题

回复第 2 楼 于2014-04-02 16:00:11发表:
TIM3是就没有进去过中断吗?TIM3的时钟是否开启了?TIM3的NVIC中断也没有配置。
 
 
这些都配置了,现在是把current detect中的循环去掉就能进入中断,加上循环就进不去。
 
回答时间:2014-4-3 10:47:10

RE:stm32定时器问题

void Current_detect(void)
在哪儿调用的?
那片清茶 回答时间:2014-4-3 11:54:54

RE:stm32定时器问题

你可以把整个工程都贴出来,这样我们可以为你更好地找到问题
pythonworld 回答时间:2014-4-3 14:14:35

RE:stm32定时器问题

ADCflag 定义的什么类型, 应该是volatile
dlyt03 回答时间:2014-4-3 14:43:12

RE:stm32定时器问题

你把void Current_detect(void)函数中
ADCflag=1;
放在TIM_Cmd(TIM3, DISABLE); 后试试看
回答时间:2014-4-3 15:58:45

RE:stm32定时器问题

我认为楼主这样的写法不合理,应该是在定时器中加个计数器,然后通过这个计数器来做时间差的处理,这样就可以避免这种情况。
kingg209 回答时间:2014-4-3 18:49:53

回复:stm32定时器问题

回复第 5 楼 于2014-04-03 10:47:10发表:
void Current_detect(void)
在哪儿调用的?
在主函数中调用的
main()
{
whilei(1)
current detect();
}
 
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版