STM32L011的Flash Half-Page编程烧写不成功

2019-07-14 14:48发布

使用STM32L011做Flash的烧写功能,按Word烧写没有问题,但是按Half-Page烧写总是不成功。按Word烧写的效率太低。在L0的库函数中未见Half-Page的例子,规格书(2016年11月版本)中有例程,但也没法成功,寄存器显示PGAERR错误,但我的地址确定是在同一个half page 里面( 0x0800 1500 - 0x0800 1540),不知哪里出了问题,各位指点一下,万分感激!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
60user105
2019-07-15 18:15
jinxibin 发表于 2019-1-4 21:20
如何将这个函数放在sram中运行?

1、在 keil 的 Options for Target --> Linker 下去掉 “Use Memory Layout Target Dialog”的选项。
2、在编译生成文件中找到 .sct 后缀的分散文件,如下:
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

  LR_IROM1 0x08000000 0x00080000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00080000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00014000  {  ; RW data
    *.o(RAMCODE) 或 stm32l1xx_hal_flash_ramfunc.o (+RO)
   .ANY (+RW +ZI)
  }
  }

上面   *.o(RAMCODE) 或 stm32l1xx_hal_flash_ramfunc.o (+RO)二选一

3、以#pragma arm section code = “RAMCODE” 开头,以#pragma arm section结尾。将所有需要放到RAMCODE section的函数包括进来。编译时,编译器会自动将这些函数放到RAMCODE所在0x20000000开始的区域。如下:

#pragma arm section code = "RAMCODE"

(此处写要在SRAM中运行的函数代码)

#pragma arm section

一周热门 更多>