打印

请各位牛人帮帮忙,调用JFLASH ARM函数 烧写STM32F103出错

[复制链接]
3731|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
na_sh13|  楼主 | 2011-8-9 16:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 na_sh13 于 2011-8-9 16:37 编辑

我用VC写了一个固件烧写软件,下载部分是调用J-Flash ARM里的函数现在的问题是:需要连续烧写多片STM32芯片,当写到第3、4片的时候,就会报错:
JTAG communication error: Unknow error code 63     Communication timed out




正常情况把固件完整的下载进去需要1分钟,而通常在45秒左右的时候报错,然后我用J-Flash把芯片内数据读出,发现差不多写了四分之三,后四分之一没写进去。也就是在下载的过程中出现该错误,这是怎么回事?下面是代码

ConnectJlink(0, 0, JLinkSpeed);
JLINKARM_Reset();
lock &= data_CR[0];

if (lock != 0)//FLASH被锁
{
    JLINKARM_WriteU32(Flash_KEYR_Address, Key1);//解锁FLASH
    JLINKARM_WriteU32(Flash_KEYR_Address, Key2);
}

JLINKARM_ReadMemU32(Xuanxiangzijie_Address, 4, pdata_CR+5, pdata2);//观察选项字节状态

Mer |= data_CR[0];
JLINKARM_WriteU32(Flash_CR_Address, Mer);//把FLASH_CR的MER位 置1
Mer_watch &= data_CR[0];

if (Mer_watch != 0x4)
{
    AfxMessageBox(_T("擦除不成功!硬件未连接或没有重新上电!"));
    UpdateData(FALSE);
    return;
}

Strt |= Mer;
JLINKARM_WriteU32(Flash_CR_Address, Strt);//把FLASH_CR的STRT位 置1

while (1)
{
    JLINKARM_ReadMemU32(Flash_SR_Address, 1, pdata_SR, pdata2);//检查FLASH_SR     的BSY位是否为1

    busy &= data_SR[0];

    if (busy != 0)//如果BSY位为1  等待
    {
        for (int temp = 10000; temp >2; temp--)
        {;}
    }
    else
        break;
}

JLINKARM_WriteU32(Flash_CR_Address, 1);//将FLASH_CR的PG位 置1

//写入半字(16位)
for(int i = 0; i < x; i++)
{
    JLINKARM_WriteU16(flashAddress, xbuffer);//这里写入程序
    flashAddress += 2;
}

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

本版积分规则

2

主题

35

帖子

1

粉丝