我已经为
STM32G030K8 编写了自定义引导加载程序 + 最终用户应用程序。
当我单独运行引导加载程序时,引导加载代码按预期工作
当我从地址 0x0800000 运行用户应用程序时,代码工作正常。
但是在我进行更改以能够构建和调试引导加载程序 + 最终用户应用程序之后,有些事情出错了......
1) 在最终用户应用程序 system_stm32g0xx.c 中,我更改了 vect 选项卡偏移量
#defineVECT_TAB_OFFSET 0x00005800U
2) 在最终用户应用程序 STM32G030K8TX_FLASH.ld 中,我更改了原始 FLASH (rx):ORIGIN = 0x8005800,LENGTH = 40K
3) 在引导程序应用程序 STM32G030K8TX_FLASH.ld 中,我更改了长度
闪存 (rx):原点 = 0x8000000,长度 = 22K
(2k用于向flash写入数据)
当我使用上述设置运行调试器时,调试器从最终用户应用程序的 main(void) 开始?我希望调试器会在引导加载程序的主程序中启动。
但是当我按下复位芯片按钮时,
调试器跳转到引导加载程序的第一行(如预期的那样)。
此时调试器开始运行引导加载程序,并按设计跳转到最终用户主循环,因此引导加载程序完成了我需要做的事情。
在最终用户应用程序主循环中,我可以逐步执行所有操作,直到触发第一个计时器 16 中断,当发生这种情况时,代码将在 b 无限循环中运行...
- /**
- * @brief This is the code that gets called when the processor receives an
- * unexpected interrupt. This simply enters an infinite loop, preserving
- * the system state for examination by a debugger.
- *
- * @param None
- * @retval None
- */
- .section .text.Default_Handler,"ax",%progbits
- Default_Handler:
- Infinite_Loop:
- b Infinite_Loop
- .size Default_Handler, .-Default_Handler
中断向量似乎位于错误的地址。我错过了什么?
0