stm32 dfu Bootmode 問題

我而家用緊STM32F429
想用個bootloader 去download firmware
如果要入system memory boot mode,
一係就用Boot1 = 0, Boot0 = 1
呢個hardware 的方法,

除左咁之外, 我仲見到可以用software 去令 MCU 行pointer 指住的address 的memory
如下

void BootLoaderInit(uint32_t BootLoaderStatus)
{


        HAL_RCC_DeInit();
        SysTick->CTRL         = 0;
        SysTick->LOAD         = 0;
        SysTick->VAL        = 0;
        /*Select HSI CLK, DISABLE interrupt, reset CLK */


        __set_PRIMASK(1);                //disable interrupt
        __set_MSP(0x20001000);        //Set the main stack pointer to its default value

        SysMemBootJump = (void (*)(void)) (*((uint32_t *) 0x1FFF0004));
        SysMemBootJump();


        while(1);
        }

我係睇呢條片的:
https://www.youtube.com/watch?v=cvKC-4tCRgw

問題係MCU 入左boot mode 之後,
但dfuse, flashloader detect 唔到MCU
想問下, 我係咪做漏左野 ??
求教

回覆 1# leo940806


    Stlink 正常嗎

TOP

回覆 2# xiao


    stlink 正常可以用

但就係為左唔用stlink, 先用dfu

抑或入bootloader mode, 必須hardware上控制boot0,boot1??
software不能??

TOP

回覆 3# leo940806


    如果看AP或DATASHEET都没有明言, 最好直接问ST. 一般都会有FAE回答的
这个应该是做得到的, 不过为了安全, 应该有些后门不公开的
除非洗干净FLASH

TOP

其實你已經POST左SOLUTION。  

你睇番YOUTUBE 第4個 REPLY 就知⋯⋯

TOP

好多時d reply都好正

TOP

係BO
唔該哂, 雖然唔係直接由你地教
但我次次上黎問野都有得著,
由我讀書果陣問到而家做野

TOP

回覆 7# leo940806


    有成功的话请分享一下经验如何做到
之前有做一个ARM RADIO 用这个MCU
曾经也有类似的想法

TOP

回覆 8# xiao


    你指Bootloader DFU 的做法 ?

void (*SysMemBootJump) (void);
void BootLoaderInit(void);                                 //define functions

void BootLoaderInit()
{


                SysMemBootJump = (void (*)(void)) (*((uint32_t *) 0x1FFF0004));
                HAL_RCC_DeInit();
                SysTick->CTRL         = 0;
                SysTick->LOAD         = 0;
                SysTick->VAL        = 0;
                /*Select HSI CLK, DISABLE interrupt, reset CLK */

                SYSCFG->MEMRMP |= 0x01;          // system config register, the last two bits = boot0,boot1
                //__set_PRIMASK(1);                //disable interrupt
                __set_MSP(0x20002000);        //Set the main stack pointer to its default value

               
                SysMemBootJump();
       
        while(1);
        }



一開始, 主要是我冇config SYSCFG,
加上__set_MSP(), main stack pointer value 錯左, 主要睇番datasheet address 係咩
我就係用0x20002000, SRAM3

TOP

回覆 9# leo940806


    我comment 左 __set_PRIMSK(1);
係因為youtube 有個reply 指出DFU 要用interrupt, 所以要保守,
所以呢個DFU 係可以由EXTI 走出, or 其他interrupt

TOP