本帖最后由 aozhouduwang 于 2019-5-26 20:02 编辑
有两个程序,其中一个开了读保护,用STVP下载HEX提示成功[mw_shl_code=c,true]//> Programming PROGRAM MEMORY area...
//Cut Version and Revision of device: 1.2
//< PROGRAM MEMORY programming completed.
//> Verifying PROGRAM MEMORY area...
//Cut Version and Revision of device: 1.2
//< PROGRAM MEMORY successfully verified.
[/mw_shl_code]
而另一个程序开了读保护,用STVP下载HEX提示 “the device is protected”
[mw_shl_code=c,true]
//> Programming PROGRAM MEMORY area...
//Cut Version and Revision of device: 1.2
//< PROGRAM MEMORY programming completed.
// Verifying PROGRAM MEMORY area...
//Cut Version and Revision of device: 1.2
//Error : The device is protected
//Operation aborted
//Error : < PROGRAM MEMORY verifying failed.
[/mw_shl_code]
疑问是两个hex在程序中都开了写保护选项字节,为什么其中一个可以用STVP下载成功,而另一个提示校验失败呢,写保护的程序是一模一样的。
贴出写保护代码
[mw_shl_code=c,true]void EEPROM_INIT()
{
u16 ropAddr=0x4800;//F103的option在4800h开始
u8 ropOptionStatus;
FLASH_DeInit();
// 设置编程时间,指定标准编程时间即可
FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
ropOptionStatus=FLASH_ReadOptionByte(ropAddr);;//rop状态
// 解锁EEPROM区域(注意type是Data)
FLASH_Unlock(FLASH_MEMTYPE_DATA);
// 等待解锁成功
// 本质是判断FLASH->IAPSR寄存器的DUL标志位是否变为1。1表示写保护消除,0为保护中
// 任何时候都可以通过变更此标志位为0来恢复写保护状态
while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET);
if(ropOptionStatus != 0xaa)
{
FLASH_ProgramOptionByte(ropAddr, 0xaa);//设置读保护
}
FLASH_Lock(FLASH_MEMTYPE_DATA);// Flash Data区加密
}[/mw_shl_code]
一周热门 更多>