stm32cubemx IAP升级(二)

stm32cubemx IAP升级- App的制作

板卡:Nucleo-L412
平台:macbook pro
工具:vscode stm32cubemx stm32cubeProgramer cmake toolchain

整体思路

将App设置为从0x08007000地址启动,然后初始化一路串口用作接收上位机的升级数据,再初始化一路i ic设置为从机,用来接收上位记iic升级的数据。接收的数据按包写入Download分区,然后重启,由bootloader将数据copy到App区域,实现升级。

stm32cubemx配置

1、使能uart2并配置DMA
stm32cubemx IAP升级(二)_第1张图片

2、配置iic为从设备,并配置DMA
stm32cubemx IAP升级(二)_第2张图片
stm32cubemx IAP升级(二)_第3张图片
3、配置一个定时器,用来改变led的闪烁频率。
4、修改STM32L412RBTxP_FLASH.ld

/* Specify the memory areas */
MEMORY
{
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 40K
RAM2 (xrw)      : ORIGIN = 0x10000000, LENGTH = 8K
FLASH (rx)      : ORIGIN = 0x8007000, LENGTH = 50K
}

编译出来的bin文件,用stm32cubeProgrammer按0x08007000地址烧录进去,配合之前的bootloader就可以跳转到App程序。

我们添加打印

void print_text_message(void)
{
    #ifdef USER_APPLICATION_CODE   
    printf("|------------- Enter Application -------------|\r\n");
    #endif
    #ifdef USER_BOOTLOADER_CODE 
    printf("|------------- Enter BootLoader --------------|\r\n");
    #endif
    printf("\r\n");
    printf("Version: %s %s\r\n",APPCATION_VERSION_DATE,APPCATION_VERSION_TIME);
    printf("\r\n");
    printf("|----------L412 flash toal size 128K----------|\r\n");
    printf("\r\n");
    printf("|============ flash pration table ============|\r\n");
    printf("| name       | offset     | size              |\r\n");
    printf("|---------------------------------------------|\r\n");
    printf("| bootloader | 0x08000000 | 0x00005000   20K  | \r\n");
    printf("| setting    | 0x08005000 | 0x00002000   8K   |\r\n");
    printf("| App        | 0x08007000 | 0x0000C800   50K  |\r\n");
    printf("| download   | 0x08013800 | 0x0000C800   50K  |\r\n");
    printf("|=============================================|\r\n");
}

会打印出
printf(“|------------- Enter Application -------------|\r\n”);

你可能感兴趣的:(stm32,Iap升级,stm32)