自己写启动程序 自己写链接文件(linux下的.ld文件,Keil中的分散加载文件(.sct文件)) 内存分区(flash ram) Reset_Handler()函数 去升级stm32 应用程序
制作dfu文件,第一步就是要自己ide生成hex文件或者bin文件,之后用专用的软件将生成的hex或者bin文件生成dfu文件。或者跳到以下链接,这是我自己上传的安装包 DfuSeDemo&&Dfu_File_Manager.zip。其中的dfu模式就是属于isp模式的一种。还需要自己写引导程序以及应用iap的方式去升级。对于大多数可以升级的产品来说,dfu升级是最简单快速的方法之一。对于stm3
连接脚本 xxxxxx.ld
这个描述文件叫做链接文件,如linux下的.ld文件,Keil中的分散加载文件(.sct文件)。
成功修改STM32启动程序(自定义的分散加载模式)
话说启动代码,没什么神秘的,往简单里说不外乎3个功能部分
1,做个AREA放置向量表,异常/中断跳转的地址表。
2,初始化SP的值,初始化内核的状态(比如工作在用户模式或超级模式,STM启动默认在高权限模式)
3,如果使用的是简单的分散加载,IMAGE(映像文件)也就由1个RO,1个RW,1个ZI组成,并且RO的load region和execution region相同,那么只需要COPY RW区到RAM,然后再RW区后面创建ZI区,只部分可以用汇编代码自己实现。当然库里的__main函数就包含这些功能,但是如果不用__main,那就要自己写这部分了。
何为简单的分散加载?
MDK的HELP文档里有很详细的说明。
首先编译器设置要改
要是勾了,编译器要报错,问你启动库函数找不到。
勾了就是使用默认的分散加载描述文本,.SCT文件是不让改的,所以想改就不要勾。
STM32F4的sct文件理解
我现在的板子是STM32F429,外接了SDRAM,NandFlash,我想用sct文件的主要原因是要用到了nandflash,想把yaffs移植上去,但yaffs里面有大量的malloc,STM32F429的片内sram不足以完成这些malloc,故想到把堆放到SDRAM里面去,因此我的sct文件如下:
LR_IROM1 0x08000000 0x00100000 { ; load region size_region 加载域,起始地址是0x08000000,大小是0x00100000
ER_IROM1 0x08000000 0x00100000 { ; load address = execution address 执行地址,就是链接地址
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00030000 { ; RW data
.ANY (+RW +ZI)
}
}
ARM_LIB_HEAP 0xC0000000 0x80000 { ; 指定堆栈地址
RW_HEAP 0xC0000000 0x80000 {
.ANY (HEAP)
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)