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)设置读维护:
intmain(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会主动悉数擦除。代码如下:
intmain(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选项Downloadtab中勾悉数去掉。
按上面设置完成后,按Debug按钮,履行上面程序,读维护可免除。
*************************富丽丽的分割线***********************************************
if
(FLASH_GetReadOutProtectionStat
us()
==
RESET)
{
FLASH_Unlock();
FLASH_ReadOutProtection(ENABLE);
}
*************************富丽丽的分割线***********************************************
if
(FLASH_GetReadOutProtectionStat
us()
==
SET)
{
FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE);
}
CPUFlash读维护使能后,仿真器调试会失利。J-LINK有个解锁菜单,需求解锁才干正常再次烧写程序。当然解锁会导致Flash内容被悉数擦出。
发动”J-FlashARM”东西,Target->unsercurechip就免除了芯片的读维护。Target->unsercurechip后一定要上电复位,体系不复位是不可的。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/peixun/258378.html