完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如题,本人执行以下跳转函数,但并不能进入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) { } } |
|
相关推荐
1个回答
|
|
可以直接从用户代码跳转到system memory的bootloader, 再配合 STM32CubeProgrammer就可以升级程序了。
|
|
|
|
只有小组成员才能发言,加入小组>>
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
427 浏览 1 评论
279 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
247 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
611 浏览 2 评论
635 浏览 2 评论
1364浏览 9评论
37浏览 3评论
STM32CUBEMX4.22.1在main函数里面添加一行语句就死机的原因?
48浏览 3评论
42浏览 3评论
KEIL MDK为什么无法debug library中的代码?
80浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-27 19:03 , Processed in 0.761769 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号