此芯片共64K Flash,分區(qū)如下:
//0x08000000 - 0x08007800 : IAP - 30K - bootloader
//0x08007800 - 0x0800F800 : APP - 32K - 儲存本ROM運行內(nèi)容
//0x0800F800 - 0x08010000 : DAT - 2K -? 用戶數(shù)據(jù)
在IAP的程序里面,在下載之前會先清掉原來的APP部分程序:
? ? //save to the location
? ? FLASH_Unlock_Fast();
? ? FLASH_EraseBlock_32K_Fast(0x08007800);
? ? FLASH_Lock_Fast();
------------------------
非常奇怪,一運行到這行??FLASH_EraseBlock_32K_Fast(0x08007800)就死機(jī)了。
而且下面的回調(diào)沒有被執(zhí)行,只能強(qiáng)制斷電才能恢復(fù)。
void HardFault_Handler(void)
{
? ? printf("mepc? :%08x\r\n", __get_MEPC());
? ? printf("mcause:%08x\r\n", __get_MCAUSE());
? ? printf("mtval :%08x\r\n", __get_MTVAL());
? ? while(1);
}
注:IAP的編輯的信息
IAP的fd信息
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 64K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
IAP設(shè)置跳轉(zhuǎn)的信息:
void SW_Handler(void)
{
? ? printf("start user APP\r\n");
? ? __asm("li? a6, 0x7800");
? ? __asm("jr? a6");
? ? while(1);
}