打印

GD32F470如何调用芯片的bootloader???

[复制链接]
2349|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
perfectfafa|  楼主 | 2022-11-28 09:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位专家大家好,请问有没有在GD32芯片上试过调用芯片的bootloader实现程序升级功能的,请指导。
我最近在GD32F470 上尝试调用芯片bootloader,发现并不能够成功,程序能掉跳转到0x1FFF0000地址,但不能给ISP软件回应。不是硬件的问题,因为我通过设置BOOT0、BOOT1引脚可以正确实现程序升级。
我的具体实现是在SystemInit()函数开始即跳转到bootloader区,代码如下:
void SystemInit (void)
{   uint32_t i;
    pFunction JumpToApplication;
//--------------------------------------------------------------------------------
    if (0x32f1 == RTC_BKP0)
    {
      rcu_periph_clock_enable(RCU_PMU);

      pmu_backup_write_enable();
      RTC_BKP0 = 0x1234;

      __set_PRIMASK(1);

      SysTick->CTRL = 0;
      SysTick->LOAD = 0;
      SysTick->VAL = 0;
    /* 关闭所有中断,清除所有中断挂起标志 */
    for (i = 0; i < 8; i++)
    {
          NVIC->ICER[i]=0xFFFFFFFF;
          NVIC->ICPR[i]=0xFFFFFFFF;
    }      
    /* 使能全局中断 */

    __set_PRIMASK(0);

      JumpToApplication = ((pFunction) (*(__IO uint32_t*) (0x1FFF0000 + 4)));
      __set_MSP(*(__IO uint32_t*) 0x1FFF0000);
      JumpToApplication();
    }   
//---------------------------------------------------------------------------------
......其他无关操作.........

使用特权

评论回复
沙发
sonicll| | 2022-11-28 10:23 | 只看该作者
做跳转之前,设置一下中断向量表地址试试?
SCB->VTOR = 0x1FFF0000;

使用特权

评论回复
评论
perfectfafa 2022-11-28 13:10 回复TA
@sonicll 感谢支招,也尝试过添加SCB->VTOR = 0x1FFF0000;,仍然是不行。 
板凳
AnkerSong| | 2022-11-29 11:25 | 只看该作者
boot0低电平状态下,0x1fff0000为禁止访问状态,无法实现跳转指令。
建议设计外围电路进行boot0拉低操作实现ISP升级。

使用特权

评论回复
地板
perfectfafa|  楼主 | 2022-12-14 10:58 | 只看该作者
AnkerSong 发表于 2022-11-29 11:25
boot0低电平状态下,0x1fff0000为禁止访问状态,无法实现跳转指令。
建议设计外围电路进行boot0拉低操作实 ...

你好,我不是在boot0低电平状态下访问0x1fff0000,是在程序正常启动后访问。

使用特权

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

本版积分规则

1

主题

3

帖子

1

粉丝