AnsweredAssumed Answered

STM32F107 Custom Bootloader - System Clock configuration

Question asked by Greusard Alexandre on Feb 22, 2018
Latest reply on Feb 22, 2018 by Clive One

Hello everyone.


I'm making a custom bootloader for my stm32f107 wich jump to my application location.


My application just toggle a led using timer interuption and send me caracters using USART.


When I flash it using st-flash it works perfectly, but after the jump form bootloader not (LED is toggling slower than expected and USART send me wrong characters..)


I change the .ld of the application

ROM (rx)        : ORIGIN = 0x800C000, LENGTH = 256K-0xC000


Here is my bootloader code:


#define APPLICATION_ADDRESS        0x0800C000


typedef void (*pFunction)(void);
pFunction appEntry;
uint32_t appStack, test, i;


int main(void)

    __disable_irq();   // not sure of the utility

    appStack = (uint32_t) *((__IO uint32_t*)APPLICATION_ADDRESS);

    appEntry = (pFunction) *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);








    return 0;

Here is my application code:


void main()
    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0xC000);












void SetSysClockTo72(void)
    RCC_DeInit ();                        // RCC system reset(for debug purpose)
    RCC_HSEConfig (RCC_HSE_ON);           // Enable HSE


    // Wait till HSE is ready
    while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);


    RCC_HCLKConfig   (RCC_SYSCLK_Div1);   // HCLK   = SYSCLK
    RCC_PCLK2Config  (RCC_HCLK_Div1);     // PCLK2  = HCLK    (APB2)
    RCC_PCLK1Config  (RCC_HCLK_Div2);     // PCLK1  = HCLK/2  (APB1)
    RCC_ADCCLKConfig (RCC_PCLK2_Div4);    // ADCCLK = PCLK2/4


    *(vu32 *)0x40022000 = 0x01;           // Flash 2 wait state


    // PLLCLK = 8MHz * 9 = 72 MHz
    RCC_PLLConfig ((uint32_t)0x00010000, RCC_PLLMul_9);


    // Enable PLL


    // Attente synchronisation PLL
    while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);


    // Select PLL as system clock source


    // Wait till PLL is used as system clock source
    while (RCC_GetSYSCLKSource() != 0x08);




If anyone have a clue I would be very grateful!


I can add the rest of the code if needed!