Stm32 使用自定义引导加载器使用主控制器对外围设备控制器或从控制器进行编程

Stm32 使用自定义引导加载器使用主控制器对外围设备控制器或从控制器进行编程,stm32,bootloader,master-slave,Stm32,Bootloader,Master Slave,我在一个系统上工作,我有两个从外围设备和一个主控制器。我想使用主控制器对这两个从外围设备进行编程。是否有任何标准协议或体系结构用于此类编程。否-但您可以使用内置引导加载程序。在您自己的协议中,发送命令以进入引导加载程序,然后按照STM应用程序说明中的说明发送程序。我在很多设备上都是这样做的 如何进入引导加载程序?网上有很多信息,但有些建议的质量很低。您需要在重置后将micro切换到stage,然后调用引导加载程序。如果使用HAL示例,routime可能如下所示(STM32F303): 这是否直接

我在一个系统上工作,我有两个从外围设备和一个主控制器。我想使用主控制器对这两个从外围设备进行编程。是否有任何标准协议或体系结构用于此类编程。

否-但您可以使用内置引导加载程序。在您自己的协议中,发送命令以进入引导加载程序,然后按照STM应用程序说明中的说明发送程序。我在很多设备上都是这样做的

如何进入引导加载程序?网上有很多信息,但有些建议的质量很低。您需要在重置后将micro切换到stage,然后调用引导加载程序。如果使用HAL示例,routime可能如下所示(STM32F303):


这是否直接从应用程序跳转到引导加载程序。。!不管启动Pin条件如何。是的,它会从应用程序中调用引导加载程序。如果您需要更复杂的引导加载程序(例如加密文件),您需要自己编写一个引导加载程序或查找/购买一些现成的引导加载程序。
void __attribute__((noreturn)) StartBootLoader(void) {
    void (*BootLoad)(void) = (void (*)(void))0x1FFFD804;

    HAL_RCC_DeInit();
    HAL_DeInit();

    SysTick -> CTRL = 0;
    SysTick -> LOAD = 0;
    SysTick -> VAL = 0;

    __set_PRIMASK(1);

    __set_MSP(*(uint32_t *)0x1FFFD800);
    BootLoad();
    while(1);
}