STM32L152系列加入读保护后程序主函数不运行

2019-07-14 17:08发布

使用STM32L152系列整体功能正常,不加入读保护的时候LED1,正常运行,当加入读保护后,程序下进去,关机开机后,LED1,不亮,程序供电没有问题,发现程序根本就不执行了,感觉单片机锁死了。   研究好几天了,希望大家帮忙看看吧。代码如下
void Flash_RProt_ENABLE(void)
{
    u8 status;
    FLASH_Unlock();//解锁FLASH
    FLASH_OB_Unlock();//解锁选项字
    FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR);
    status=FLASH_OB_GetRDP();
    if(status==0)
    {
      FLASH_OB_RDPConfig(OB_RDP_Level_1);//Read protection of the memory
      FLASH_OB_Lock();
      FLASH_Lock();
    }
}

int main(void)
{
Flash_RProt_ENABLE();
  Main_Init();//时钟初始化,IO口初始化
  while(1)         
  {LED1_OPEN()  }

}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
clknsw
1楼-- · 2019-07-15 13:12
TOPCB 发表于 2018-10-3 19:24
如果不加密可以运行,加密不能运行,也就是说在加密的地方死掉了。在加密的过程中加串口输出,看看执行到哪一步的时候死掉的。

按照你说的修改程序,程序如下:
void Flash_RProt_ENABLE(void)
{
    u8 status;
//    FLASH_Unlock();//解锁FLASH
    FLASH_OB_Unlock();//解锁选项字
    UART1_SENDDATA(0x02);
    FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR);
    UART1_SENDDATA(0x03);
    status=FLASH_OB_GetRDP();
    UART1_SENDDATA(0x04);

    if(status==0)
    {
      FLASH_OB_RDPConfig(OB_RDP_Level_1);//Read protection of the memory
      UART1_SENDDATA(0x05);
      FLASH_OB_Lock();
      UART1_SENDDATA(0x06);
      //FLASH_Lock();
    }
}
int main(void)
{
  Main_Init();
  UART1_SENDDATA(0x01);
  Flash_RProt_ENABLE();
  while(1)         
  {  
   

  }
}
程序下进去后,不断电,串口接到01 02 03 04 05 06  正常显示。
断电后,串口接收不到任何数据,我感觉是读保护起作用后,是不是起始的堆栈发生改变了,找不到如何堆栈了。我用的是IAR软件
TOPCB
2楼-- · 2019-07-15 18:03
楼主查一下系统时钟的配置。看看是不是进入了HardFault_Handler中断。

一周热门 更多>