搜索
bottom↓
回复: 2

STM32的option bytes出现问题,OPTVERR 标志被置1

[复制链接]

出0入0汤圆

发表于 2017-8-30 19:52:11 | 显示全部楼层 |阅读模式
硬件平台:芯片由 STM32L152VE 替换为 STM32L151VD (原因不知,采购买了一千多片,搞不好就完了)编译环境:IAR 8.1
软件:软件包括 BootLoader 和 APP 程序
问题:我直接在编译环境修改了一些参数就下载进板子,boot程序是可以正常运行并跳转到APP部分。没有做 OPTION BYTE 相关信息,但是在调试的过程中发现 OPTVERR 标志和OPTVERRUSR 标志被置1了
  
如果BOOT程序开头没有清除错误标志位的话就无法写入内部EEP,所以程序暂时可以正常运行,每次重新进入程序都被置1,但稳定性就不能保证了。
百度查询,https://www.lijingquan.net/2017/ ... %E7%BC%96%E7%A8%8B/
这篇文章里说
FWWER 标志,当写入/擦除过程中有Flash指令读取,就会置位,这个正常操作中不应该出现,可以在编程Flash时候关闭所有中断.
NOTZEROERR  标志,当写入的位置不是0,就是不能写入,不应该编程这些位,如果发现可能是坏块产生了,也可能是逻辑错误.
RDERR 标志,当Flash区域有读保护时候,读取这些内容就会出错.置位这个.
OPTVERR 标志,写OP字节时候,因为OP字节格式不对,所以错误,程序设计问题了,当然对于我们做实验,OP可以自行用工具设置.
SIZERR 标志,只能编译uint32_t格式数据,其他都会这个错,程序可以避免.
PGAERR 标志,编程不对齐,程序逻辑问题.
WRPERR 标志,有写保护,所以错误.
READY 标志,储存器可用.
ENDHV 标志,编程中有高压.
EOP 标志,编程结束.
BSY 标志,繁忙标志.程序常用来判断的标志.
这么看来,除了NOTZEROERR,其他只要程序没问题,就不会发生,而NOTZEROERR,是用久了之后发生的.
但是在程序里面或者外面我根本没有操作过OP字节。
附上我ICF文件设置参数,大家帮我看看是不是这个设置错了。

152VE配置
Boot                                                                                    App
ROM_start__ =0x08000000;                                      ROM_start__ =0x08004000;
ROM_end__   = 0x08003FFF;                                     ROM_end__   = 0x08043FFE;
RAM_start__ =0x20000000;                                      RAM_start__ =0x20000000;
RAM_end__   = 0x20007FFF;                                     RAM_end__   = 0x2000FFFE;
cstack__ = 0x400;                                                         cstack__ = 0x400;
heap__   = 0x200;                                                         heap__   = 0x200;
EEPROM_start__ =0x08080000;                               EEPROM_start__ =0x08080000;
EEPROM_end__   = 0x08081FFF;                              EEPROM_end__   = 0x08081FFF;



151VD配置
Boot                                                                             App
ROM_start__ =0x08000000;                                  ROM_start__ =0x08004000;
ROM_end__   = 0x08003FFF;                                 ROM_end__   = 0x08043FFE;
RAM_start__ =0x20000000;                                  RAM_start__ =0x20000000;
RAM_end__   = 0x20007FFF;                                 RAM_end__   = 0x2000FFFE;
cstack__ = 0x400;                                                     cstack__ = 0x400;
heap__   = 0x200;                                                    heap__   = 0x200;
EEPROM_start__ =0x08080000;                           EEPROM_start__ =0x08080000;
EEPROM_end__   = 0x080817FE;                          EEPROM_end__   = 0x080817FE;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2017-8-31 11:13:37 | 显示全部楼层
今天使用STlink + STVP 改写FLASH_OBR的值,然后再将芯片全部擦除,再次烧录BOOT和APP之后程序正常运行(BOOT程序开头已经去掉CLEAR错误标志位操作)。
手里暂时没有新的片子,新的片子拿回来再测试一下。如果每个都需要重新改写OPTION BYTES还真是麻烦了~还得给生产写操作说明。。多了一道工序。
为啥之前的片子STM32 都不需要这么操作呢~还是我程序哪里不小心动到了?

出0入0汤圆

 楼主| 发表于 2017-8-30 19:53:35 | 显示全部楼层
手里没有ST_LINK,明天试试直接OPTION BYTE写看还会不会再被置1.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-22 01:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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