你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L011 的Flash Half-Page 编程

[复制链接]
zengshiyi 提问时间:2017-6-14 10:30 /
本帖最后由 zengshiyi 于 2017-6-14 16:33 编辑

使用STM32L011做Flash的烧写功能,按Word烧写没有问题,但是按Half-Page烧写总是不成功。按Word烧写的效率太低。在L0的库函数中未见Half-Page的例子,规格书(2016年11月版本)中有例程,但也没法成功,寄存器显示PGAERR错误,但我的地址确定是在同一个half page 里面( 0x0800 1500 - 0x0800 1540),不知哪里出了问题,各位指点一下,万分感激!
收藏 评论8 发布时间:2017-6-14 10:30

举报

8个回答
zengshiyi 回答时间:2017-6-14 12:09:30
难道这个功能只能运行在sram吗?
zengshiyi 回答时间:2017-6-14 16:32:34
自问自答,将函数放在sram中运行即可
果果cindy 回答时间:2017-6-20 17:13:44
我也遇到同样的问题,请问你解决了吗?
zengshiyi 回答时间:2017-6-23 16:58:36
果果cindy 发表于 2017-6-20 17:13
我也遇到同样的问题,请问你解决了吗?

将函数放在sram中运行即可
zengshiyi 回答时间:2017-6-23 16:59:09
果果cindy 发表于 2017-6-20 17:13
我也遇到同样的问题,请问你解决了吗?

将函数放在sram中运行即可
果果cindy 回答时间:2017-6-28 15:44:32
这样sram的空间不就更小了?
jazu 回答时间:2018-2-4 21:14:42
如何将这个函数放在sram中运行?
大神神神来了 回答时间:2018-7-2 14:46:41
本帖最后由 大神神神来了 于 2018-8-16 18:08 编辑
jazu 发表于 2018-2-4 21:14
如何将这个函数放在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、若采用 *.o(RAMCODE) 格式,则以#pragma arm section code = “RAMCODE” 开头,以#pragma arm section结尾。将所有需要放到RAMCODE section的函数包括进来。编译时,编译器会自动将这些函数放到RAMCODE所在0x20000000开始的区域。如下:

#pragma arm section code = "RAMCODE"

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

#pragma arm section

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版