- 主题:STM32遇到一个外部中断诡异问题,求支招!
最近遇到个诡异问题,板上有没有兄弟看看等否提供点排查思路。
一个小项目,用了stm32g030f6p6,外围电路极其简单,使用内晶振,nrst接100nf电容形成上电复位电路(手册上推荐的电路)。其他就是按键和led。
先定义两个概念: “第一次上电”:距离上一次下电5分钟以后的第一次上电。“其他上电”:第一次上电后下电再上电,时间间隔几秒到一两分钟。
电路的功能是:上电后按按钮一次,触发一次中断,对应的led翻转一次,(就这么简单,简直就是开发板例程级别)
问题是:第一次上电的时候,只要一使能外部中断,马上就会触发一次外部中断(但是此时,外部中断GPIO信号没有翻转,没有上升沿产生,示波器实际测量证实的),无论我什么时候(延迟1s,5s,30s都试过)使能这个中断都会在“第一次上电”时直接触发这个中断。
这种情况下,马上下电,间隔数s到一两分钟再上电,则一切功能和我设计的逻辑功能一样,不会有任何异常了。即“其他上电”时,不会在使能外部中断的同时马上就触发该外部中断,而是会等待真实的外部中断触发信号到来才会触发第一次中断。
排查过电源上电、上电复位、按钮gpio信号(中断触发信号),在“第一次上电”和“其他上电”时刻完全相同,没有任何差别,包括上电复位rc时序都是完全一致的。
百思不得其解,有否板友提供点思路呢?
--
FROM 101.229.127.*
多做几块板子,看看多块板子是否一样的现象,可以初步判断出来是设计问题还是焊接问题(比如个别元器件虚焊)。
【 在 HxSailor 的大作中提到: 】
: 最近遇到个诡异问题,板上有没有兄弟看看等否提供点排查思路。
: 一个小项目,用了stm32g030f6p6,外围电路极其简单,使用内晶振,nrst接100nf电容形成上电复位电路(手册上推荐的电路)。其他就是按键和led。
: 先定义两个概念: “第一次上电”:距离上一次下电5分钟以后的第一次上电。“其他上电”:第一次上电后下电再上电,时间间隔几秒到一两分钟。
: ...................
--
FROM 122.238.143.*
按钮不按下时是高还是低?
假设是高,上电的时候IO先设置为输出高,再设置为输入上拉,然后delay一会儿,再使能中断试试。
--
FROM 223.72.41.*
完全一样,20几块板子
【 在 ECUCoder 的大作中提到: 】
: 多做几块板子,看看多块板子是否一样的现象,可以初步判断出来是设计问题还是焊接问题(比如个别元器件虚焊)。
:
--
FROM 101.229.127.*
按钮上拉输入,你这个确实下午可以试试,也应该是一种规避措施。
其实我是找到了规避的措施,但是那次异常的中断还是会进入,只是通过其他的方式在中断处理程序里和主机配合让总体影响没有了。
现在是想找到根因。
百度有找到使能定时器中断即触发中断的案例,但是那个是每次上电都会,和我这个还不太一样。所以很疑惑。
【 在 Fiber1230 的大作中提到: 】
: 按钮不按下时是高还是低?
: 假设是高,上电的时候IO先设置为输出高,再设置为输入上拉,然后delay一会儿,再使能中断试试。
--
FROM 101.229.127.*
使能前清一下外部中断的pending bit试试
【 在 HxSailor 的大作中提到: 】
: 最近遇到个诡异问题,板上有没有兄弟看看等否提供点排查思路。
: 一个小项目,用了stm32g030f6p6,外围电路极其简单,使用内晶振,nrst接100nf电容形成上电复位电路(手册上推荐的电路)。其他就是按键和led。
: 先定义两个概念: “第一次上电”:距离上一次下电5分钟以后的第一次上电。“其他上电”:第一次上电后下电再上电,时间间隔几秒到一两分钟。
: ...................
--
FROM 113.116.88.*
如果是配置了GPIO之后马上使能了中断,这个操作本身是有风险的,从外部的pin到内部读取状态,中间是有buffer的。
【 在 HxSailor 的大作中提到: 】
: 按钮上拉输入,你这个确实下午可以试试,也应该是一种规避措施。
: 其实我是找到了规避的措施,但是那次异常的中断还是会进入,只是通过其他的方式在中断处理程序里和主机配合让总体影响没有了。
: 现在是想找到根因。
: ...................
--
FROM 223.72.41.*
开启中断前, 没有清除标志位?
【 在 HxSailor 的大作中提到: 】
: 最近遇到个诡异问题,板上有没有兄弟看看等否提供点排查思路。
: 一个小项目,用了stm32g030f6p6,外围电路极其简单,使用内晶振,nrst接100nf电容形成上电复位电路(手册上推荐的电路)。其他就是按键和led。
: 先定义两个概念: “第一次上电”:距离上一次下电5分钟以后的第一次上电。“其他上电”:第一次上电后下电再上电,时间间隔几秒到一两分钟。
: ...................
--
FROM 42.198.64.*
我在你说的这个地方加过延时,没有得到改善。
【 在 Fiber1230 的大作中提到: 】
: 如果是配置了GPIO之后马上使能了中断,这个操作本身是有风险的,从外部的pin到内部读取状态,中间是有buffer的。
--
FROM 101.229.127.*
这个我现在的版本确实没有清,但是为什么会导致首次上电和接下来的其他上电表现不同呢? 断掉的电源都是一样的,只是时间间隔长短的问题。
我在stm32f1的开发板上搭了一个同样的电路,同样的操作,却完全每次都正常,同样在使能中断前也没清中断状态位。
考虑到g030使用的内部晶体,原先是觉得掉电时间不够长的话可能内部某些状态没有完全恢复到初始状态,于是在单片机供电平面上试验了加小阻值放电电阻,没有改善。可能内部电荷释放的通道层级更高,不在入口电源处。
【 在 Mikov 的大作中提到: 】
: 开启中断前, 没有清除标志位?
:
--
FROM 101.229.127.*