
如题,本人执行以下跳转函数,但并不能进入BootLoader引导代码,反而出现单片机复位的现象,请问是什么原因,谢谢! static void JumpToBootloader(void) { uint32_t i=0; void (*SysMemBootJump)(void); /* 声明一个函数指针 */ __IO uint32_t BootAddr = 0x1FFF0000; /* STM32F4的系统BootLoader地址 */ /* 关闭全局中断 */ DISABLE_INT(); /* 关闭滴答定时器,复位到默认值 */ SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; /* 设置所有时钟到默认状态,使用HSI时钟 */ HAL_RCC_DeInit(); /* 关闭所有中断,清除所有中断挂起标志 */ for (i = 0; i < 8; i++) { NVIC->ICER[i]=0xFFFFFFFF; NVIC->ICPR[i]=0xFFFFFFFF; } /* 使能全局中断 */ ENABLE_INT(); /* 跳转到系统BootLoader,首地址是MSP,地址+4是复位中断服务程序地址 */ SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4))); /* 设置主堆栈指针 */ __set_MSP(*(uint32_t *)BootAddr); /* 在RTOS工程,这条语句很重要,设置为特权级模式,使用MSP指针 */ __set_CONTROL(0); /* 跳转到系统BootLoader */ SysMemBootJump(); /* 跳转成功的话,不会执行到这里,用户可以在这里添加代码 */ while (1) { } } |
关于STM32G474 双BANK的测试问题
STM32H745I-DISCO 下载TouchGFX报找到不FLASH下载算法文件
STM32745/747芯片固件升级问题
stm32f103 usb iap
有关双bank现场升级的一些问题,图片为官方代码
# 如何使用CubeMX生成的设备树生成镜像&&如何为MP135添加一个串口?&&关于SDK的一些疑问
keil无法对G474CBTx扇区擦除烧录较大程序是什么原因?
官方的IAP-UART版本太旧,移植时写保护很多找不到定义,希望更新一版
stm32F4,IAP跳转的问题.
请问为什么使用FLASH_ErasePage函数会擦除不应该被擦除的代码段呢?
System memory from which the device boots in System memory boot mode
36. /* 设置重映射到系统Flash */37. __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH();我的STM32F429ZGT6加了__HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH(); ,但STM32CubeProgrammer 连接时一直提示芯片RDP保护了,但用STLINK连接看RDP位是AA,又没保护,愁....
这样33. /* 使能全局中断 */34. ENABLE_INT();35. 36. /* 设置重映射到系统Flash */37. __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH();
Note: For STM32 devices having the Dual Bank Boot feature, to jump to system memory from
user code the user has first to remap the System Memory bootloader at address
0x00000000 using SYSCFG register (except for STM32F7 Series), then jump to bootloader.
For STM32F7 Series, the user has to disable nDBOOT and/or nDBANK features (in option
bytes), then jump to bootloader
代码详见:https://blog.csdn.net/zhengwenbang/article/details/125445658?spm=1001.2014.3001.5502
程序太久远,之前的确在初始化里面确定加了BB级保护,在跳转去BOOTLOADER前还原AA保护就行了。
实测:如果用硬件BOOT0引脚触发,不管是否有BB级保护,均能正常boot。 有可能内置的原厂BOOTLOADER里面做了处理,应该是先读取用户保护设置,然后恢复成AA无保护状态,又或许在最终再恢复成用户的保护位设置