STM32F103 Невозможно перейти к загрузчику из приложения - PullRequest
0 голосов
/ 30 марта 2020

Я бы хотел перейти к загрузчику из приложения на STM32 Blue Pill STM32F103C8T6. Мой подход выглядит так: - Напишите в BKP-> DR1 любое значение; - сделать сброс (NVIC_SystemReset ()); - В начале основного, проверьте, если BKP-> DR1! = 0, затем установите его в 0 и перейдите к загрузке;

Отладка показывает, что ядро ​​далеко уходит (0xfffffffe) и ничего не происходит. Мой код:

/*
 * bootloader.c
 *
 *  Created on: 28.03.2020
 *      Author: Admin
 */

#include "stm32f10x.h"
#include "../Logger/logger.h"
#include "core_cm3.h"

#define ADDR 0x1FFFF000

void (*f_boot_jump)();

void boot_jump_to_boot ()
{

    f_boot_jump = (void (*)(void)) (*((uint32_t *)(ADDR + 4)));
    __disable_irq();
    __DSB();
    SCB->VTOR = (uint32_t) ADDR;
    __DSB();
    __ISB();
    __set_MSP(*(__IO uint32_t*) ADDR);
    f_boot_jump();

}

void boot_init()
{
    RCC->APB1ENR |= RCC_APB1ENR_PWREN | RCC_APB1ENR_BKPEN;
    PWR->CR |= PWR_CR_DBP;

    if (BKP->DR1 != 0) //DR != 0 means, that boot request has been sent
    {
        BKP->DR1 = 0;
        RCC->APB1ENR &= ~RCC_APB1ENR_PWREN;
        RCC->APB1ENR &= ~RCC_APB1ENR_BKPEN;
        PWR->CR &= ~PWR_CR_DBP;
        RCC->CFGR &= ~RCC_CFGR_SW;
        RCC->CR &= ~RCC_CR_PLLON;
        RCC->CR &= ~RCC_CR_HSEON;
        boot_jump_to_boot();
    }

}

void boot_write_boot_request()
{
    BKP->DR1 = 0x1;
    NVIC_SystemReset();
}

SS из IDE: память регистров

Я понятия не имею, почему это не работает. Более того, перед прыжком память в области 0x1FFFF000 выглядит нормально: Перед прыжком

, а вот после неудачного перехода к загрузке: после прыжка Возможно, мой чип поддельный ? Утилита ST показывает правильные значения (идентификатор устройства, размер sh, MediumDensity), но может ничего не значить. Когда я использую контакты BOOT, загрузчик загружается правильно, и флэш-загрузчик STM распознает его. Даже если мой чип подделка, встроенный загрузчик работает, поэтому я не могу выяснить причину, почему переход из приложения не работает.

...