OpenEdv-开源电子网

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

通电启动后程序为什么会先进入一次中断

[复制链接]

41

主题

226

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
481
金钱
481
注册时间
2017-7-29
在线时间
233 小时
发表于 2020-12-29 17:32:07 | 显示全部楼层 |阅读模式
5金钱
个人做的一个项目,用到了ADC的模拟看门狗和DMA,设置模拟看门狗阈值的上下限分别是2.0V和1.5V,中断程序中执行一些其他指令,为了方便观察进入中断,中断里对LED灯进行点亮。1、正常运行都没什么问题,但是在断电后再通电启动,可以观察到LED灯被点亮,也就是进入了一次中断。
2、因为项目涉及到其他的一些初始化,这个中断在开启时是不能进入的,本想通过定时器等待一段时间再开启该中断,现象同上,依旧会在通电启动后进入中断。

3、经测试,该程序并非跑飞,其他外部中断响应正常。
4、经测试,通电启动后,如果通过debug企图复现,但debug中的RST并不能复现这种现象,该现象仅会在通电启动后的首次出现,手动通过单片机NRST复位后,也不会出现该现象。
所以这个通电启动后出现的异常,会是什么原因?有没有朋友碰到过。
对了,板子是自己画板打的,如果是硬件问题可能会出现在哪

最佳答案

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

最后设置了一个全局变量,由启动后延时一段时间再置1,通过该变量对中断内容进行判断是否执行,只能临时用这种办法了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

41

主题

226

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
481
金钱
481
注册时间
2017-7-29
在线时间
233 小时
 楼主| 发表于 2020-12-29 17:32:08 | 显示全部楼层
最后设置了一个全局变量,由启动后延时一段时间再置1,通过该变量对中断内容进行判断是否执行,只能临时用这种办法了
回复

使用道具 举报

3

主题

312

帖子

0

精华

高级会员

Rank: 4

积分
907
金钱
907
注册时间
2011-10-19
在线时间
196 小时
发表于 2020-12-29 22:23:47 | 显示全部楼层
应该是上电瞬间外部引脚电平处于不确定状态导致。硬件上,控制引脚要接好上下拉电阻,使其上电瞬间处理确定的电平状态。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-12-30 01:41:09 | 显示全部楼层
这个貌似不好避免,你在中断里面做些判定看看
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
发表于 2020-12-30 09:02:03 | 显示全部楼层
上电电压会上升至阈值,会进入中断一次。掉电电压下降,也会进入中断一次。你可以试试PVD模式,不知道你用这个具体做什么应用。
回复

使用道具 举报

41

主题

226

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
481
金钱
481
注册时间
2017-7-29
在线时间
233 小时
 楼主| 发表于 2020-12-30 10:36:05 | 显示全部楼层
ufbycd 发表于 2020-12-29 22:23
应该是上电瞬间外部引脚电平处于不确定状态导致。硬件上,控制引脚要接好上下拉电阻,使其上电瞬间处理确定 ...

确认应该是上电瞬间不确定状态导致的,但是因为是用来做AD检测的,那么这个IO口应该不可以接上下拉电阻吧?
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4477
金钱
4477
注册时间
2013-4-22
在线时间
336 小时
发表于 2020-12-30 16:30:03 | 显示全部楼层
你是在什么中断中点亮LED灯的?
回复

使用道具 举报

3

主题

312

帖子

0

精华

高级会员

Rank: 4

积分
907
金钱
907
注册时间
2011-10-19
在线时间
196 小时
发表于 2020-12-30 17:01:33 | 显示全部楼层
142zjb 发表于 2020-12-30 10:36
确认应该是上电瞬间不确定状态导致的,但是因为是用来做AD检测的,那么这个IO口应该不可以接上下拉电阻吧 ...

我说的是LED灯的控制电平。
回复

使用道具 举报

41

主题

226

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
481
金钱
481
注册时间
2017-7-29
在线时间
233 小时
 楼主| 发表于 2020-12-31 09:32:43 | 显示全部楼层
三叶草 发表于 2020-12-30 16:30
你是在什么中断中点亮LED灯的?

ADC中断,模拟看门狗,AD采集超过上下限进入中断
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4477
金钱
4477
注册时间
2013-4-22
在线时间
336 小时
发表于 2020-12-31 14:03:20 | 显示全部楼层
142zjb 发表于 2020-12-31 09:32
ADC中断,模拟看门狗,AD采集超过上下限进入中断

AD超过上下值进入中断,逻辑不对吧,你是用的ADC中断采样,然后才能获取值作为判断依据。不知道我的你能不能理解,还是我理解的正确。
回复

使用道具 举报

41

主题

226

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
481
金钱
481
注册时间
2017-7-29
在线时间
233 小时
 楼主| 发表于 2021-1-4 17:23:10 | 显示全部楼层
三叶草 发表于 2020-12-31 14:03
AD超过上下值进入中断,逻辑不对吧,你是用的ADC中断采样,然后才能获取值作为判断依据。不知道我的你能 ...

STM32有个模拟看门狗的功能,设置上下阈值来触发ADC中断,这个你可能没接触到不是很理解
回复

使用道具 举报

41

主题

226

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
481
金钱
481
注册时间
2017-7-29
在线时间
233 小时
 楼主| 发表于 2021-1-22 17:04:09 | 显示全部楼层
太难了,断电瞬间也会被误触发一次,导致一些变量的累计多+1,又是只能用歪门邪道,在累计前加延时,让断电结束在延时函数,不运行到累计的地方。不知道有没有人有更好的办法
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-14 09:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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