Skip to main content
TPham.10
Associate II
September 1, 2018
Question

Jump application bootloader 0x8003000 interrupt not working

  • September 1, 2018
  • 4 replies
  • 1392 views

hi guys!

Can you help me solve that problem:

I had write bootloader for stm32F300rct6, program have jump to main application success but interrupt not working. I don't know what is missing? 

In main application i edit #define FLASH_BASE ((uint32_t)0x08000000) to ((uint32_t)0x08003000). i had wirte on stm32f1 and F3 it's working and F1 & F3 have NVIC_SetVector but F0 don't have.

Thanks!

    This topic has been closed for replies.

    4 replies

    Tesla DeLorean
    Guru
    September 1, 2018

    For the CM0 parts you have to copy the vector table into the from of the SRAM, and then remap the SRAM to Zero.

    For the CM0+ based parts there is a SCB->VTOR so you can point to a new table.

    Look for some IAP examples in the HAL trees.

    Tips, Buy me a coffee, or three.. PayPal VenmoUp vote any posts that you find helpful, it shows what's working..
    TPham.10
    TPham.10Author
    Associate II
    September 1, 2018

    Hi, STM32F0 don't have SCB->VTOR

    TPham.10
    TPham.10Author
    Associate II
    September 1, 2018

    I use function remap table:

    void Remap_Table(void)

    {

      // Copy interrupt vector table to the RAM.

      volatile uint32_t *VectorTable = (volatile uint32_t *)0x20000000;

      uint32_t ui32_VectorIndex = 0;

      for(ui32_VectorIndex = 0; ui32_VectorIndex < 48; ui32_VectorIndex++)

      {

        VectorTable[ui32_VectorIndex] = *(__IO uint32_t*)((uint32_t)FLASH_BASE + (ui32_VectorIndex << 2));

      }

      // Enable SYSCFG peripheral clock

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE) ;

      // Remap RAM into 0x0000 0000

      SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);

    }

    and Set IROM1:start 0x8003000(application address) IRAM1:Start 0x200000C0 it's working but i don't kown why i'm set IRAM1:Start 0x20000000 then It's not working.

    Tesla DeLorean
    Guru
    September 1, 2018

    Well you advance the IRAM1 base to 0x200000C0 to carve out space for the table, and the linker doesn't put other things there.

    Other things to consider are if you disable interrupts from the boot loader side, or if you call from an IRQ Handler (or callback)

    Tips, Buy me a coffee, or three.. PayPal VenmoUp vote any posts that you find helpful, it shows what's working..