【STM32學習筆記】STM32 BOOTLOADER配置以及APP跳轉

  大家好,今天給大家介紹的是STM32的BootLoader以及它如何跳轉運行到APP應用程序的例程。
  首先我先給大家科普一下什麼是BootLoader。

什麼是BootLoader?

Bootloader是硬件啓動的引導程序,是運行操作系統的前提。對硬件進行相應的初始化和設定,最終爲操作系統準備好環境。就像我們的電腦一樣,在開機的過程中可以通過F1或者其他的按鍵進入BOOT模式然後修改啓動參數和進入其他的鏡像系統。

什麼是APP?

APP就像是我們電腦的操作系統,經過硬件引導程序之後跳轉到系統程序運行。APP就是我們的應用程序。

STM32BootLoader&APP

stm32默認的是從0x08000000開始啓動程序,我們的BootLoader也是從0x08000000地址開始存儲的,大小可以根據自己的需要設置。如下圖舉例分配16K空間給BootLoader其餘的給APP和變量存儲。

內存分配 地址 大小
BootLoader 0x08000000 - 0x08004000 16K
APP 0x08004000 - 0x0800F000 44K
剩餘空間 0x0800F000 - 0x08010000 4K

這裏我列舉了一個表格,BootLoader 佔用16k,APP佔用44K,剩餘4K留給需要掉電保存的變量空間。
好了上面我給大家說明了程序的思路下面就是工程的配置和代碼部分了。

STM32BootLoader部分

這裏話不多說先上代碼

typedef void (*iapfun)(void);
iapfun jump2app;

void IAP_Load_App(volatile unsigned int appxaddr);

__asm void MSR_MSP(unsigned int addr)
{
			MSR MSP, r0
			BX r14
}


void IAP_Load_App(volatile unsigned int appxaddr)
{
	if(((*(volatile unsigned int*)appxaddr)&0x2FFE0000)==0x20000000) //
	{
        jump2app = (iapfun)*(volatile unsigned int*)(appxaddr+4);//
        MSR_MSP(*(volatile unsigned int*)appxaddr);//
        jump2app(); //
	}
}

int main(void)
{
  HAL_Init();
  
  SystemClock_Config();
  
  MX_GPIO_Init();
  
  if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == 0)
  {
	  HAL_DeInit();
	  IAP_Load_App(0x08004000);
  }
  
  while (1)
  {
	HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
	HAL_Delay(200);

  }

}

上面代碼寫了當PB0電平爲低電平就會跳轉到0x08004000FLASH這個地址去。這裏切記一定要把所有的配置設爲未初始化狀態。不然無法正常跳轉運行,會進入硬件錯誤中斷。HAL_DeInit(); 必須要有!
我這裏在BootLoader模式下,LED閃爍快速,APP模式下LED閃爍慢速方便驗證。

STM32APP部分

首先工程配置,因爲我們BootLoader配置了16K,所以我們的ROM偏移地址需要改變。修改如圖
在這裏插入圖片描述
這裏代表我們FLASH下載從這個位置下載進去。
還有就是我們要注意的是FLASH下載不能選全部擦出,要選部分擦除。如圖
在這裏插入圖片描述
全部擦除會把我們的BootLoader一起擦除了。
好了下面就是程序了

int main(void)
{

  SCB->VTOR = FLASH_BASE | 0X4000;

  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();

  while (1)
  {
	HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
	HAL_Delay(1000);	
  }

}

這裏就是重新定義中斷的向量表 SCB->VTOR = FLASH_BASE | 0X4000;
然後LED閃爍2秒閃爍一次,好了介紹完了程序能夠正常運行了。

如有什麼不懂聯繫加QQ羣:1063618791歡迎大家學習交流!

QQ:1320300083

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章