当前位置:首页 > 单片机 > 单片机
[导读]主要是为了在RAM中运行程序来解除读保护的。没想到ST-Link Utility 就直接可以。ST-Link Utility:target-->options bytes-->就可以看到读保护。解除读保护,选择 Level 0. 其他都不变(WDG_SW,nRST_STDBY,nRST_STOP都

主要是为了在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("startRDPrn");
11:FLASH_OB_Unlock();
12:FLASH_OB_RDPConfig(OB_RDP_Level_1);
13:if(FLASH_COMPLETE!=FLASH_OB_Launch())
14:printf("RDPfailedrn");
15:else
16:printf("RDPsucceedrn");
17:FLASH_OB_Lock();
18:if(SET==FLASH_OB_GetRDP())
19:printf("RDPOKrn");
20:else
21:printf("RDPKOrn");
22:}
23:else
24:{
25:printf("startremoveRDPrn");
26:FLASH_OB_Unlock();
27:FLASH_OB_RDPConfig(OB_RDP_Level_0);
28:/*StarttheOptionBytesprogrammingprocess*/
29:if(FLASH_OB_Launch()!=FLASH_COMPLETE)
30:printf("removeRDPfailedrn");
31:else
32:printf("removeRDPsucceedrn");
33:FLASH_OB_Lock();
34:if(RESET==FLASH_OB_GetRDP())
35:printf("removeRDPOKrn");
36:else
37:printf("removeRDPKOrn");
38:}
39:is_key_toggle=0;
40:}
41:}

MDK下载到flash后,重新上电(很重要),然后按键,就可以RDP。再按一次,就可以Remove RDP.

在RAM中运行程序:搜索到一篇《在内嵌RAM中运行程序》,照着做的,有些修改。

随便建个RAM.ini

1:FUNCvoidSetup(void){
2:SP=_RDWORD(0x20000000);//SetupStackPointer
3:PC=_RDWORD(0x20000004);//SetupProgramCounter
4:_WDWORD(0xE000ED08,0x20000000);//SetupVectorTableOffsetRegister
5:}
6:
7:LOAD%LINCREMENTAL
8:Setup();//SetupforRunning
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.


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

有关开发人员如何通过在RAM中执行时间敏感功能而不是从Flash中执行时间敏感功能来加快其应用程序代码的文章。您可能想知道是否要进行这样的调整,表现会发生什么变化?答案会根据微控制器的制造技术而有所不同,但是开发人员可以...

关键字: RAM 绩效改进

现在的FPGA不仅包含以前的LE,RAM也更大更快更灵活,管教IOB也更加的复杂,支持的IO类型也更多,而且内部还集成了一些特殊功能单元。

关键字: FPGA RAM

在现代嵌入式系统开发中,STM32系列微控制器因其高性能、低功耗和丰富的外设资源而广受欢迎。然而,随着应用需求的不断增长,内部RAM的容量往往成为限制系统性能的一个瓶颈。为了解决这个问题,开发者通常会将堆(Heap)配置...

关键字: STM32 RAM

RAM和ROM等存储单元的物理地址映射是由做硬件的数字工程师确定,他们在划分时主要会考虑电路的延迟,将这些储存单元按照一定的方式挂在同一条AHB总线上。而嵌入式平台软件工程师可以通过修改链接脚本来设置哪些数据、代码在程序...

关键字: RAM ROM

在嵌入式系统领域,程序代码的运行位置是一个至关重要的问题。传统的观念认为,程序代码必须从FLASH存储器搬到RAM中运行,以提高执行速度和效率。然而,随着技术的不断发展,这一观念正在受到挑战。本文将深入探讨嵌入式系统中程...

关键字: 嵌入式系统 Flash RAM

ROM和RAM是人尽皆知的概念。即:RAM(random access memory)随机存储内存 ,这种bai存储器在断电时du将丢失其存储内容,故主要用于存储短时间使用的程序。ROM(Read-Only Memory...

关键字: RAM ROM 嵌入式

在C51编程环境中,变量的存储是理解程序运行机制和优化性能的关键。C51是专为8051系列单片机设计的一种C语言扩展,它不仅继承了标准C语言的强大功能,还针对单片机的硬件特性进行了优化。本文将深入探讨C51语言中变量的存...

关键字: C51语言 单片机 RAM

沙特阿拉伯利雅得2024年9月12日 /美通社/ -- 沙特数据与人工智能管理局(SDAIA)今日发起了一项开创性倡议,旨在推动符合伦理的人工智能研究与应用。 这一重大声明是在第三届全球人工智能峰会期间发布的,峰会目前正...

关键字: 人工智能 SD AI RAM

我们经常可以看到初学者在单片机论坛中询问他们是否可以在他们微不足道的小的8位微机中运行Linux。这些问题的结果通常是带来笑声。

关键字: RAM MCU

日本横滨2024年8月20日 /美通社/ -- 富士通半导体存储器解决方案株式会社(Fujitsu Semiconductor Memory Solution Limited)欣然宣布,自2025年1月1日起,公司名称将...

关键字: LIMIT RAM 富士通 半导体存储器
关闭