完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在研究STM32L4微控制器上的应用程序。我的想法是当我按下用户按钮时,引导加载程序从主应用程序(0x08000000)跳转到第二个(0x08080000)。 第二个固件只是一个闪烁的LED应用程序。跳跃很好,LED开始闪烁,但我的问题是,当我想从第二个应用程序返回到第一个应用程序(0x08000000)时,exti将无法工作! 这是我的代码: 第一个固件:
第二个固件的开头:
这是来自第二个固件的exti回调:
为什么这不起作用? |
|
相关推荐
6个回答
|
|
您打算如何从第二个应用程序“返回”到第一个应用程序?您是否打算将第二个应用程序简单地返回到第一个应用程序,就好像它是一个子例程一样?第二个应用程序是单独编译的,它有自己的启动代码吗?如果是这样,那么第二个应用程序的启动代码将重置堆栈并阻止您如此简单地返回到第一个应用程序。
|
|
|
|
thnx用于回复,返回第一个应用程序的方式与从第一个应用程序转到第二个应用程序的方式相同,方法是单击用户按钮。我已经分别测试了第二个应用程序,所以当我按下按钮时它会转到第一个应用程序,但是当我再次按下它时它永远不会回来
|
|
|
|
看起来您正在跳转到相同的应用程序地址,因此只需重新启动您的应用程序即可
|
|
|
|
不,我在第一个固件中声明了“APPLICATION_ADDRESS = 0x08080000”,在第二个固件中声明了“APPLICATION_ADDRESS = 0x08000000”。我很伤心,跳跃工作正常,但在第一次跳跃后停止工作,所以没有回头。这就像跳跃后中断停止工作。
|
|
|
|
您正在从中断serice例程中启动另一个应用程序,从不从中断处理程序返回。在执行适当的异常返回序列之前,系统不会执行相同的中断处理程序(或具有相同或更低优先级的任何其他处理程序)。在跳转到其他固件之前,您应该以某种方式退出所有活动的处理程序。
最简单的方法是volatile在中断处理程序中设置一个全局标志,并在主应用程序循环中定期检查它。 您也可以使用重置系统NVIC_SystemReset()。您需要一种检查和通信重置请求来自何处的方法,因为它总是转到第一个应用程序。 还要注意,__disable_irq;什么都不做,你需要()实际调用一个函数。启用和检查编译器警告始终是个好主意。 |
|
|
|
谢谢你,如果我从主要的第二个应用程序跳转,可以解决问题,exti将从第二个应用程序工作?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
969 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
954 浏览 2 评论
2066 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1162 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1587 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 13:35 , Processed in 0.649654 second(s), Total 84, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号