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

[复制链接]
1209|2
 楼主| Alden 发表于 2024-8-30 16:33 | 显示全部楼层 |阅读模式
本帖最后由 Alden 于 2024-8-30 16:33 编辑

#申请原创# #技术资源#
在测试芯片功能的时候会需要测试MCU的flash读写,但芯片的程序是在flash中运行,不方便对整个flash进行擦写。想到以前又试过做了个让程序运行在RAM中的工程,添加了flash擦写可以顺利对flash任意区域进行擦写测试。
将代码放在RAM中运行需要做这些修改。
f6ee19ee27f52dd1e4335af1d99afa9.png
97971ff26b79734cff4cdfb1489b615.png
2b119ec397072501237c44cc8dcdc41.png
0c0cba3aaafa34bd4b4953b758b8473.png
主要就是将工程的目标地址都改在RAM的前面一部分区域,后面一部分还是正常的RAM使用,更改ini文件,让仿真时能够正确进入RAM。
main中进行flash擦写,擦写的区域可以从0x800000开始。
  1. #if defined (APM32F10X_HD)
  2. #define FLASH_PAGE_SIZE    ((uint16_t)0x800)
  3. #else
  4. #define FLASH_PAGE_SIZE    ((uint16_t)0x400)
  5. #endif

  6. #define BANK1_WRITE_START_ADDR  ((uint32_t)0x08000000)
  7. #define BANK1_WRITE_END_ADDR    ((uint32_t)0x0800C000)

  8. int main(void)
  9. {
  10.     APM_EVAL_LEDInit(LED1);

  11.     SysTick_Config(SystemCoreClock / 1000);
  12.    
  13.                         
  14.                 FLASH_UnlockBank1();
  15.    
  16.     NbrOfPage = (BANK1_WRITE_END_ADDR - BANK1_WRITE_START_ADDR) / FLASH_PAGE_SIZE;
  17.     FLASH_ClearFlag((FLASH_FLAG_T)(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR));
  18.     for(EraseCounter = 0; (EraseCounter < NbrOfPage) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)
  19.     {
  20.         FLASHStatus = FLASH_ErasePage(BANK1_WRITE_START_ADDR + (FLASH_PAGE_SIZE * EraseCounter));
  21.     }

  22.     Address = BANK1_WRITE_START_ADDR;
  23.     while((Address < BANK1_WRITE_END_ADDR) && (FLASHStatus == FLASH_COMPLETE))
  24.     {
  25.         FLASHStatus = FLASH_ProgramWord(Address, Data);
  26.         Address = Address + 4;
  27.     }

  28.     FLASH_LockBank1();
  29.    
  30.     Address = BANK1_WRITE_START_ADDR;

  31.     while((Address < BANK1_WRITE_END_ADDR))
  32.     {
  33.         if((*(__IO uint32_t*) Address) != Data)
  34.         {
  35.             MemoryProgramStatus = FAILED;
  36.         }
  37.         Address += 4;
  38.     }   
  39.     while(1)
  40.     {
  41.         APM_EVAL_LEDToggle(LED1);
  42.         
  43.         Delay();
  44.     }
  45. }
配置好就可以烧录后在线仿真,可以看到汇编指针在RAM中正常运行。 20494802df09bf3bfca13bfc1df4ec8.png
APM32F10x_SDK_XB.zip (3.49 MB, 下载次数: 4)

gyc198215 发表于 2024-9-2 18:55 | 显示全部楼层
曾经以为与ST完美匹配。
gyc198215 发表于 2024-9-2 18:56 | 显示全部楼层
后来用407替代ST407,MCU运行速度比其运行差多了。批量退货。后来遇到时钟不起振,对其现在怀疑多了去了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

115

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部