Skip to main content
ricky
Visitor II
June 13, 2013
Question

STM32F051K6 NVIC_SetVectorTable

  • June 13, 2013
  • 4 replies
  • 1296 views
Posted on June 13, 2013 at 06:26

Dears,

Do STM32F0 support NVIC_SetVectorTable command?

I would like to point the vector table as my program start from 0x08001001

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x1000)

Thanks.

    This topic has been closed for replies.

    4 replies

    frankmeyer9
    Associate III
    June 13, 2013
    Posted on June 13, 2013 at 08:14

    No.

    The STM32F0xx is a Cortex M0, which have a fixed vector table address.

    You will need a M3 if you require this feature.

    Tesla DeLorean
    Guru
    June 13, 2013
    Posted on June 13, 2013 at 11:32

    On the STM32F0 the method employed to change the active vector table is to map/shadow the internal SRAM at zero, and copy the new vector table there, and not using that area for variables.

    Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
    gig
    Visitor II
    September 15, 2014
    Posted on September 15, 2014 at 22:12

    Hi Clive,

    Any could you provide any guidance on how I could do this? I want to write a bootloader and would beenefit fomr being able to do this.

    Tesla DeLorean
    Guru
    September 15, 2014
    Posted on September 15, 2014 at 22:33

    The IAP examples might be a good place to start, but the goal is to carve out enough space for the vectors, this means bumping up the 0x20000000 starting point as provided to the linker via the scatter file, or linker script, and then memcpy()ing the vector table from the base of the new image to the base of RAM, and then remapping the RAM

    /* Relocate by software the vector table to the internal SRAM at 0x20000000 ***/
     /* Copy the vector table from the Flash (mapped at the base of the application
     load address 0x08003000) to the base address of the SRAM at 0x20000000. */
     for(i = 0; i < 48; i++)
     {
     VectorTable[i] = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));
     }
     /* Enable the SYSCFG peripheral clock*/
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
    /* Remap SRAM at 0x00000000 */
    SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);

    http://www.st.com/web/en/catalog/tools/PF258152

    STM32F0xx_AN4065_FW_V1.0.0\Project\STM32F0xx_IAP\binary_template Watch that they reset the peripheral, not enable the clock.
    Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..