前言
本文介紹STM32F030系列芯片從BootLoader跳轉到應用程序,所需要的操作。以下以STM32F030C8T6為例。
正文
在STM32F030中,BootLoader程序存放在Flash中以0x08000000開始的地址。假設預留給BootLoader的空間為0x3000,即12K。則應用程序的起始地址為0x08003000。應用程序中,除了需要在Target中設置代碼存放地址,還要重定位向量表。然而M0不像M3那樣支持向量表重定位。具體看RM0360手冊45頁,截圖如下:
圖 1 硬件重定位
上圖給出了解決辦法,具體如下:
1.復制應用程序向量表到SRAM的起始地址。對應於應用程序Flash,向量表為從0x08003000開始的48×4個字節。具體向量表的大小需要根據啟動文件定義來計算。
代碼:memcpy((uint32_t*)0x20000000, (uint32_t*)0x08003000, 48*4);
2.設置為從SRAM啟動,這樣當發生異常時,就會跳轉到SRAM的起始地址部分,而該部分放置的正好是向量表。
代碼:SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);
以上代碼添加在應用程序最開始的地方。
3.在應用程序的Target菜單中,需要為向量表預留足夠的SRAM空間,48X4=192=0xC0,如圖2所示。
圖2 FLASH及SRAM設置
通過以上操作,程序即可從BootLoader正常跳轉到應用程序執行。
聲明
本文為Xavier_Tse原創作品。本文允許復制,修改,傳遞,但不允許用於商業用途。轉載請注明出處。本文發表於2017年3月28日。