STM32可以对存储在flash上的程序进行读保护.
启动读保护后,用户就不能再读写程序了.
所以,在烧写程序之前,需要程序调用关闭读保护.关闭读保护后,会自动清空flash上的程序
头文件位于:#include "stm32f10x_flash.h"
启动保护,用在main()函数初始化时调用:
void Set_Protect(void) //启动保护
{
if(FLASH_GetReadOutProtectionStatus() != SET)
{
FLASH_Unlock()//解锁
FLASH_ReadOutProtection(ENABLE)
FLASH_Lock()//上锁
}
}
注意:
当代码第一次调用Set_Protect()函数启动读保护时。
期间不能再次调用Off_Protect()函数关闭读保护,需要重新断电才能关闭读保护(因为Flash状态启动读保护后,不能立即设置Status=1)
关闭读保护,在串口接收某个有效数据或按下某个按键时,调用:
void Off_Protect(void) //关闭保护
{
if(FLASH_GetReadOutProtectionStatus() != RESET)
{
FLASH_Unlock()//不解锁FALSH也可设置读保护
FLASH_ReadOutProtection(DISABLE)
FLASH_Lock()//上锁
}
}
运行测试
1.第一步,下载程序
2.下载成功后,再次烧写程序,校验是否启动读保护(因为启动读保护后,不能进行读写程序了)
3.通过ST-LINK Utility工具尝试连接芯片,发现确实不能读数据了
然后只要代码调用Off_Protect()函数,便可以取消保护了
FLASH_Unlock() //Flash解锁FLASH_ReadOutProtection(ENABLE) //Flash读保护允许
FLASH_ReadOutProtection(DISABLE) //Flash读保护禁止
可以用Jlink安装目录下的 jLinkSTM32.exe来 reset :
找Link安装目录下的 jLinkSTM32.exe
运行 jLinkSTM32.exe
根据提示 *** 作, 这里输入芯片系列选项
回车, 重置成功
按上面步骤重置芯片, 然后再去调试和下载应该就OK了.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)