我正在用 C 语言为嵌入式卡 STM32L152RE 编写引导加载程序。在 USART 上发送消息时会调用此引导加载程序。它调用中断,并在收到消息时执行引导加载程序。然后,我必须用计算机在 USART 上发送的新 HEXA 代码刷新我的卡的内存并重置。
此时,我的引导加载程序能够响应中断并读取计算机发送的帧。
我只是不知道如何闪现我的记忆。我的库中有如下函数:FLASH_Unlock(void)、FLASH_ErasePage(uint32_t Page_Address) 和 FLASH_FastProgramWord(uint32_t Address, uint32_t Data)
我必须擦除闪存,但不是我的引导加载程序所在的部分。这就是为什么我像这样在链接器描述符中创建了一个新部分
.bootsection :
{
. = ALIGN(4);
KEEP(*(.bootsection)) /* Bootloader code */
. = ALIGN(4);
} >FLASH
我的记忆是这样排列的:MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 80K
MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K
}
我的问题是,当我用新程序擦除闪存时,如何保护我的引导加载程序不被擦除,以及如何使用从 USART 发送的 HEXA 代码正确地闪存我的闪存。