OpenEdv-开源电子网

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

串口1中断程序只能进入一次,第二次进入不了

[复制链接]

12

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2014-10-24
在线时间
4 小时
发表于 2015-4-12 11:19:42 | 显示全部楼层 |阅读模式
5金钱
情况是这样的,
我的串口1中断程序只能进入一次,第二次进入不了
---------------------------------------------------------
我的分析:我在串口1的接收中断程序里(程序时间比较长)对另一个串口3执行了发送数据函数串口3返回数据,串口3发生接收中断,导致我串口1的中断函数没执行完就跳转到串口3中断函数
我的解决办法是在串口1中把串口3的接收中断关闭,不知道具体用哪条指令。
------------------------------------------------------------
上面是我的分析,可能不对,不知道原子哥或各路大神遇没遇到这种情况,是什么原因。
比较急!!!!!!!!!!!!!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11537
金钱
11537
注册时间
2014-4-1
在线时间
1314 小时
发表于 2015-4-12 13:06:57 | 显示全部楼层
当初是怎么打开的?反其道就行了。

ps:

1、中断服务程序比较长,这是编程的大忌。一定要闪退!要把杂务放在主程序里处理,这不难做到,调整一下物理流程就可以。

单片机编程,安排物理流程、处理时序是编程的灵魂,比写代码更重要。

2、一个中断没结束就进入另一个中断。。。这是 “中断嵌套” 的概念,51芯片有这功能,但STM32似乎没有。

回复

使用道具 举报

26

主题

261

帖子

1

精华

高级会员

Rank: 4

积分
734
金钱
734
注册时间
2013-11-1
在线时间
28 小时
发表于 2015-4-12 13:18:12 | 显示全部楼层
排除法,先用一个串口中断试一试,如果还有问题,就说明你分析的不对,如果没有这个问题了,那就说明你分析的大致是靠谱的
还有我担心是不是你把最基本的中断标志位清除你没有做?
回复

使用道具 举报

12

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2014-10-24
在线时间
4 小时
 楼主| 发表于 2015-4-12 14:10:36 | 显示全部楼层
回复【2楼】xuande:
---------------------------------
谢谢你的第一条建议,我尽量改
--------------------------
一个中断没结束就进入另一个中断。。。这是 “中断嵌套” 的概念,51芯片有这功能,但STM32似乎没有。
你的意思是stm32在执行中断程序的时候,其他中断发生也不会跳转到其他中断函数?
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11537
金钱
11537
注册时间
2014-4-1
在线时间
1314 小时
发表于 2015-4-12 21:57:38 | 显示全部楼层
回复【4楼】嗯啊:
---------------------------------

就是这个意思,即使第二个中断的优先级更高,也要等前一个中断完成、退出,才会被执行。优先级只有在“中断同时发生”时才有效。

我不能百分之百肯定,但目前我知道的信息就是这样。如果你的实验属实,那就推翻了我这个结论。但我很怀疑你的实验。
回复

使用道具 举报

18

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
金钱
283
注册时间
2015-11-12
在线时间
54 小时
发表于 2016-6-1 09:22:13 | 显示全部楼层
xuande 发表于 2015-4-12 21:57
回复【4楼】嗯啊:
---------------------------------

就是这个意思,即使第二个中断的优先级更高,也要等 ...

STM32中断是可以嵌套的吧,也是可以被抢占的吧。
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11537
金钱
11537
注册时间
2014-4-1
在线时间
1314 小时
发表于 2016-6-1 10:09:43 | 显示全部楼层
pthread 发表于 2016-6-1 09:22
STM32中断是可以嵌套的吧,也是可以被抢占的吧。


听人说过可以抢占,和51一样。
我自己没做过这样的实验。


回复

使用道具 举报

4

主题

290

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1130
金钱
1130
注册时间
2015-8-4
在线时间
107 小时
发表于 2016-6-1 11:13:26 | 显示全部楼层
STM32肯定是可以中断嵌套的,而且比51的先进。不过这种都太危险了,能不用就不用。还是改下软件流程来的实在。
活到老,学到老。
回复

使用道具 举报

1

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
228
金钱
228
注册时间
2015-9-17
在线时间
37 小时
发表于 2017-1-3 11:56:11 | 显示全部楼层
xuande 发表于 2015-4-12 21:57
回复【4楼】嗯啊:
---------------------------------

就是这个意思,即使第二个中断的优先级更高,也要等 ...

看这个回复时间已经很久了,但我还是想说一下我的理解:中断优先级分抢占优先级和子优先级,抢占优先级高的可以打断抢占优先级低的中断,也就是中断嵌套;而子优先级不可以,子优先级低的中断先发生时,有子优先级高的中断,则需等待子优先级低的完成才能进入,不能抢占。
很高兴同大家交流学习STM32的专业知识!
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11537
金钱
11537
注册时间
2014-4-1
在线时间
1314 小时
发表于 2017-1-3 20:47:10 | 显示全部楼层
可靠的蓄势 发表于 2017-1-3 11:56
看这个回复时间已经很久了,但我还是想说一下我的理解:中断优先级分抢占优先级和子优先级,抢占优先级高 ...


对,51内核就是这样。

回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-7-24
在线时间
1 小时
发表于 2017-8-28 11:05:42 | 显示全部楼层
用hal库的串口例程改的程序,运行了一段时间(大概一小时)进入了(HAL_UART_GetState(&UART1_Handler) != HAL_UART_STATE_READY)//等待就绪 超时处理后,一直无法再进入中断,请问如何处理
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-11-3
在线时间
4 小时
发表于 2019-11-26 20:54:44 | 显示全部楼层
itisliuyang 发表于 2017-8-28 11:05
用hal库的串口例程改的程序,运行了一段时间(大概一小时)进入了(HAL_UART_GetState(&UART1_Handler) != H ...

请问您这个问题解决了吗?我好像也出现了类似的问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 06:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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