当前位置:   article > 正文

STM32F103 IAP升级----Bootloader+APP(FreeRTOS)_stm32iap升级bootoader跳转到freertos列机

stm32iap升级bootoader跳转到freertos列机
  1. 环境:

STM32F103C8T6,keil5

  1. Flash分配:

Boot地址:0x08000000,大小:16K

App地址:0x08004000, 大小:48K

  1. IAP跳转程序

  1. if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
  2. {
  3. Serial_PutString("Start program execution......\r\n\n");
  4. __set_PRIMASK(1); /*关闭全局中断,APP程序中带有RTOS时,这个很重要*/
  5. /* 关闭滴答时钟,复位*/
  6. SysTick->CTRL = 0;
  7. SysTick->LOAD = 0;
  8. SysTick->VAL = 0;
  9. HAL_SuspendTick(); // 挂起滴答定时器
  10. /* 设置所以时钟默认状态 */
  11. HAL_RCC_DeInit();
  12. /* 关闭所有中断,清除中断挂起标志 */
  13. for (i = 0; i < 8; i++)
  14. {
  15. NVIC->ICER[i]=0xFFFFFFFF;
  16. NVIC->ICPR[i]=0xFFFFFFFF;
  17. }
  18. /* execute the new program */
  19. JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
  20. __set_PSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
  21. /* Jump to user application */
  22. JumpToApplication = (pFunction) JumpAddress;
  23. /* Initialize user application's Stack Pointer */
  24. __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS); /* 设置主堆栈指针 */
  25. /* 在 RTOS 工程,这条语句很重要,设置为特权级模式,使用 MSP 指针 */
  26.     __set_CONTROL(0);
  27. JumpToApplication();
  28. }
  1. APP程序

APP程序按照正常的用户程序编写,编写完成之后修改中断偏移量,修改keil中地址。

4.1 修改中断偏移量

修改前:

修改后:

4.2修keil中的地址:

修改前:

修改后:

  1. 总结

(1)APP程序在裸机运行的情况下,Bootloader程序在跳转应用程序之前不关闭中断,跳转后应用程序可以正常运行。

(2)APP程序在FreeRTOS运行的情况下,Bootloader程序在跳转应用程序之前必须关闭中断,否则跳转后应用程序会跑飞。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/845763
推荐阅读
相关标签
  

闽ICP备14008679号