(发帖是求助求讨论,不是教程,大神请拍砖留情,小白请不要被误导) 最近在做一个项目,使用的STM32F407ZE处理器,里边加载了不少库和功能模块,导致代码量很快超过512K。 为了解决这个问题,故准备试一试从NOR FLASH执行代码的试验。 立即百度,发现F103有例程资料,F407灵致开发板有相应比较完整的介绍和例程。 正好手里有一片安富莱V5的板子,试验了一下,只要烧录一个复杂一点的代码就没法跑起来。由于不知所以然,很多地方卡壳。我把我调试的过程记录下来,论坛大神如云,希望有幸得到拍砖。 (在调试过程中有很多地方都没有搞明白也没不怎么理解,莫名其妙的问题很多,我也不知道对不对,反正我是这么做了)。 结合网上各个教程,大概做了以下四个主要步骤的操作:
1、生成编程算法.FLM文件。
2、添加一个BootLoader引导程序,设置跳转。
3、添加一个APP应用程序,设置偏移。
4、添加一个.ini初始化文件(这一步没有做)。
(一)首先生成编程算法.FLM打开Keil_v5\ARM\Flash\,我选择了一个名字和S29GL128差不多的文件夹
复制了一份并重命名文件夹,按照网上教程修改: 在工程中添加支持库和安富莱的BSP,修改FlashDEV.c的参数
修改FlashPrg.c文件 NORFLASH初始化函数 NORFLASH整片擦除函数 NORFLASH擦除扇区函数 NORFLASH写入函数 NORFLASH读出比对函数 修改.FLM文件输出设置 编译生成了.FLM文件,复制到Keil_v5\ARM\Flash\目录下 疑问:算法生成程序这个工程中,项目中各个文件,到底是怎么工作的,并且在Init函数中为什么不需要添加系统时钟初始化的代码(添加了也好像没什么关系),因为这个工程中没有看到启动文件或其他初始化了系统时钟之类的内容? (二)添加一个BootLoader引导程序,设置跳转 用安富莱开发板\02.配套例程\02.高级篇例程(裸机)\V5-105_NOR Flash访问例程(V1.2).rar 并且借鉴一些优秀的IAP例程改 修改FSMC的参数,使用原来参数,跑马灯程序最多运行坚持20秒,就死了。修改后可以长时间运行。 编译下载。 疑问:试验中如果在这一步不初始化FSMC-NOR,下一步烧录到NOR的代码是不会运行的。在第(四)步中提到的.INF文件是怎么回事,是怎么工作的机制?
(3)添加一个APP应用程序,设置偏移。从V5-001a_GPIO实验_跑马灯实验开始修改,设置偏移到NOR 设置keil 把只读数据放到NOR 添加第一步生成的编程算法,并改大编程算法需要使用的RAM。 编译下载,我拿好几个工程都做了测试,(跑马灯)和(V5-004e_USART实验_DMA中断模式数据发送和接收)都能成功运行,只要复杂一点的都不能运行。 ●编译下载(V5-004e_USART实验_DMA中断模式数据发送和接收)程序,我随意添加了一个大数据文件。 HEX文件体积已经达到>5MB了 ●编译下载(V5-001a_GPIO实验_跑马灯)程序
疑问:测试了不少代码,有些不能运行,有些能够正常运行。是否是部分例程也是用了NOR相关的引脚,导致NOR的读取出错?
(4)添加一个.ini初始化文件(这一步不懂也没有做)。参考灵致开发板的例程STM32F407灵致开发板光盘资料\应用例程\LingZhi_Prog_Lib_V1.0\基本外设测试例程\Example\Project\Keil\FSMC NOR_CodeExecute\APP\binary目录下FLASH_NOR.ini文件不明白什么作用,在什么时候加载,怎么写? 其keil设置 灵致开发板相关例程文件体积太大,暂时不能上传。 疑问:从这个文件可以看出.inf文件始化了NOR FSMC寄存器。那么这个文件是在什么时候怎么被加载调用的?
(五)解决STM32 CPU内部FLSAH空间不够问题的方案讨论。
对于STM32拓展NOR的方法,做产品方案是否稳定可行?如果是做产品,考虑到东西到了用户手里后需要升级固件,又该怎么做? (大神请拍砖留情) |