STM32F4 Bootloader İnterrupt Problemi

Başlatan sasny, 11 Ocak 2018, 13:57:50

sasny

11 Ocak 2018, 13:57:50 Son düzenlenme: 11 Ocak 2018, 14:01:10 sasny
Herkese Merhabalar,

bir süredir STM32F407G serisi ile bootloader üzerine çalışmaktayım.Amacım flash memory'nin 0x08000000  adresinden 0x08010000 adresine kadar statik bootloader programının çalışması,
bu adresten itibaren ise  (0x08010000) applicationın çalışması.Bootloader'ın çalışmasının ardından 5 sn sonra applicationa 
geçiş yapıyorum ama aşağıda kodu bulunan JumpToBootloader fonksiyonu adrese geçtikten sonra
hiçbir interrupt çalışmıyor.Sistemin reset edilmesi,interruptlarrın sıfırlanması dahil vs. her şeyi yaptım ama yine de çözemedim.

İnternette denk geldiğim bazı forumlarda application konfigürasyonu ile bootloader konfigürasyonun aynı olması gerektiği söyleniyor  (RCC parametleri vb.gibi).
Her türlü yardıma açığım,şimdiden teşekkürler.

------------Applicaton'a zıplama fonksiyonunun kodu-------------------



* Function to perform jump to system memory boot from user application
*

void JumpToBootloader(void) {
    void (*SysMemBootJump)(void);
   
    /**
     * Step: Set system memory address.
     *       
     *       For STM32F429, system memory is on 0x1FFF 0000
     *       For other families, check AN2606 document table 110 with descriptions of memory addresses
     */
    volatile uint32_t addr = 0x08010000;
   
    /**
     * Step: Disable RCC, set it to default (after reset) settings
     *       Internal clock, no PLL, etc.
     */

    HAL_RCC_DeInit();


   
    /**
     * Step: Disable systick timer and reset it to default values
     */
    SysTick->CTRL = 0;
    SysTick->LOAD = 0;
    SysTick->VAL = 0;

    /**
     * Step: Disable all interrupts
     */
    __disable_irq();
   
    /**
     * Step: Remap system memory to address 0x0000 0000 in address space
     *       For each family registers may be different.
     *       Check reference manual for each family.
     *
     *       For STM32F4xx, MEMRMP register in SYSCFG is used (bits[1:0])
     *       For STM32F0xx, CFGR1 register in SYSCFG is used (bits[1:0])
     *       For others, check family reference manual
     */
    //Remap by hand... {

    SYSCFG->MEMRMP = 0x01;


    //} ...or if you use HAL drivers
    //__HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH();    //Call HAL macro to do this for you
   
    /**
     * Step: Set jump memory location for system memory
     *       Use address with 4 bytes offset which specifies jump location where program starts
     */
    SysMemBootJump = (void (*)(void)) (*((uint32_t *)(addr + 4)));
   
    /**
     * Step: Set main stack pointer.
     *       This step must be done last otherwise local variables in this function
     *       don't have proper value since stack pointer is located on different position
     *
     *       Set direct address location which specifies stack pointer in SRAM location
     */
    __set_MSP(*(uint32_t *)addr);
   
    /**
     * Step: Actually call our function to jump to set location
     *       This will start system memory execution
     */
    SysMemBootJump();
   
    /**
     * Step: Connect USB<->UART converter to dedicated USART pins and test
     *       and test with bootloader works with STM32 Flash Loader Demonstrator software
     */
}

mehmet

Kodlarınızı "KOD" butonu ile eklerseniz daha iyi olacak.
nothing