summaryrefslogtreecommitdiffstatshomepage
path: root/stmhal/modpyb.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-05-19 18:13:34 +0100
committerDamien George <damien.p.george@gmail.com>2014-05-19 18:13:34 +0100
commit404f7cf9026f3a37546233a784543cbb600925d1 (patch)
tree060ecafb461d44ba49eb77ae2fc636ec0ae29fe4 /stmhal/modpyb.c
parent5cdff5fa6139d7f15e81b562db6874e16ad24a99 (diff)
parent9bf4f7e3d397e7e602fb83c80c35ab30f97e9f76 (diff)
downloadmicropython-404f7cf9026f3a37546233a784543cbb600925d1.tar.gz
micropython-404f7cf9026f3a37546233a784543cbb600925d1.zip
Merge pull request #618 from swegener/jump-to-bootloader
Jump to bootloader
Diffstat (limited to 'stmhal/modpyb.c')
-rw-r--r--stmhal/modpyb.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/stmhal/modpyb.c b/stmhal/modpyb.c
index 81dc921173..47e9710d75 100644
--- a/stmhal/modpyb.c
+++ b/stmhal/modpyb.c
@@ -62,6 +62,22 @@
///
/// The `pyb` module contains specific functions related to the pyboard.
+/// \function bootloader()
+/// Activate the bootloader without BOOT* pins.
+STATIC NORETURN mp_obj_t pyb_bootloader(uint n_args, const mp_obj_t *args) {
+ storage_flush();
+
+ HAL_RCC_DeInit();
+ HAL_DeInit();
+
+ __HAL_REMAPMEMORY_SYSTEMFLASH();
+ __set_MSP(*((uint32_t*) 0x00000000));
+ ((void (*)(void)) *((uint32_t*) 0x00000004))();
+
+ while (1);
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(pyb_bootloader_obj, 0, 1, pyb_bootloader);
+
/// \function info([dump_alloc_table])
/// Print out lots of information about the board.
STATIC mp_obj_t pyb_info(uint n_args, const mp_obj_t *args) {
@@ -302,6 +318,7 @@ MP_DECLARE_CONST_FUN_OBJ(pyb_usb_mode_obj); // defined in main.c
STATIC const mp_map_elem_t pyb_module_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_pyb) },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_bootloader), (mp_obj_t)&pyb_bootloader_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_info), (mp_obj_t)&pyb_info_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_unique_id), (mp_obj_t)&pyb_unique_id_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_freq), (mp_obj_t)&pyb_freq_obj },