代码如下:
FlagStatus readstatus = RESET;
// 设置片内flash读保护
// typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
readstatus = FLASH_OB_GetRDP();
if(readstatus != SET)
{
printf("\r\nstatus = %d, try RDP\r\n", readstatus);
FLASH_Unlock();
FLASH_OB_Unlock();
FLASH_OB_RDPConfig(OB_RDP_Level_1); // 读保护
FLASH_OB_Lock();
FLASH_Lock();
NVIC_SystemReset(); // 重启动板子
}
else
printf("\r\nSET OK\r\n");
以上代码的目的是: 检查读保护状态,如果失败就加上读保护,然后重启;如果有读保护,就直接启动。
实际运行的时候,发现加读保护不成功,串口不停地循环打印"status = 0, try RDP"。
另外,用另外一个烧写工具直接设置读保护功能,板子启动之后却发现是可以的,串口打印“SET OK”.
不知道上述的代码和这个烧写工具到底差别在什么地方? 有了解的朋友吗? |