你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

更改定时器中断函数中的flag的值后,程序跑飞了,是什么原因?

[复制链接]
KingFly 提问时间:2023-9-26 01:35 / 未解决
芯片用的是stm32f407igt6,开发环境是cubeide
具体问题如下:
        在TIM7的中断函数里,通过改变flag的值,控制单片机执行不同的函数。flag=0执行函数1,flag=1执行函数2。
        用cubeide debug的时候,在观察窗切换flag的值,中断执行十多二十次之后,就跑飞了!并且无法改变flag的值。
        在cubeIDE里按暂停或者停止都没有响应,先按了停止再按暂停,IDE才会停下来并且报错。
求问是什么原因。。
函数2里程序比较多,正常执行的话需要30多us,TIM7中断的周期设置成100us,按理说也不应该算不完啊。。
因为最小系统板是自己设计的,不排除硬件上的问题。但之前用keil调试时都没有出现类似的情况。。。
求大佬解答
收藏 评论7 发布时间:2023-9-26 01:35

举报

7个回答
STMCU-管管 回答时间:2023-9-26 08:18:07
可能是你中断处理函数中的代码执行时间过长导致的
STM1024 回答时间:2023-9-26 09:09:40

你的flag是全局变量吗?把flag换成全局变量以后再测试一下?

butterflyspring 回答时间:2023-9-26 09:46:08
可以让TIME 7 中断里翻转个IO试试。
如果不能连续输出,就查查中断什么时候被改了。
如果能连续输出,就要检查逻辑什么时候断档了。
xmshao 回答时间:2023-9-26 10:16:39
你可以这样试试:将flag设置成 全局 volatile型变量,同时,基于flag值的判断而去执行相应函数的动作,不放在中断里进行 而放到主程序里去执行。
KingFly 回答时间:2023-9-26 10:51:24
butterflyspring 发表于 2023-9-26 09:46
可以让TIME 7 中断里翻转个IO试试。
如果不能连续输出,就查查中断什么时候被改了。
如果能连续输出,就要 ...

我就是在里面翻转IO来看有没有进中断的
改了flag后,进中断十多次就进不去了
KingFly 回答时间:2023-9-26 23:36:43
已解决
一开始以为是算法运行超时,导致无法进入中断之类的问题,但后来把算法全部注释掉,只在IDE的观察窗中修改flag,仍然会跑飞。甚至修改一个程序中完全不会出现的变量,依然跑飞,遂意识到应该是仿真器和mcu之间的通信出了问题。于是把程序移植到keil里,很顺畅,一点问题都没了。
应该还是仿真器和cubeIDE不匹配导致的,毕竟板子是st的,开发环境也是st的,配个盗版仿真器,怎么可能用的舒服。。。
我的仿真器是300多从淘宝买的jlink,唉
STM1024 回答时间:2023-9-27 09:27:05

KingFly 发表于 2023-9-26 23:36
已解决
一开始以为是算法运行超时,导致无法进入中断之类的问题,但后来把算法全部注释掉,只在IDE的观察窗 ...

那你直接用stlink,正版的也不贵,有时候工具确实能搞死人

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版