OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5063|回复: 3

stm32H743 IAP,有时写入部分异常,有时跳转异常

[复制链接]

21

主题

55

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2018-12-5
在线时间
45 小时
发表于 2022-3-11 16:29:09 | 显示全部楼层 |阅读模式
13金钱
目前做IAP升级,有时能正常flash写入并跳转。有时是flash写入异常,写入需要跨扇区,200k左右。有时发现写入进去了,但是跳转后程序始终也没有运行。很奇怪  请问有人遇到过类似情况吗?

STMFLASH_Write(0x08120000,(uint32_t *)(iap_data_in_sdram+131072),((erase_data_length-131072)/4));

void STMFLASH_Write(uint32_t WriteAddr,uint32_t *pBuffer,uint32_t NumToWrite)       
{
    FLASH_EraseInitTypeDef FlashEraseInit;
    HAL_StatusTypeDef FlashStatus=HAL_OK;
    uint32_t SectorError=0;
        uint32_t addrx=0;
        uint32_t endaddr=0;       
    if(WriteAddr<STM32_FLASH_BASE||WriteAddr%4)return;       

        HAL_FLASH_Unlock();           
        addrx=WriteAddr;                               
        endaddr=WriteAddr+NumToWrite*4;        //

    if(addrx<0X1FF00000)
    {
        while(addrx<endaddr)                //
                {
                        if(STMFLASH_ReadWord(addrx)!=0XFFFFFFFF)//
                        {   
                                FlashEraseInit.TypeErase=FLASH_TYPEERASE_SECTORS;      
                                FlashEraseInit.Sector=STMFLASH_GetFlashSector(addrx);   
                                FlashEraseInit.Banks=FLASH_BANK_2;                                                //
                FlashEraseInit.NbSectors=2;                           
                FlashEraseInit.VoltageRange=FLASH_VOLTAGE_RANGE_3;      //
                if(HAL_FLASHEx_Erase(&FlashEraseInit,&SectorError)!=HAL_OK)
                {
                    break;//·¢éú′í&#206;óá&#203;       
                }
                SCB_CleanInvalidateDCache();                            //&#199;&#229;3y&#206;TD§μ&#196;D-Cache
                        }else addrx+=4;
            FLASH_WaitForLastOperation(FLASH_WAITETIME,FLASH_BANK_2);    //μè′yé&#207;′&#206;2ù×÷íê3é
        }
    }
    FlashStatus=FLASH_WaitForLastOperation(FLASH_WAITETIME,FLASH_BANK_2);       //μè′yé&#207;′&#206;2ù×÷íê3é
        if(FlashStatus==HAL_OK)
        {
                while(WriteAddr<endaddr)//D′êy&#190;Y
                {
      if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD,WriteAddr,(uint64_t)pBuffer)!=HAL_OK)//D′è&#235;êy&#190;Y
                        {

                                break;        //D′è&#235;òì3£
                        }
                        WriteAddr+=32;
                        pBuffer+=8;
                }
        }
        HAL_FLASH_Lock();           //é&#207;&#203;&#248;
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

21

主题

55

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2018-12-5
在线时间
45 小时
 楼主| 发表于 2022-3-15 12:45:17 | 显示全部楼层
回复

使用道具 举报

0

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2020-10-15
在线时间
54 小时
发表于 2023-6-30 11:08:28 | 显示全部楼层
我也遇到同样的问题,写入异常,我临时解决方法是每次写入1K再核对,如果不符再重写,跳转问题是程序执行了APP,但刚刚初始化就死机了,需要按复位键后才能正常使用,求解
回复

使用道具 举报

0

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2020-10-15
在线时间
54 小时
发表于 2023-11-24 09:18:51 | 显示全部楼层
返璞归真 发表于 2023-6-30 11:08
我也遇到同样的问题,写入异常,我临时解决方法是每次写入1K再核对,如果不符再重写,跳转问题是程序执行了 ...

你好,我也偶尔会遇到这个问题,请问解决了吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 02:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表