打印
[STM32F1]

stm32f103在fsmc nor跑程序。

[复制链接]
1841|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
amwrdfe|  楼主 | 2014-4-1 17:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
经过两天的搜索整理,算是把大概功能整出来。
有几点总结一下
1: app程序中切勿使用fsmc nor使用的管脚,后果可想而知。
2: app程序的中断向量表得映射到内部ram中, 直接映射在fsmc nor中断是进不去的。还是我的设置有问题???
3: ide的设置
(程序中的我的fsmc_nor是在bank1,修改了读状态函数,擦个8mbyte本来是几十秒的事,原函数愣是要弄个几分钟)。
STM32_NOR_CodeExecute.rar (1001.63 KB)



沙发
airwill| | 2014-4-1 22:07 | 只看该作者
本帖最后由 airwill 于 2014-4-1 22:08 编辑

FSMC 内存区执行代码, 由于16 位总线, 又存取等待多, 执行速度肯定慢得可怜!
楼主的速度对比, 相信符合一般情况.

使用特权

评论回复
板凳
amwrdfe|  楼主 | 2014-4-2 08:49 | 只看该作者
慢是必须的,做个测试
        //printf(" The code in inside flash, excute in inside flash \n\r");
        printf(" The code in fsmc flash, excute in fsmc flash \n\r");
       
  SysTick_Config(SystemCoreClock / 1000);
  test();
  tmp1 = isr_count;
  tmp2 = SysTick->VAL;
  printf(" The tick is %d a millisecond \n\r", (SystemCoreClock / 1000));
  printf(" The use time is: %dms-%d tick \n\r", tmp1, ((SystemCoreClock / 1000) - tmp2));

用systick计时器计时,test里面是做一些io翻转的动作。
The code in fsmc flash, excute in fsmc flash
The tick is 72000 a millisecond
The use time is: 2ms-63555 tick

The code in inside flash, excute in inside flash
The tick is 72000 a millisecond
The use time is: 0ms-19837 tick

我想还是有方法可以改善的,例如通过分散加载的方法把执行区域定位到内部ram中去, 不过这样多了一个搬运过程也麻烦。


使用特权

评论回复
地板
香水城| | 2014-4-2 11:19 | 只看该作者
本帖最后由 香水城 于 2014-4-2 11:24 编辑

1, STM32F1的标准固件库中有从FSMC外挂的NOR跑程序的例程,LZ能说下你这个和例程的区别哇?

2, vector table是放不到外部存储区的,只能放在以0x20000000和0x08000000为首地址的片上SRAM和片上Flash内部,偏移地址可用户指定。

使用特权

评论回复
5
amwrdfe|  楼主 | 2014-4-2 11:48 | 只看该作者
多谢香主的释疑,

固件库的fsmc nor上的程序有中断的话是进不去的, 因为没有处理相应的中断向量表。
还有就是上面说的, 擦除整片nor时间太久了,超过5分钟。我用的mx29lv640dbt,
不知是stm32开发板上的nor就是这样的时序,还是别的问题。 总之改成mx29lv640dbt的读状态时序后整片擦除1分钟内。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如有错误,欢迎纠正

32

主题

755

帖子

3

粉丝