STM32 读写保护功能及设置
来源:互联网 发布:windows安装淘宝镜像 编辑:程序博客网 时间:2024/06/06 02:02
STM32 读写保护功能及设置
功能::
读保护设置后将不能读出flash 的内容;当解除读保护的时候stm32 会自动擦出
整篇flash;
设置:
读保护设置:在程序的开头加入“读保护”代码,即实现了读保护功能;(每次程序
运行先
开保护)
解除读保护:解除读保护可以设置在按键里面,方便实现解锁,也不可不设;
(1)设置读保护:
if(FLASH_GetReadOutProtectionStatus() != SET)
{
//FLASH_Unlock();不解锁FALSH 也可设置读保护???
FLASH_ReadOutProtection(ENABLE);
}
(2)解除读保护
if(FLASH_GetReadOutProtectionStatus() != RESET)
{
FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE);
}
这些函数在stm32f10x_flash 里面;
注意:调用上面这个库的时候需在#include "stm32f10x_flash.h"前加#define
_FLASH_PROG;
否则报(没有定义)错;
************************************************************************
if (FLASH_GetReadOutProtectionStatus() == RESET)
{
FLASH_Unlock();
FLASH_ReadOutProtection(ENABLE);
}
/* 清除Flash读保护 */
if (FLASH_GetReadOutProtectionStatus() == SET)
{
/* 会擦除Flash */
FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE);
}
CPU Flash读保护使能后,仿真器调试会失败。J-LINK有个解锁菜单,需要解锁才能正常再次烧写程序。当然解锁会导致Flash内容被全部擦出。
启动"J-Flash ARM"工具,Target->unsercure chip 就解除了芯片的读保护。
Target->unsercure chip 后一定要上电复位,系统复位是不行的。
一定要上电复位,系统复位是不行的!
STM32对内部Flash的保护措施
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读保护允许
现在总结一下FLASH读保护和解除读保护的步骤:
(1)设置读保护
int main(void)
{
....
if(FLASH_GetReadOutProtectionStatus() != SET)
{
//FLASH_Unlock();
FLASH_ReadOutProtection(ENABLE);
}
......
while(1)
{
.....
}
}
(2)解除读保护:在程序中的某个操作中(如按键等)加入如下代码,执行后
代码自己杀死了自己,哈哈!!!
if(FLASH_GetReadOutProtectionStatus() != RESET)
{
FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE);
}
如果没有在程序中加入解除读保护代码,也不要紧,可以写段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按钮,执行上面程序,读保护可解除。
- STM32 读写保护功能及设置
- STM32 读写保护功能及设置
- STM32读写保护功能及设置
- 第51章 设置FLASH的读写保护及解除—零死角玩转STM32-F429系列
- STM32 读保护功能和清除读保护功能设置【转】
- 使用ST-Link Utility去除STM32芯片读写保护
- stm32 引脚功能设定及应用
- UPnP功能及设置
- STM32学习笔记之硬件SPI读写与极性设置
- 通用变频器的保护功能及故障处理
- STM32 特殊功能脚设置为普通脚的方法
- 【实战经验】使用STM32 ST-LINK Utility 设置读保护后不能运行
- git常用功能及设置
- Android的读写文件及权限设置
- STM32 I2C读写
- stm32 Flash读写[库函数]
- stm32 FALSH读写问题
- STM32 I2C读写
- zoj 1738 - Lagrange's Four-Square Theorem
- 数字字符串转成字母串
- 【ACdream】Andrew Stankevich Contest (1)
- 20141001 【 高精度?/数论--斐波那契数列 】 hdoj 1568 Fibonacci
- Java基础-->Java中的程序流程控制与函数
- STM32 读写保护功能及设置
- ACdream Andrew Stankevich's Contest(1)
- 利用cocos2dx 3.2开发消灭星星(七)关于星星的算法
- 黑马程序员——基础加强(jdk1.5新特性)
- SQL语句详解
- 合并排序——分治策略
- NYOJ 170 网络的可靠性
- MySql数据库的基本操作-修改表-删除约束
- [心情贴 ] 今天终于把数据库和编程语言连接起来了