历史上的今天
返回首页

历史上的今天

今天是:2024年12月29日(星期日)

2018年12月29日 | STM32 读保护功能和清除读保护功能设置【转】

2018-12-29 来源:eefocus

1、STM32对内部Flash的保护措施 

   

所有STM32的芯片都提供对Flash的保护,防止对Flash的非法访问 - 写保护和读保护。
  

 1)、读保护即大家通常说的“加密”,是作用于整个Flash存储区域。一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,而不能通过下述任何一种方式读出:

通过调试器(JTAG或SWD);

从RAM中启动并执行的程序;
  

 2)、写保护是以四页(1KB/页) Flash存储区为单位提供写保护,对被保护的页实施编程或擦除操作将不被执行,同时产生操作错误标志。  
   

读与写设置的效果见下表:
   

读保护写保护      对Flash的操作功能
    

有效 有效 CPU只能读,禁止调试和非法访问。
    

有效 无效 CPU可以读写,禁止调试和非法访问,页0~3为写保护。
    

无效 有效 CPU可读,允许调试和非法访问。
    

无效 无效 CPU可以读写,允许调试和非法访问。

2、当Flash读保护生效时,CPU执行程序可以读受保护的Flash区,但存在两个例外情况:
   

1)、调试执行程序时;
   

2)、从RAM启动并执行程序时
   

STM32还提供了一个特别的保护,即对Flash存储区施加读保护后,即使没有启用写保护,Flash的第 0 ~ 3 页也将处于写保护状态,这是为了防止修改复位或中断向量而跳转到RAM区执行非法程序代码。

3、Flash保护相关函数
   FLASH_Unlock();   //Flash解锁
   FLASH_ReadOutProtection(DISABLE);  //Flash读保护禁止  
   FLASH_ReadOutProtection(ENABLE);   //Flash读保护允许


4、stm32置读保护跟清读保护操作

  

功能:读保护设置后将不能读出flash 的内容;当解除读保护的时候stm32 会自动擦出整篇flash;
  

读保护设置:在程序的开头加入“读保护”代码,即实现了读保护功能;(每次程序运行先开保护)
  

解除读保护:解除读保护可以设置在按键里面,方便实现解锁,也不可不设按键在RAM中执行程序再清除读保护;

  (1)设置读保护:

 int main(void)
{
    ....

      
    if(FLASH_GetReadOutProtectionStatus() != SET)
    {
        //FLASH_Unlock();不解锁FALSH也可设置读保护???
        FLASH_ReadOutProtection(ENABLE);   
    }
    ......
    while(1)
    {
       .....
     }
}

    

这个写到程序当中并执行过后,使用j-link就不能‘读出’程序了,就是‘读保护’了!没有使用此程序可以读出下载到芯片中的程序,但是如果使用了此程序就无法读出程序了。但是也无法再次烧写新的程序到芯片中了(要测试请慎重!!!!!!)

  

可以在主程序当中设置一按键专门清除“读保护”,一旦按下按键则清除“读保护”时芯片可以重新被烧写。

  

(2)解除读保护:在程序中的某个操作中(如按键等)加入如下代码,执行后
代码自己杀死了自己!
if(FLASH_GetReadOutProtectionStatus() != RESET)
{
FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE);
}
   这些函数在stm32f10x_flash 里面,注意:调用上面这个库的时候需在#include "stm32f10x_flash.h"前加#define _FLASH_PROG;否则报(没有定义)错。

   如果你没有做按键清除读保护这一步还有方法二补救:专门写一个清除“读保护”程序,使用RAM中运行程序的方法,运行此程序解锁“读保护”,执行后,FLASH会自动全部擦除。代码如下:
int main(void)
{
Chinp_Init();
FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE); 
}

※对于在RAM中运行程序,说明如下:
(1)我使用IAR + J-Link,不用把Boot0和boot1脚设置成从RAM启动也可在RAM中调试(我是设置成从FLASH启动)。
(2)在IAR环境中设置Link文件为lnkarm_ram.xcl
(3)Debuger选项Download tab中勾全部去掉。
按上面设置完成后,按Debug按钮,执行上面程序,读保护可解除。

 

*************************华丽丽的分割线***********************************************

  
if (FLASH_GetReadOutProtectionStatus() == RESET) 
{
FLASH_Unlock();
FLASH_ReadOutProtection(ENABLE); 
}
*************************华丽丽的分割线***********************************************
 
if (FLASH_GetReadOutProtectionStatus() == SET) 


FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE); 
}
CPU Flash读保护使能后,仿真器调试会失败。J-LINK有个解锁菜单,需要解锁才能正常再次烧写程序。当然解锁会导致Flash内容被全部擦出。 

启动"J-Flash ARM"工具,Target->unsercure chip 就解除了芯片的读保护。Target->unsercure chip 后一定要上电复位,系统不复位是不行的。


推荐阅读

史海拾趣

创都(CAX)公司的发展小趣事

除了技术创新外,创都公司还以其精准的市场策略著称。在电子产品更新换代日益加快的背景下,公司市场部门深入分析了消费者的需求和市场趋势,成功预测了未来一段时间内的产品走向。基于这些分析,创都公司提前布局,推出了多款符合市场趋势的新产品。这些产品不仅满足了消费者的需求,还引领了市场潮流,为公司带来了丰厚的利润。此外,创都公司还积极开展品牌推广活动,通过线上线下多种渠道提升品牌知名度,进一步巩固了市场地位。

Eclipse Magnetics公司的发展小趣事

除了技术创新外,创都公司还以其精准的市场策略著称。在电子产品更新换代日益加快的背景下,公司市场部门深入分析了消费者的需求和市场趋势,成功预测了未来一段时间内的产品走向。基于这些分析,创都公司提前布局,推出了多款符合市场趋势的新产品。这些产品不仅满足了消费者的需求,还引领了市场潮流,为公司带来了丰厚的利润。此外,创都公司还积极开展品牌推广活动,通过线上线下多种渠道提升品牌知名度,进一步巩固了市场地位。

GAIA Converter Inc公司的发展小趣事

位于广东东莞的锋鸣电子有限公司,自2010年成立以来,便明确了自己的市场定位——专注于汽车电子配件的研发与生产。随着汽车行业的快速发展,公司敏锐地捕捉到智能驾驶和车载娱乐系统对高质量电声器件的需求,迅速调整产品结构,推出了一系列符合市场需求的蜂鸣器、扬声器等产品。凭借精准的市场定位和优质的产品质量,锋鸣电子在汽车电子配件领域站稳了脚跟。

AMD(超微)公司的发展小趣事

随着全球化进程的加速,锋鸣电子(上海总部)于2015年启动了国际化战略。公司首先在东南亚地区设立生产基地,利用当地的成本优势扩大产能。随后,锋鸣电子积极参加国际展会,拓展海外市场,与多家国际知名企业建立了合作关系。通过国际化战略的实施,锋鸣电子不仅提升了品牌知名度,还实现了销售收入的快速增长。

风华邦科(FH-BK)公司的发展小趣事

为了进一步扩大业务范围和提升品牌影响力,FlyWin集团积极寻求与其他行业的跨界合作。例如,公司与某知名无人机制造商达成战略合作,共同开发基于无人机平台的智能监测系统。该系统利用无人机的高空视角和快速响应能力,实现了对特定区域的实时监控和数据分析。这一合作不仅为双方带来了新的业务增长点,也为公司在无人机领域的布局奠定了坚实基础。

台湾唯圣(GW)公司的发展小趣事
将调整后的电流传递到目标位置,通常具有良好的导电性和生物相容性。

问答坊 | AI 解惑

请教WINCE的NBOOT下载问题

我用的是ATLAS 芯片AT640,想请教下NBOOT下载问题,谢谢~~…

查看全部问答>

代码阅读器第一个版本, 请大家试试

代码阅读器第一个版本,   请大家试试 http://code-search.kingofcoder.com/…

查看全部问答>

My Computer 下的my documents 文件夹

My Computer 下的my documents 文件夹可以修改这文件夹所在的路径吗?可以隐藏这个文件夹吗?希望知道的指教。谢谢…

查看全部问答>

关于BSP包的一些问题

前两天问了一下有关在BSP中添加流驱动的问题,经过几天的摸索,终于认识到以前的想法是错的,在这里说一下。 之前以为在BSP中添加流驱动程序,在注册表、dirs、smdk6410.pbcxml等文件修改好以后然后单独编译生成DLL文件才能够在定制系统时添加,现 ...…

查看全部问答>

C51指针问题请教

我在学习指针过程碰到一个问题,请教大家:    下面程序,单片机上电运行,第一次调用readRom()函数正常,第二次调用读取的数就不对了,也就是说while(1) 里第二个循环就不对了,第一个循环是正确的,第三次以后每次读出数字跟第二次 ...…

查看全部问答>

我的超声波程序总是出错,不知道哪儿有问题,请高手帮忙解决!!!非常感谢

#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int sbit echo=P3^2;//接收端sbit clk=P2^0;//脉冲输入sbit lcdrs=P1^0;//液晶命令数据选择端sbit lcdrw=P1^1;//读写选择端sbit lcden=P1^2;// ...…

查看全部问答>

请教SD卡的读取时间

读数据指令发出后一般多长时间收到ox00回应?收到回应以后又一般多长时间收到开始数据标志?TAAC和NSAC具体怎么理解?…

查看全部问答>

无线局域网技术:几种无线通信标准比较

最近找了一些无线的资料 无线局域网技术:几种无线通信标准比较 无论是家庭还是商业用户,在寻求无线局域网(WLAN)解决方案上都有许多选择。很多产品都支持802.11a、802.11b、802.11g和802.11n等Wi-Fi技术标准。另外,还有蓝牙和其他各种 ...…

查看全部问答>

关于30FSPI通讯的问题,困扰我好长时间了,请大侠帮忙

关于30FSPI通讯的问题,困扰我好长时间了,请大侠帮忙 本人刚开始用PIC,要通过30F6011往30F2020里面送数据,现在先通过6011往2020里面送一个数据,再把这个数据送给2020的占空比寄存器,改变2020PWM2的占空比。但总是传输的数据不稳定,传送同样的 ...…

查看全部问答>

提问+51单片机通过74HC138驱动数码管

以前只是用管脚直接驱动数码管,现在的新开搬上多了个74HC138译码器,搞得我心神不宁无处下手,有没有大神以前用过,能不能够讲下区别是啥…

查看全部问答>