一、通过STM32实现从Bootloader跳转至主程序
1.1 简介
- 在程序设计之前先划分内部flash区域
- 本文将boot区划分地址为: 0x08000000 ~ 0x0x08006FFF(可以根据需求自行划分),共28K(0x7000)
- 将主程序区划分地址为:0x08007000 ~ 0x0x08012FFF 共48K
- 本文根据串口打印信息判断跳转是否成功
- 注意事项: 控制Boot区程序不能超过28K大小,否则会损坏主程序
1.2 CubeMX配置
-
接下来即可生成工程
1.3 Bootloader程序
main.c
#include "stdio.h"
#define APPLICATION_ADDRESS 0x08007000 //跳转目标地址,主程序起始地址
typedef void (*pFunction)(void);
pFunction JumpToApplication;
uint32_t JumpAddresss;
/*printf 重定向*/
int fputc(int ch, FILE * f)
{
HAL_UART_Transmit(&huart3, (uint8_t *) &ch, 1, 0xFFFF);
return ch;
}
void jump_to_APP(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART3_UART_Init();
/* USER CODE BEGIN 2 */
printf("boot....\r\n");
HAL_Delay(1000);
jump_to_APP();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
void jump_to_APP(void)
{
if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
{
printf("bootloader to APP\n");
JumpAddresss = *(__IO uint32_t*)(APPLICATION_ADDRESS+4);
JumpToApplication = (pFunction)JumpAddresss;
__set_MSP(*(__IO uint32_t*)APPLICATION_ADDRESS);
JumpToApplication();
}
else
{
printf("Jump to APP failed!\r\n");
__disable_irq();
NVIC_SystemReset();
}
}
1.4 主程序
- CubeMX配置bootloader程序配置一样
- main.c
#include "stdio.h"
/*printf 重定向*/
int fputc(int ch, FILE * f)
{
HAL_UART_Transmit(&huart3, (uint8_t *) &ch, 1, 0xFFFF);
return ch;
}
int main(void)
{
HAL_Init();
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART3_UART_Init();
/* USER CODE BEGIN 2 */
printf("start....\r\n");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
printf("111111\r\n");
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
注意修改以下内容:
1.5 将主程序,boot程序都烧录进去后,运行如下:
文章来源:https://www.toymoban.com/news/detail-831168.html
小白一枚,有不对的地方欢迎指教文章来源地址https://www.toymoban.com/news/detail-831168.html
到了这里,关于STM32 boot启动程序跳转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!