OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9299|回复: 10

TIM4初始化中加入允许更新中断TIM_IT_Update后,程序卡住

[复制链接]

19

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-9-3
在线时间
7 小时
发表于 2015-6-26 16:40:38 | 显示全部楼层 |阅读模式
5金钱
问题如题,TIM4初始化TIM_ITConfig(TIM4, TIM_IT_Update|TIM_IT_CC1,ENABLE);中,只要加上TIM_IT_Update程序就会卡死,
单步调试显示卡在这。
请求大神指教
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-9-3
在线时间
7 小时
 楼主| 发表于 2015-6-26 17:06:45 | 显示全部楼层
自己先顶一个,呼叫原子老师和大神们
回复

使用道具 举报

2

主题

239

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2015-6-5
在线时间
110 小时
发表于 2015-6-26 17:24:10 | 显示全部楼层
中斷函數的內容貼上來看看吧
設定的部分也貼上來 完整點 有時候不是這句的問題
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2015-6-27 11:35:41 | 显示全部楼层
你开启这个,看你中断服务函数里面要区分开来啊。

CC1是输入捕获比较中断, update一般是定时器溢出。。。


你说卡死在这行代码???  你确定是卡死在这行代码吗?不应该吧
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

19

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-9-3
在线时间
7 小时
 楼主| 发表于 2015-6-28 15:18:08 | 显示全部楼层
回复【3楼】Rocks:
---------------------------------
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 

GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_6; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; 
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_0);

//???????¨?±?÷4 TIM4  
TIM_TimeBaseStructure.TIM_Period = arr; 
TIM_TimeBaseStructure.TIM_Prescaler =psc; 
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); 
  

  TIM4_ICInitStructure.TIM_Channel = TIM_Channel_1; 
   TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
   TIM4_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; 
   TIM4_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
   TIM4_ICInitStructure.TIM_ICFilter = 0x00;
   TIM_ICInit(TIM4, &TIM4_ICInitStructure);

  NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; 
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
NVIC_Init(&NVIC_InitStructure);  

TIM_ITConfig(TIM4, TIM_IT_Update|TIM_IT_CC1,ENABLE);

   TIM_Cmd(TIM4,ENABLE ); 
这是初始化的源码
回复

使用道具 举报

19

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-9-3
在线时间
7 小时
 楼主| 发表于 2015-6-28 15:21:00 | 显示全部楼层
回复【4楼】Admin:
---------------------------------
我初始化参数为: TIME4_int(0XFFFF,71) ;
中断服务函数里面两个都清中断
void TIM4_IRQHandler(void)


if (TIM_GetITStatus(TIM4, TIM_IT_CC1) != RESET)
{
TIM_ClearITPendingBit(TIM4, TIM_IT_CC1|TIM_IT_Update); 
count++;
}
}
我是单步调试看的,每次都卡在这句话上
回复

使用道具 举报

19

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-9-3
在线时间
7 小时
 楼主| 发表于 2015-6-29 09:56:15 | 显示全部楼层
找到原因了,是因为中断服务函数没有清更新中断的原因
回复

使用道具 举报

20

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2016-4-8
在线时间
15 小时
发表于 2016-11-11 21:58:56 | 显示全部楼层
我也出现了这个问题!请问你是怎么解决的呀。。你回答的原因我有点看不懂。。可以说的清楚点吗
回复

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2016-8-5
在线时间
23 小时
发表于 2017-4-26 10:37:51 | 显示全部楼层
feibosu 发表于 2016-11-11 21:58
我也出现了这个问题!请问你是怎么解决的呀。。你回答的原因我有点看不懂。。可以说的清楚点吗

他没有单独列更新中断的东西,有没有单独清除。如果,并没有发生捕获事件,但是发生了溢出事件,则会出现问题。因此只要在中断函数中加入
if(TIM_GetITStatus(TIM4 , TIM_IT_Update) == RESET)
{
     TIM_ClearITPendingBit(TIM4 , TIM_IT_Update);
}

这样就可以了
回复

使用道具 举报

15

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2016-9-26
在线时间
43 小时
发表于 2017-9-17 11:25:52 | 显示全部楼层
feibosu 发表于 2016-11-11 21:58
我也出现了这个问题!请问你是怎么解决的呀。。你回答的原因我有点看不懂。。可以说的清楚点吗

确实就像楼主说的,,我遇到同样情况, 原因出在自己没有在 中断服务函数中 清除中断
回复

使用道具 举报

5

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2017-4-27
在线时间
58 小时
发表于 2018-5-4 23:10:50 | 显示全部楼层
本帖最后由 sjh2101 于 2018-5-7 21:30 编辑

[size=13.3333px]追加:后来问题莫明消失了。我做了如下改动,先初始化usart,在tim。大家可以试试看。
我也出现了这个问题,stm32f103,iar环境。stlinkv2仿真器。TIM_ITConfig(TIM4,        TIM_IT_Update,ENABLE);死在这句上。

现在没有解决。tim4无法完成初始化,而且程序跳转到usart的发送等待完成标志语句。

百思不得其解。如果注释掉tim4初始化函数,一切ok。求高手指点一二破解!
同样的问题在 http://www.openedv.com/forum.php?mod=viewthread&tid=54566 上也出现了。
以下是stmcu的回复
*********************************************************
你说TIM4初始化失败或无效,有可能性有管脚冲突。
但你说死在这句上TIM_ITConfig(TIM4,        TIM_IT_Update,ENABLE);
什么情况下发生认为死在这句上?一般来讲,这句初始化代码本身不会有问题
的,无所谓死不死的问题,往往是因为它的运行引起了其它结果甚至连锁反应。
但从你给过来的链接信息,结合你的反馈基本可以断定是中断问题。
你检查下TIM4相关中断服务程序是否有清除相关中断标志,否则会没完没了
的进中断导致死机一般。也就是说并非死在那句上,只是异常跟那句代码有关联。
建议你在刚才那句代码前先 加一句 TIM_ClearFlag(TIMx, TIM_FLAG_Update);
*********************************************************
回复结束
调试过程中出现过仿真环境抽筋的现象。
[size=13.3333px]后来问题莫明消失了。我做了如下改动,先初始化usart,在tim。大家可以试试看


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 17:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表