Цитата(AVNN @ Mar 7 2015, 22:51)

В заводской загрузчик на STM32F205 вхожу так:
Код
#define BOOTLOADER_ADDR 0x1FFF0000
typedef void (*pFunction)(void);
pFunction Jump_To_Bootloader;
uint32_t JumpAddress;
JumpAddress = *(__IO uint32_t*) (BOOTLOADER_ADDR + 4);
Jump_To_Bootloader= (pFunction) JumpAddress;
/* Initialize Stack Pointer */
__set_MSP(*(__IO uint32_t*) BOOTLOADER_ADDR );
Jump_To_Bootloader();
На других STM-ках возможно что-то подобное можно сделать.
Что-то у меня не получается. Контроллер STM32F103RET6
Доходит до Jump_To_Bootloader() (брейкпоинтмами проверял) а дальше тишина. У меня бутлодер по адресу 0x08000000 (Я и этот адрес подставлял и тот что в предложенном коде) - бутлодер не запускается. Точнее не запускается все то, что он должен расшевеливать (у меня для отладки диод моргает). Если остановить программу (я отлаживаю в KEIL), то показывает адрес 0x08000182. Так значит он все-таки прыгает на начало флеша?
Пробовал даже таблицу векторов предварительно обратно переносить - не получается.
Как мне понять, что происходит?
Из будтлодера же прыгает в основную программу нормально
Код
/* Test if user code is programmed starting from address "ApplicationAddress" */
if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
{
/* Jump to user application */
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
Jump_To_Application = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) ApplicationAddress);
Jump_To_Application();
}
Сообщение отредактировал Pilatus - Jan 6 2017, 21:45