打印
[APM32E1]

APM32程序在SRAM中运行,进行flash擦写测试。

[复制链接]
540|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Alden|  楼主 | 2024-8-30 16:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Alden 于 2024-8-30 16:33 编辑

#申请原创# #技术资源#
在测试芯片功能的时候会需要测试MCU的flash读写,但芯片的程序是在flash中运行,不方便对整个flash进行擦写。想到以前又试过做了个让程序运行在RAM中的工程,添加了flash擦写可以顺利对flash任意区域进行擦写测试。
将代码放在RAM中运行需要做这些修改。




主要就是将工程的目标地址都改在RAM的前面一部分区域,后面一部分还是正常的RAM使用,更改ini文件,让仿真时能够正确进入RAM。
main中进行flash擦写,擦写的区域可以从0x800000开始。
#if defined (APM32F10X_HD)
#define FLASH_PAGE_SIZE    ((uint16_t)0x800)
#else
#define FLASH_PAGE_SIZE    ((uint16_t)0x400)
#endif

#define BANK1_WRITE_START_ADDR  ((uint32_t)0x08000000)
#define BANK1_WRITE_END_ADDR    ((uint32_t)0x0800C000)

int main(void)
{
    APM_EVAL_LEDInit(LED1);

    SysTick_Config(SystemCoreClock / 1000);
   
                        
                FLASH_UnlockBank1();
   
    NbrOfPage = (BANK1_WRITE_END_ADDR - BANK1_WRITE_START_ADDR) / FLASH_PAGE_SIZE;
    FLASH_ClearFlag((FLASH_FLAG_T)(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR));
    for(EraseCounter = 0; (EraseCounter < NbrOfPage) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)
    {
        FLASHStatus = FLASH_ErasePage(BANK1_WRITE_START_ADDR + (FLASH_PAGE_SIZE * EraseCounter));
    }

    Address = BANK1_WRITE_START_ADDR;
    while((Address < BANK1_WRITE_END_ADDR) && (FLASHStatus == FLASH_COMPLETE))
    {
        FLASHStatus = FLASH_ProgramWord(Address, Data);
        Address = Address + 4;
    }

    FLASH_LockBank1();
   
    Address = BANK1_WRITE_START_ADDR;

    while((Address < BANK1_WRITE_END_ADDR))
    {
        if((*(__IO uint32_t*) Address) != Data)
        {
            MemoryProgramStatus = FAILED;
        }
        Address += 4;
    }   
    while(1)
    {
        APM_EVAL_LEDToggle(LED1);
        
        Delay();
    }
}
配置好就可以烧录后在线仿真,可以看到汇编指针在RAM中正常运行。
APM32F10x_SDK_XB.zip (3.49 MB)

使用特权

评论回复
沙发
gyc198215| | 2024-9-2 18:55 | 只看该作者
曾经以为与ST完美匹配。

使用特权

评论回复
板凳
gyc198215| | 2024-9-2 18:56 | 只看该作者
后来用407替代ST407,MCU运行速度比其运行差多了。批量退货。后来遇到时钟不起振,对其现在怀疑多了去了

使用特权

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

本版积分规则

36

主题

83

帖子

1

粉丝