stm32f4 RAM中运行程序 读保护设置
主要是為了在RAM中運行程序來解除讀保護的。沒想到ST-Link Utility 就直接可以。
ST-Link Utility:target-->options bytes-->就可以看到讀保護。
解除讀保護,選擇 Level 0. 其他都不變(WDG_SW,nRST_STDBY,nRST_STOP都按照默認的勾上)
然后點擊Apply即可。
讀保護:
1: while(1) 2: { 3: PD13_Toggle; 4: Delay(0x7FFFF); 5: //按鍵按下,切換 是否 讀保護 6: if(is_key_toggle) 7: { 8: if (FLASH_OB_GetRDP() != SET)// 9: { 10: printf("start RDP\r\n"); 11: FLASH_OB_Unlock(); 12: FLASH_OB_RDPConfig(OB_RDP_Level_1); 13: if(FLASH_COMPLETE != FLASH_OB_Launch()) 14: printf("RDP failed\r\n"); 15: else 16: printf("RDP succeed\r\n"); 17: FLASH_OB_Lock(); 18: if(SET==FLASH_OB_GetRDP()) 19: printf("RDP OK\r\n"); 20: else 21: printf("RDP KO\r\n"); 22: } 23: else 24: { 25: printf("start remove RDP\r\n"); 26: FLASH_OB_Unlock(); 27: FLASH_OB_RDPConfig(OB_RDP_Level_0); 28: /* Start the Option Bytes programming process */ 29: if (FLASH_OB_Launch() != FLASH_COMPLETE) 30: printf("remove RDP failed\r\n"); 31: else 32: printf("remove RDP succeed\r\n"); 33: FLASH_OB_Lock(); 34: if(RESET==FLASH_OB_GetRDP()) 35: printf("remove RDP OK\r\n"); 36: else 37: printf("remove RDP KO\r\n"); 38: } 39: is_key_toggle=0; 40: } 41: }MDK下載到flash后,重新上電(很重要),然后按鍵,就可以RDP。再按一次,就可以Remove RDP.
?
在RAM中運行程序:搜索到一篇《在內嵌RAM中運行程序》,照著做的,有些修改。
隨便建個RAM.ini
?
1: FUNC void Setup (void) { 2: SP = _RDWORD(0x20000000); // Setup Stack Pointer 3: PC = _RDWORD(0x20000004); // Setup Program Counter 4: _WDWORD(0xE000ED08, 0x20000000); // Setup Vector Table Offset Register 5: } 6: 7: LOAD %L INCREMENTAL 8: Setup(); // Setup for Running 9: g, main哈哈,其中 %L? 就是你的工程.axf.? 很多其他做法都是帶個路徑/project.axf。
而%L要簡單很多。
LOAD %L INCREMENTAL
g,main 相當于MDK中的:
所以要么RAM.ini中有這兩句,要么把這里兩個勾 勾上。
?
F4,128kB,就分成 64KB+64KB吧。
為了能夠RAM調試中響應中斷。要加上:VECT_TAB_RAM. 我一開始就是沒加,一直不能進中斷。
還要注意這個地方:
似乎右邊的都要勾上才行。
網上有些說法錯的,比如在RAM中運行就只能在調試模式下,不能點擊那個Load按鈕下載。
一切都正常的情況下,應該是這個結果:
地址 0x2000….開頭
能夠設斷點。(RAM的這個Target和原來的那個要設置不同的.o文件位置)
Good Luck.
轉載于:https://www.cnblogs.com/tofixer/p/3685162.html
總結
以上是生活随笔為你收集整理的stm32f4 RAM中运行程序 读保护设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android开发之-软件设置保存-快速
- 下一篇: 搭建EJB3开发环境