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

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扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版