> 文章列表 > stm32cubemx IAP升级(二)

stm32cubemx IAP升级(二)

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升级(二)

2、配置iic为从设备,并配置DMA
stm32cubemx IAP升级(二)
stm32cubemx IAP升级(二)
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");#endifprintf("\\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”);