v115488 发表于 2023-10-12 21:51 不要过于相信proteus,要相信物理定律 |
首先感谢您的回复,跟您添麻烦了,问题已解决 过程是这样的: 今天把代码反复改了又改,仿真的时候按一下k3,CPU总是飚的70%,然后和昨天一样报错,自动终止仿真. 屏蔽掉中断,代码都精简到只有按键和翻转了,还是飚70%. 我才意识到可能是Protues这边出问题了. 你仿真正常 然后我就对比我们两个的线路,发现你用的是单个电阻,我用的是排阻,果断拆除排阻,问题完美解决,再次感谢 讨论: 排阻不是单电阻的集合体吗,Protues出BUG了? |
xuyaqi 发表于 2023-10-12 10:21 ![]() |
v115488 发表于 2023-10-11 21:04 改了后的效果。 ![]() |
v115488 发表于 2023-10-11 21:04 中断里不要用延时,我把中断屏蔽后功能是正常的, ![]() |
v115488 发表于 2023-10-11 21:04 在初始化里加上 INT0 = 1; 在中断里把if比较去掉试一下 因为K3为低电平时 就进中断了 要不把2个延时都去掉,中断里只保留1句LED取反 试一下看进不进中断 |
xuyaqi 发表于 2023-10-11 20:15 试了,同样报错,下到板子上,和仿真效果一样 |
在使用Proteus进行STM32单片机仿真时,某些情况下会发现中断无反应的现象,即中断未能正常触发或中断触发后程序无法正常运行。这种问题可能会对开发过程造成严重影响,所以我们需要找出问题的原因并解决它。 首先,我们需要确认中断向量表是否正确。在STM32中,中断向量表存储在存储器的前面一段,它是中断服务程序的入口地址。如果中断向量表设定错误,将会导致中断无法正常触发。在Proteus仿真中,可以使用Debug功能验证向量表的位置和地址是否正确。 其次,检查中断服务程序是否正确编写。中断服务程序一般由ISR函数(中断服务函数)和IRQ函数(中断请求函数)两部分组成。中断请求函数将中断请求标志位清零并跳转到中断服务函数,ISR函数处理中断请求并返回原程序。如果这两部分出现了错误,就会导致中断无反应。在Proteus仿真中,可以使用Debug功能逐行调试中断服务程序,查看程序执行情况是否正确。 第三,检查中断优先级设置是否正确。在STM32中,不同的中断优先级可能会产生中断嵌套,如果嵌套深度过大,将会导致CPU处理中断的效率降低。因此,我们需要根据实际应用需要,合理设置中断优先级,以避免出现中断嵌套的情况。在Proteus仿真中,可以使用NVIC Registers查看中断控制器中的优先级设置是否正确。 最后,检查硬件连接是否正确。在STM32中,一些外设和中断引脚通过外部中断连接,如果硬件连接出现问题将会导致中断无法正常触发。因此,我们需要仔细检查外设和中断引脚的连接是否正确。在Proteus仿真中,可以使用Schematic Editor查看连接是否正确。 总之,在Proteus仿真中,出现中断无反应的问题需要通过多种方法进行排查和解决。我们需要仔细检查中断向量表、中断服务程序、中断优先级设置和硬件连接等方面,以确保仿真能够正常进行,避免延误项目进度。 |
led=!led; 改成 led=~led; |