Vit (01.03.2019 09:41 - 10:29, просмотров: 160) ответил SciFi на Дык самый верный способ приблизиться к ресету - прыгать туда сразу после ресета. Ставим флаг, сбрасываем, и в самом начале прыгаем куда надо.
В первой строчке SystemInit вызываю функцию с ремапом и прочая. Через пару секунд после перехода прилетает на вектор ресет. Что с отладчиком, что без. Удалил дениты и пошло. Солянка вышла такой:
//gcc
#ifndef __NO_RETURN
#define __NO_RETURN __attribute__((noreturn))
#endif
static __NO_RETURN void Factory_Bootloader(void){
__HAL_RCC_SYSCFG_CLK_ENABLE();
__HAL_RCC_PWR_CLK_ENABLE();
__disable_irq();__ISB();
__HAL_REMAPMEMORY_SYSTEMFLASH(); __DSB(); __ISB();
//HAL_RCC_DeInit();
//HAL_DeInit();
typedef void (*pFunction)(void);
pFunction JumpToApplication;
JumpToApplication = (void (*)(void)) (*((uint32_t *) ((0x00000000 + 4))));
__set_MSP(*((uint32_t*) 0x1FFF0000));
JumpToApplication();
while(1);
}
Барьеры не вырезал, мешать не должны:)