This is an automated email from the ASF dual-hosted git repository. jerzy pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-core.git
commit ba135c848b2ea3f86758a04e7ede0c9249df9c2e Author: Jerzy Kasenberg <jerzy.kasenb...@codecoup.pl> AuthorDate: Fri Mar 20 11:55:15 2020 +0100 stm32: Add function to enter mcu bootloader Bootloader is normally executed when BOOT pin(s) are in certain state. This change adds function stm32_start_bootloader() that can start bootloader when system is already running from flash and BOOT pins are in a state that would prevent entering bootloader. --- hw/mcu/stm/stm32_common/include/stm32_common/mcu.h | 2 ++ hw/mcu/stm/stm32_common/src/stm32_bootloader.c | 42 ++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/hw/mcu/stm/stm32_common/include/stm32_common/mcu.h b/hw/mcu/stm/stm32_common/include/stm32_common/mcu.h index 52503a6..b0612b5 100644 --- a/hw/mcu/stm/stm32_common/include/stm32_common/mcu.h +++ b/hw/mcu/stm/stm32_common/include/stm32_common/mcu.h @@ -106,6 +106,8 @@ extern "C" { */ #define MCU_AFIO_PIN_NONE (0xFFFF) +void stm32_start_bootloader(void); + #ifdef __cplusplus } #endif diff --git a/hw/mcu/stm/stm32_common/src/stm32_bootloader.c b/hw/mcu/stm/stm32_common/src/stm32_bootloader.c new file mode 100644 index 0000000..23192de --- /dev/null +++ b/hw/mcu/stm/stm32_common/src/stm32_bootloader.c @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#include <stdint.h> +#include <mcu/stm32_hal.h> +#include <mcu/mcu.h> + +void +stm32_start_bootloader(void) +{ + const uint32_t *system_memory = (const uint32_t *)STM32_SYSTEM_MEMORY; + void (*system_memory_reset_handler)(void); + + HAL_RCC_DeInit(); + SysTick->CTRL = 0; + SysTick->LOAD = 0; + SysTick->VAL = 0; +#ifdef __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH + __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH(); +#endif + + __set_MSP(system_memory[0]); + + system_memory_reset_handler = (void (*)(void))(system_memory[1]); + system_memory_reset_handler(); +}