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

更改定时器中断函数中的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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版