OpenEdv-开源电子网

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

定时器中断服务函数中调用系统定时器的延时函数,无法跳出。求助

[复制链接]

1

主题

5

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-7-8
在线时间
2 小时
发表于 2017-7-8 10:13:58 | 显示全部楼层 |阅读模式
1金钱
问题描述:
    在通用定时器中断服务函数中,调用了延时函数(如图感觉逻辑上是可行的,虽然这种做法不是很好)。


延时函数是系统定时器中定义的us延时函数,延时50us。定时器中断是五秒/每次。调试或者运行都无法跳出去该延时函数(该延时函数在外部运行是没问题的)。
不知道在这里无法跳出的原因是什么?

   



最佳答案

查看完整内容[请看2#楼]

如果硬件延时逻辑上是可以。。中断延时逻辑上是不行的。我记得SysTick的优先级很低、好像是最低的。。你在中断里面就不会触发SysTick中断。就没有TimingDelay--。。肯定就不行咯
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

175

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2016-4-30
在线时间
141 小时
发表于 2017-7-8 10:13:59 | 显示全部楼层
如果硬件延时逻辑上是可以。。中断延时逻辑上是不行的。我记得SysTick的优先级很低、好像是最低的。。你在中断里面就不会触发SysTick中断。就没有TimingDelay--。。肯定就不行咯
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-7-8
在线时间
2 小时
 楼主| 发表于 2017-7-8 10:19:33 | 显示全部楼层
问题图片补充

图1

图1

图1

图1
回复

使用道具 举报

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2017-3-9
在线时间
43 小时
发表于 2017-7-8 16:56:45 | 显示全部楼层
这是哪个型号芯片呀,中断函数名怎么长这模样
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-7-8
在线时间
2 小时
 楼主| 发表于 2017-7-8 17:09:12 | 显示全部楼层
蓝贝壳蜗牛 发表于 2017-7-8 16:56
这是哪个型号芯片呀,中断函数名怎么长这模样

F103ZET6  第一幅图是定时器中断函数。自己定义的函数名
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-7-8
在线时间
2 小时
 楼主| 发表于 2017-7-8 17:15:21 | 显示全部楼层
执迷 发表于 2017-7-8 15:54
如果硬件延时逻辑上是可以。。中断延时逻辑上是不行的。我记得SysTick的优先级很低、好像是最低的。。你在 ...

不是可以设置吗,我有试过设置。高或低于定时器中断都不行(不知道是不是设置方法不对)。
NVIC_InitTypeDef NVIC_InitStructure;
   
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);                                                      
    NVIC_InitStructure.NVIC_IRQChannel =SysTick_IRQn;      
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;   
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

系统滴答定时器中断

系统滴答定时器中断
回复

使用道具 举报

13

主题

175

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2016-4-30
在线时间
141 小时
发表于 2017-7-8 17:30:22 | 显示全部楼层
yixi 发表于 2017-7-8 17:15
不是可以设置吗,我有试过设置。高或低于定时器中断都不行(不知道是不是设置方法不对)。
NVIC_InitTy ...

不行吧
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-7-8
在线时间
2 小时
 楼主| 发表于 2017-7-8 18:35:36 | 显示全部楼层

也许真的不行。或许有什么规则限制什么的。我觉得我可以考虑换方法了。
万分感谢兄弟的回复。
回复

使用道具 举报

10

主题

80

帖子

0

精华

高级会员

Rank: 4

积分
514
金钱
514
注册时间
2017-5-21
在线时间
82 小时
发表于 2017-7-19 01:43:04 | 显示全部楼层
楼主我也遇到过这样的问题,昨天刚遇到,我问同学,他告诉我定时器里中断不能放延时,具体为啥也不是很清楚,而外部中断里放延时,我猜定时器是循环计数的缘故,导致进入中断就出不来,而外部中断就触发了一次中断,之后就不影响,所以外部中断里可以加延时。
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2020-6-22
在线时间
1 小时
发表于 2020-6-22 22:20:34 | 显示全部楼层
Anyint 发表于 2017-7-19 01:43
楼主我也遇到过这样的问题,昨天刚遇到,我问同学,他告诉我定时器里中断不能放延时,具体为啥也不是很清楚 ...

请问您现在搞懂这个问题了吗,新手上路,遇到一样的问题。。。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-7-10
在线时间
4 小时
发表于 2020-7-9 09:27:10 | 显示全部楼层
怎么解决的,我放了一个systick_delay,下面的程序就全都不执行了
回复

使用道具 举报

34

主题

255

帖子

0

精华

高级会员

Rank: 4

积分
912
金钱
912
注册时间
2019-7-5
在线时间
189 小时
发表于 2020-7-9 09:45:31 | 显示全部楼层
18862652752ysj 发表于 2020-7-9 09:27
怎么解决的,我放了一个systick_delay,下面的程序就全都不执行了

中断处理要迅速,最好不要放延时函数
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-29 15:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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