打印
[STM32F4]

关于STM32F4 无法下载

[复制链接]
528|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gshhkkk|  楼主 | 2022-8-31 20:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
无法通过系统存储器地址0x1fff0000进入BootLoader引导代码 本人执行以下跳转函数,但并不能进入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)
        {

        }
}

使用特权

评论回复
沙发
c17| | 2022-8-31 23:57 | 只看该作者
原始代码有没有问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

43

帖子

0

粉丝