我尝试为 STM32L1 系列卡创建自定义引导加载程序,我需要将引导加载程序代码放在闪存底部。然后我可以正确地闪现我的内存。 我知道它可以在链接脚本中指定,但我不知道该怎么做。 我这样声明我的引导加载程序部分:
.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
}
有人知道命令吗?
最佳答案
这是我的链接器脚本,我尝试了一些新的内存部分
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 510K
MEM_BOOT (rx) : ORIGIN = 0x0807CFFE, LENGTH = 2K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 80K
MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K
}
/* Define output sections */
SECTIONS
{
/* The startup code goes first into FLASH */
.isr_vector :
{
. = ALIGN(4);
KEEP(*(.isr_vector)) /* Startup code */
. = ALIGN(4);
} >FLASH
.bootsection :
{
. = ALIGN(4);
KEEP(*(.bootsection)) /* Bootloader code */
. = ALIGN(4);
} >MEM_BOOT
这是我的启动代码,我写了闪存程序,但删除程序还没有写。
#define MY_BL_FUNCTIONS __attribute__((section(".bootsection")))
void BootLoader(void) MY_BL_FUNCTIONS;
uint8_t Flash_Write ( uint32_t StartAddress, uint8_t *p, uint32_t Size ) MY_BL_FUNCTIONS;
void BootLoader(void) {
char buffer[1000];
int i = 0;
/*test if we enter the bootloader , toggle the led and send a string to the usart */
GPIO_ToggleBits(GPIOA, GPIO_Pin_5);
do {
buffer[i] = Uart2ReadChar();
i++;
} while (buffer[i] != '\0');
SendString(buffer,USART2);
}
uint8_t Flash_Write ( uint32_t StartAddress, uint8_t *p, uint32_t Size )
{
uint32_t idx;
uint32_t Address;
__IO FLASH_Status status = FLASH_COMPLETE;
Address = StartAddress;
/* Unlock the FLASH Program memory */
FLASH_Unlock ( );
/* Clear all pending flags */
FLASH_ClearFlag ( FLASH_FLAG_EOP |
FLASH_FLAG_WRPERR |
FLASH_FLAG_PGAERR |
FLASH_FLAG_SIZERR |
FLASH_FLAG_OPTVERR );
while ( Address < StartAddress + Size )
{
status = FLASH_FastProgramWord ( Address, *(uint32_t *)p );
Address = Address + 4;
p = p + 4;
if ( status != FLASH_COMPLETE ) return status;
}
/* Lock the FLASH Program memory */
FLASH_Lock ( );
return (uint8_t)status;
}
关于c - 在FLASH存储器底部放一个bootloader程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30780099/